diff --git a/ast/print.go b/ast/print.go index fa593ae2..063e9eb2 100644 --- a/ast/print.go +++ b/ast/print.go @@ -202,5 +202,11 @@ func (n *MapNode) String() string { } func (n *PairNode) String() string { - return fmt.Sprintf("%s: %s", n.Key.String(), n.Value.String()) + if str, ok := n.Key.(*StringNode); ok { + if utils.IsValidIdentifier(str.Value) { + return fmt.Sprintf("%s: %s", str.Value, n.Value.String()) + } + return fmt.Sprintf("%q: %s", str.String(), n.Value.String()) + } + return fmt.Sprintf("(%s): %s", n.Key.String(), n.Value.String()) } diff --git a/ast/print_test.go b/ast/print_test.go index 16d64357..d9e55c2e 100644 --- a/ast/print_test.go +++ b/ast/print_test.go @@ -55,8 +55,8 @@ func TestPrint(t *testing.T) { {`func(a)`, `func(a)`}, {`func(a, b)`, `func(a, b)`}, {`{}`, `{}`}, - {`{a: b}`, `{"a": b}`}, - {`{a: b, c: d}`, `{"a": b, "c": d}`}, + {`{a: b}`, `{a: b}`}, + {`{a: b, c: d}`, `{a: b, c: d}`}, {`[]`, `[]`}, {`[a]`, `[a]`}, {`[a, b]`, `[a, b]`}, @@ -71,6 +71,7 @@ func TestPrint(t *testing.T) { {`a[1:]`, `a[1:]`}, {`a[:]`, `a[:]`}, {`(nil ?? 1) > 0`, `(nil ?? 1) > 0`}, + {`{("a" + "b"): 42}`, `{("a" + "b"): 42}`}, } for _, tt := range tests {