mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 15:27:13 +03:00
templater: adjust binding strength of '%' and '|' operators (BC)
This makes 'foo|bar%baz' parsed as '(foo|bar)%baz', not 'foo|(bar%baz)'. Perhaps it was a mistake that '%' preceded '|'. Both '|' and '%' can be considered a kind of function application, and '|' is more like a '.' operator seen in OO languages. So IMHO '|' should have the same (or higher) binding as '%'. The BC breakage should be minimal since both '|' and '%' operators have strict requirements for their operands and 'foo|bar%baz' was invalid: - right-hand side of '|' must be a symbol - left-hand side of '%' must be a dict or list - right-hand side of '%' must be a string or symbol
This commit is contained in:
parent
d5b31456c5
commit
c22459dc5d
@ -34,7 +34,7 @@ from . import (
|
||||
elements = {
|
||||
# token-type: binding-strength, primary, prefix, infix, suffix
|
||||
"(": (20, None, ("group", 1, ")"), ("func", 1, ")"), None),
|
||||
"%": (16, None, None, ("%", 16), None),
|
||||
"%": (15, None, None, ("%", 15), None),
|
||||
"|": (15, None, None, ("|", 15), None),
|
||||
"*": (5, None, None, ("*", 5), None),
|
||||
"/": (5, None, None, ("/", 5), None),
|
||||
|
@ -134,6 +134,20 @@ But negate binds closer still:
|
||||
(string '\n'))
|
||||
-3
|
||||
|
||||
Filters bind as close as map operator:
|
||||
|
||||
$ hg debugtemplate -r0 -v '{desc|splitlines % "{line}\n"}'
|
||||
(template
|
||||
(%
|
||||
(|
|
||||
(symbol 'desc')
|
||||
(symbol 'splitlines'))
|
||||
(template
|
||||
(symbol 'line')
|
||||
(string '\n'))))
|
||||
line 1
|
||||
line 2
|
||||
|
||||
Keyword arguments:
|
||||
|
||||
$ hg debugtemplate -r0 -v '{foo=bar|baz}'
|
||||
|
Loading…
Reference in New Issue
Block a user