Skip to content

Commit 42a193e

Browse files
fix formatter to recursively format objects inside function call arguments
1 parent 8180b34 commit 42a193e

5 files changed

Lines changed: 101 additions & 0 deletions

File tree

hcl2/formatter.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
TupleRule,
1818
)
1919
from hcl2.rules.expressions import ExprTermRule
20+
from hcl2.rules.functions import FunctionCallRule
2021
from hcl2.rules.for_expressions import (
2122
ForTupleExprRule,
2223
ForObjectExprRule,
@@ -175,9 +176,19 @@ def format_expression(self, rule: ExprTermRule, indent_level: int = 0):
175176
elif isinstance(rule.expression, ForObjectExprRule):
176177
self.format_forobjectexpr(rule.expression, indent_level)
177178

179+
elif isinstance(rule.expression, FunctionCallRule):
180+
self.format_function_call(rule.expression, indent_level)
181+
178182
elif isinstance(rule.expression, ExprTermRule):
179183
self.format_expression(rule.expression, indent_level)
180184

185+
def format_function_call(self, rule: FunctionCallRule, indent_level: int = 0):
186+
"""Format a function call by recursively formatting its arguments."""
187+
if rule.arguments is not None:
188+
for arg in rule.arguments.arguments:
189+
if isinstance(arg, ExprTermRule):
190+
self.format_expression(arg, indent_level)
191+
181192
def format_fortupleexpr(self, expression: ForTupleExprRule, indent_level: int = 0):
182193
"""Format a for-tuple expression with newlines around clauses."""
183194
for child in expression.children:
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
variable "object" {
2+
type = object({
3+
key = string
4+
value = string
5+
})
6+
}
7+
8+
variable "nested" {
9+
type = map(object({
10+
name = string
11+
enabled = bool
12+
}))
13+
}
14+
15+
variable "multi_arg" {
16+
default = merge({
17+
a = 1
18+
b = 2
19+
}, {
20+
c = 3
21+
})
22+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
variable "object" {
2+
type = object({
3+
key = string,
4+
value = string
5+
})
6+
}
7+
8+
9+
variable "nested" {
10+
type = map(object({
11+
name = string,
12+
enabled = bool
13+
}))
14+
}
15+
16+
17+
variable "multi_arg" {
18+
default = merge({
19+
a = 1,
20+
b = 2
21+
}, {
22+
c = 3
23+
})
24+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"variable": [
3+
{
4+
"\"object\"": {
5+
"type": "${object({key = string, value = string})}",
6+
"__is_block__": true
7+
}
8+
},
9+
{
10+
"\"nested\"": {
11+
"type": "${map(object({name = string, enabled = bool}))}",
12+
"__is_block__": true
13+
}
14+
},
15+
{
16+
"\"multi_arg\"": {
17+
"default": "${merge({a = 1, b = 2}, {c = 3})}",
18+
"__is_block__": true
19+
}
20+
}
21+
]
22+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"variable": [
3+
{
4+
"\"object\"": {
5+
"type": "${object({key = string, value = string})}",
6+
"__is_block__": true
7+
}
8+
},
9+
{
10+
"\"nested\"": {
11+
"type": "${map(object({name = string, enabled = bool}))}",
12+
"__is_block__": true
13+
}
14+
},
15+
{
16+
"\"multi_arg\"": {
17+
"default": "${merge({a = 1, b = 2}, {c = 3})}",
18+
"__is_block__": true
19+
}
20+
}
21+
]
22+
}

0 commit comments

Comments
 (0)