diff --git a/parser/printer.go b/parser/printer.go index ac7ffe1..f377505 100644 --- a/parser/printer.go +++ b/parser/printer.go @@ -139,7 +139,7 @@ func (p *printer) printExpression(value Expression) { func (p *printer) printList(list []Expression, pos, endPos scanner.Position) { p.requestSpace() p.printToken("[", pos) - if len(list) > 1 || pos.Line != endPos.Line { + if len(list) > 1 || pos.Line != endPos.Line || listHasMap(list) { p.requestNewline() p.indent(p.curIndent() + 4) for _, value := range list { @@ -392,3 +392,12 @@ func max(a, b int) int { return b } } + +func listHasMap(list []Expression) bool { + for _, value := range list { + if _, ok := value.(*Map); ok { + return true + } + } + return false +} diff --git a/parser/printer_test.go b/parser/printer_test.go index 077a782..c889b2a 100644 --- a/parser/printer_test.go +++ b/parser/printer_test.go @@ -426,6 +426,27 @@ stuff { ], ], } +`, + }, + { + input: ` +// test +stuff { + namespace: "google", + list_of_structs: [{ key1: "a", key2: "b" }], +} +`, + output: ` +// test +stuff { + namespace: "google", + list_of_structs: [ + { + key1: "a", + key2: "b", + }, + ], +} `, }, }