diff tests/test-command-template.t @ 34329:6367318327f0

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
author Yuya Nishihara <yuya@tcha.org>
date Mon, 24 Apr 2017 21:37:11 +0900
parents 7bbc4e113e5f
children 89aec1834a86
line wrap: on
line diff
--- a/tests/test-command-template.t	Sun Sep 24 15:22:46 2017 +0900
+++ b/tests/test-command-template.t	Mon Apr 24 21:37:11 2017 +0900
@@ -134,6 +134,20 @@
     (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}'