diff --git a/ast/term.go b/ast/term.go index 550508d9a2..0511fe49f2 100644 --- a/ast/term.go +++ b/ast/term.go @@ -910,7 +910,7 @@ func (ref Ref) String() string { switch p := p.Value.(type) { case String: str := string(p) - if varRegexp.MatchString(str) && len(buf) > 0 { + if varRegexp.MatchString(str) && len(buf) > 0 && !IsKeyword(str) { buf = append(buf, "."+str) } else { buf = append(buf, "["+p.String()+"]") diff --git a/ast/term_test.go b/ast/term_test.go index bc2d422a39..e179fe2608 100644 --- a/ast/term_test.go +++ b/ast/term_test.go @@ -311,6 +311,7 @@ func TestTermString(t *testing.T) { assertToString(t, RefTerm(VarTerm("foo"), StringTerm("bar")).Value, "foo.bar") assertToString(t, RefTerm(VarTerm("foo"), StringTerm("bar"), VarTerm("i"), IntNumberTerm(0), StringTerm("baz")).Value, "foo.bar[i][0].baz") assertToString(t, RefTerm(VarTerm("foo"), BooleanTerm(false), NullTerm(), StringTerm("bar")).Value, "foo[false][null].bar") + assertToString(t, RefTerm(VarTerm("p"), StringTerm("not")).Value, `p["not"]`) assertToString(t, ArrayTerm().Value, "[]") assertToString(t, ObjectTerm().Value, "{}") assertToString(t, SetTerm().Value, "set()")