if l.parenDepth < 0 {
return l.errorf("unexpected right paren %#U", r)
}
+ // Catch the mistake of (a).X, which will parse as two args.
+ // See issue 3999. TODO: Remove once arg parsing is
+ // better defined.
+ if l.peek() == '.' {
+ return l.errorf("cannot evaluate field of parenthesized expression")
+ }
return lexInsideAction
case r <= unicode.MaxASCII && unicode.IsPrint(r):
l.emit(itemChar)
{"invalid punctuation", "{{printf 3, 4}}", hasError, ""},
{"multidecl outside range", "{{with $v, $u := 3}}{{end}}", hasError, ""},
{"too many decls in range", "{{range $u, $v, $w := 3}}{{end}}", hasError, ""},
+ // This one should work but doesn't. Caught as a parse error to avoid confusion.
+ // TODO: Update after issue 3999 is resolved.
+ {"dot applied to parentheses", "{{printf (printf .).}}", hasError, ""},
// Equals (and other chars) do not assignments make (yet).
{"bug0a", "{{$x := 0}}{{$x}}", noError, "{{$x := 0}}{{$x}}"},
{"bug0b", "{{$x = 1}}{{$x}}", hasError, ""},