[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:
Albert Chu
2025-03-17 18:26:52 -06:00
parent f1b178d25e
commit 591d3a2c70
3 changed files with 376 additions and 8 deletions
+22 -8
View File
@@ -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)