Charles-P. Clermont and Claude Opus 4.5
26cb29487b
fix(parser): implement RTL associativity for boolean expressions
...
- Use right-recursive descent for proper RTL precedence
- Add bin/liquid-spec-all-adapters for CI workflow
- Update CI to use dedicated script
Fixes 128 precedence test failures from original implementation.
Co-Authored-By: Claude Opus 4.5 <[email protected] >
2026-01-28 09:09:19 -05:00
Charles-P. Clermont
3b13ee0ff3
Remove default_context test from Condition
2026-01-27 10:07:36 -05:00
Charles-P. Clermont
ef4770975b
Fix MethodLiteral for updated blank & empty
2026-01-27 10:07:36 -05:00
Charles-P. Clermont
a4e82eb5c1
Annotate Parser with grammar rules
2026-01-27 10:07:35 -05:00
Charles-P. Clermont
785427d85c
Update History.md
2026-01-27 10:07:35 -05:00
Charles-P. Clermont
10c0de74b5
Add support for parenthesized expressions
2026-01-27 10:07:35 -05:00
Charles-P. Clermont
f9b5313020
Prepare logical for grouping
2026-01-27 10:07:35 -05:00
Charles-P. Clermont
7f414e5fa6
Remove Condition#{child_relation,and,or}
...
- Remove Condition#child_relation
- Remove Condition#and
- Remove Condition#or
- Simplify Condition#evaluate
This logic was moved to the Parser & BinaryExpression
2026-01-27 10:07:35 -05:00
Charles-P. Clermont
429711fd82
Add support for logical expressions
2026-01-26 16:53:38 -05:00
Charles-P. Clermont
e911eea3df
Remove Condition.op, Condition.right
...
- Remove comparison expression logic
2026-01-26 16:52:46 -05:00
Charles-P. Clermont
abbd342b22
Remove Condition.operators feature that let you define operators
...
It was incompatible with the lexer anyway. Not used internally either.
2026-01-26 16:52:31 -05:00
Charles-P. Clermont
daae2186d2
Make Condition unit tests go through BinaryExpression
...
Instead of having Condition parse the left op right, make
BinaryExpression do it. Make sure all the tests pass as they
used to in the process.
2026-01-26 16:52:31 -05:00
Charles-P. Clermont
83f0ac5424
Add boolean expressions as variable unit tests
2026-01-26 16:52:31 -05:00
Charles-P. Clermont
f60d3f0a41
Use BinaryExpression instead of Condition for comparisons
2026-01-26 16:52:31 -05:00
Charles-P. Clermont
0b890904f0
Make Parser.expression parse equality expressions
2026-01-26 16:52:31 -05:00
Charles-P. Clermont
b161dae495
Make Parser.expression parse comparisons
2026-01-26 16:52:31 -05:00
Charles-P. Clermont and Claude Opus 4.5
6f03452245
style: fix rubocop offenses
...
Co-Authored-By: Claude Opus 4.5 <[email protected] >
2026-01-26 16:52:21 -05:00
Charles-P. Clermont and Claude Opus 4.5
1b420ab6d8
fix(case): use Condition.parse_expression for empty/blank handling
...
Co-Authored-By: Claude Opus 4.5 <[email protected] >
2026-01-26 16:52:21 -05:00
Charles-P. Clermont
18f1e8a61e
Replace Context[]'s Expression.parse with Parser#expression
2026-01-26 16:52:17 -05:00
Charles-P. Clermont
dff829ec72
Extract Parser#range_lookup out of Expression.parse
2026-01-26 16:52:17 -05:00
Charles-P. Clermont
8b04c52ab2
Extract Parser#variable_lookup out of Expression.parse
2026-01-26 16:52:17 -05:00
Charles-P. Clermont
8efcf7dd3a
Move VariableLookup parsing logic to .parse instead of initializer
...
Goal is to get rid of it entirely, but baby steps.
2026-01-26 16:52:17 -05:00
Charles-P. Clermont
af774ebc55
Replace RangeLookup.parse with RangeLookup.create
2026-01-26 16:52:17 -05:00
Charles-P. Clermont
288c4eaac3
Simplify parse_number
...
We don't need all the multi-dot logic in a world where number comes
out of the Lexer.
2026-01-26 16:52:17 -05:00
Charles-P. Clermont
e1e0129983
Extract Parser#number parse out of Expression.parse
2026-01-26 16:52:17 -05:00
Charles-P. Clermont
2a86852eb3
Extract Parser#string out of Expression.parse
2026-01-26 16:52:17 -05:00
Charles-P. Clermont
85d73e462d
Remove Expression#safe_parse
2026-01-26 16:52:17 -05:00
Charles-P. Clermont
c9ae128354
Rename Parser#expression_node -> Parser#expression
2026-01-26 16:52:17 -05:00
Charles-P. Clermont
6cfcd6cac0
Rename Parser#argument -> argument_string
2026-01-26 16:52:17 -05:00
Charles-P. Clermont
6b78291449
Rename Parser#expression -> Parser#expression_string
2026-01-26 16:52:17 -05:00
Charles-P. Clermont
7d0bdd166d
Move parse_expression to Parser.unsafe_parse_expression
...
- Add Parser#string
- Add Parser#unsafe_parse_expression
- Add private Parser#parse_expression
- Remove ParseContext.parse_expression
- Remove Tag.parse_expression
- Condition.parse_expression now takes a parser as argument
2026-01-26 16:52:17 -05:00
Charles-P. Clermont
cf3d845315
Move safe_parse_expression into Parser.expression_node
...
- Make `Parser` accept the expression cache
- Remove `safe_parse_expression` from `ParseContext`
- Replace all usage of `safe_parse_expression` with `parser.expression_node`
2026-01-26 16:52:17 -05:00
Charles-P. Clermont
851584327a
Remove warnings system
2026-01-26 16:52:17 -05:00
Charles-P. Clermont and Claude Opus 4.5
9a3057f8e6
Point liquid-spec to cp-gate-lax-specs-ai branch
...
This branch gates lax-mode-only specs behind lax_parsing feature:
- shopify_production_recordings: 22 specs
- liquid_ruby: 16 specs
- basics: error regex updated
Co-Authored-By: Claude Opus 4.5 <[email protected] >
2026-01-26 16:52:06 -05:00
Charles-P. Clermont
f4a5454cd6
Remove warnings system
2026-01-14 09:55:21 -05:00
Charles-P. Clermont
40b1f83f25
Update changelog with planned changes for 6.0.0
2026-01-14 09:55:21 -05:00
Charles-P. Clermont
62400f71d0
Remove :error_mode
2026-01-14 09:55:20 -05:00
Charles-P. Clermont
b7fa6a89b3
Rename strict2_parse to parse_markup
2026-01-14 09:54:19 -05:00
Charles-P. Clermont
d936ce4ac9
Remove :lax, :strict and :warn error modes
2026-01-14 09:54:19 -05:00
CP Clermont and GitHub
d897899f66
Merge pull request #2036 from Shopify/cp-fix-rubocop
...
Update the specs to new signature and fix CI
2026-01-14 09:14:01 -05:00
Charles-P. Clermont and Claude Opus 4.5
aa817c4cfd
Update liquid-spec adapters for new ctx-based API
...
liquid-spec main changed the adapter API:
- compile block now receives (ctx, source, options) and should store
the template in ctx[:template]
- render block now receives (ctx, assigns, options) and retrieves
the template from ctx[:template]
Co-Authored-By: Claude Opus 4.5 <[email protected] >
2026-01-13 13:06:55 -05:00
Charles-P. Clermont
7d90b524ea
Remove on pull_request trigger. It's redundant.
2026-01-12 13:27:53 -05:00
Charles-P. Clermont
bbcf8d6ad8
Better matrix CI check names
2026-01-12 13:27:52 -05:00
Charles-P. Clermont
51ff08db7b
Fix CI
2026-01-12 13:06:13 -05:00
Tobi Lutke and Claude Opus 4.5
eaa9f215bf
Add lax and YJIT liquid-spec adapters
...
- ruby_liquid_lax.rb: Tests lax parsing mode with :lax_parsing feature
- ruby_liquid_yjit.rb: Tests YJIT + strict mode + ActiveSupport
Matrix results: 4483 matched, 18 different (lax edge cases), 61 skipped
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <[email protected] >
2026-01-05 15:11:29 -10:00
Tobi Lutke and Claude Opus 4.5
ccd05e869c
Make blank/empty comparisons invariant to ActiveSupport
...
- Implement liquid_blank? and liquid_empty? methods in Condition
to emulate ActiveSupport's behavior when it's not loaded
- This ensures templates like `{% if x == blank %}` work identically
whether ActiveSupport is loaded or not
- Update liquid-spec adapters for new API (ctx parameter)
- Add rake spec task for running liquid-spec matrix
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <[email protected] >
2026-01-05 14:54:43 -10:00
Tobias Lütke and GitHub
a4a29f3e08
Merge pull request #2034 from Shopify/fix-liquid-spec-without-activesupport
...
Require liquid-spec to be run on commit automatically and related fixes
2026-01-01 22:32:38 -05:00
Tobi Lutke
0058e4322b
Add fail-fast: false to prevent job cancellation
2026-01-01 22:30:14 -05:00
Tobi Lutke
50e1789537
Use liquid-spec feature branch until PR is merged
2026-01-01 22:29:32 -05:00
Tobi Lutke
79a2e042ff
Use liquid-spec main branch
2026-01-01 22:24:00 -05:00