mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-15 08:50:45 -07:00
[WIP] Support for nested boolean expressions in parentheses
- Added unit tests for range syntax - Added logical expression unit tests - parser respects parentheses during expression traversal
This commit is contained in:
+22
-8
@@ -60,12 +60,7 @@ module Liquid
|
||||
when :string, :number
|
||||
consume
|
||||
when :open_round
|
||||
consume
|
||||
first = expression
|
||||
consume(:dotdot)
|
||||
last = expression
|
||||
consume(:close_round)
|
||||
"(#{first}..#{last})"
|
||||
consume_round_parentheses(token)
|
||||
else
|
||||
raise SyntaxError, "#{token} is not a valid expression"
|
||||
end
|
||||
@@ -79,13 +74,32 @@ module Liquid
|
||||
operator = consume(:boolean_operator)
|
||||
left = expr
|
||||
right = expression
|
||||
|
||||
"#{left} #{operator} #{right}"
|
||||
if look(:close_round)
|
||||
"(#{left} #{operator} #{right})"
|
||||
else
|
||||
"#{left} #{operator} #{right}"
|
||||
end
|
||||
else
|
||||
expr
|
||||
end
|
||||
end
|
||||
|
||||
def consume_round_parentheses(token)
|
||||
consume
|
||||
first = expression
|
||||
dotdot_token = consume?(:dotdot)
|
||||
if dotdot_token
|
||||
last = expression
|
||||
consume(:close_round)
|
||||
"(#{first}..#{last})"
|
||||
elsif look(:close_round)
|
||||
consume(:close_round)
|
||||
first
|
||||
else
|
||||
raise SyntaxError, "#{token} is not a valid expression"
|
||||
end
|
||||
end
|
||||
|
||||
def argument
|
||||
str = +""
|
||||
# might be a keyword argument (identifier: expression)
|
||||
|
||||
Reference in New Issue
Block a user