templater: check invalid use of list expression properly (issue5920)
The error message is still cryptic, but it should be better.
--- a/mercurial/templater.py Tue Nov 13 18:08:55 2018 +0300
+++ b/mercurial/templater.py Tue Nov 13 22:15:30 2018 +0900
@@ -374,9 +374,7 @@
if not exp:
raise error.ParseError(_("missing argument"))
t = exp[0]
- if t in curmethods:
- return curmethods[t](exp, context)
- raise error.ParseError(_("unknown method '%s'") % t)
+ return curmethods[t](exp, context)
# template evaluation
@@ -496,6 +494,10 @@
def buildkeyvaluepair(exp, content):
raise error.ParseError(_("can't use a key-value pair in this context"))
+def buildlist(exp, context):
+ raise error.ParseError(_("can't use a list in this context"),
+ hint=_('check place of comma and parens'))
+
# methods to interpret function arguments or inner expressions (e.g. {_(x)})
exprmethods = {
"integer": lambda e, c: (templateutil.runinteger, e[1]),
@@ -508,6 +510,7 @@
"%": buildmap,
"func": buildfunc,
"keyvalue": buildkeyvaluepair,
+ "list": buildlist,
"+": lambda e, c: buildarithmetic(e, c, lambda a, b: a + b),
"-": lambda e, c: buildarithmetic(e, c, lambda a, b: a - b),
"negate": buildnegate,
--- a/tests/test-template-basic.t Tue Nov 13 18:08:55 2018 +0300
+++ b/tests/test-template-basic.t Tue Nov 13 22:15:30 2018 +0900
@@ -188,7 +188,8 @@
$ hg debugtemplate '{" "|separate}'
$ hg debugtemplate '{("not", "an", "argument", "list")|separate}'
- hg: parse error: unknown method 'list'
+ hg: parse error: can't use a list in this context
+ (check place of comma and parens)
[255]
Second branch starting at nullrev: