Tobi Lutke and Chris Pak
f879183a23
update autoresearch.md progress log
2026-04-04 17:42:32 -07:00
Tobi Lutke and Chris Pak
34971c0314
replace WhitespaceOrNothing regex with byte-level blank_string? check
2026-04-04 17:42:32 -07:00
Tobi Lutke and Chris Pak
f24ca042a2
avoid array allocation in parse_tag_token: return tag_name, store markup/newlines as class ivars
2026-04-04 17:42:32 -07:00
Tobi Lutke and Chris Pak
4ea4350775
clean up filter parsing: Lexer fallback for args, no-arg fast scan stays
2026-04-04 17:42:32 -07:00
Tobi Lutke and Chris Pak
aedd2dded6
autoresearch.md: add strategic direction toward single-pass scanner architecture
2026-04-04 17:42:32 -07:00
Tobi Lutke and Chris Pak
e1f363c72c
add security constraint to autoresearch.md, fix strict mode gate
2026-04-04 17:42:32 -07:00
Tobi Lutke and Chris Pak
808dad6fab
split filter parsing: scan no-arg filters directly, only invoke Lexer when args present
2026-04-04 17:42:32 -07:00
Tobi Lutke and Chris Pak
c82b6e58ef
autoresearch: add autoresearch.md/sh, increase benchmark warmup to 20 iterations
2026-04-04 17:42:32 -07:00
Tobi Lutke and Chris Pak
b994f22983
extend fast-path to handle quoted string literal variables (262 more fast-pathed)
2026-04-04 17:42:32 -07:00
Tobi Lutke and Chris Pak
62877e666c
skip filter arg splat for no-arg filters, trim render loop comments
2026-04-04 17:42:32 -07:00
Tobi Lutke and Chris Pak
48a2fae5f6
hoist write score check out of render loop: skip increment_write_score when no limits active
2026-04-04 17:42:32 -07:00
Tobi Lutke and Chris Pak
27fcb3a4c9
use frozen EMPTY_ARRAY for disabled_tags in Variable
2026-04-04 17:33:53 -07:00
Tobi Lutke and Chris Pak
6e9782c5cc
return [tag_name, markup, newlines] from parse_tag_token: avoid 2 whitespace string allocs
2026-04-04 17:33:53 -07:00
Tobi Lutke and Chris Pak
da57336be9
use getbyte dispatch instead of start_with? in parse_for_document
2026-04-04 17:33:53 -07:00
Tobi Lutke and Chris Pak
28f29433e4
avoid empty array allocation in evaluate_filter_expressions for no-arg filters
2026-04-04 17:33:53 -07:00
Tobi Lutke and Chris Pak
4ff5523713
replace For tag Syntax regex with manual byte-level parser
2026-04-04 17:33:53 -07:00
Tobi Lutke and Chris Pak
f388c873de
expose expression_cache/string_scanner via attr_reader, skip regex in filter args without colon
2026-04-04 17:33:53 -07:00
Tobi Lutke and Chris Pak
543c1e1fe7
unified fast-path Variable parsing: handle both plain lookups and filter chains without full Lexer pass for name
2026-04-04 17:33:53 -07:00
Tobi Lutke and Chris Pak
885c8df159
fast-path render for filter-less variables: skip render method overhead
2026-04-04 17:33:53 -07:00
Tobi Lutke and Chris Pak
8f67d81023
skip TagAttributes scan in for tag when no colon present
2026-04-04 17:33:53 -07:00
Tobi Lutke and Chris Pak
01f33e96e8
fast-path simple if conditions: skip ExpressionsAndOperators scan for single conditions
2026-04-04 17:33:53 -07:00
Tobi Lutke and Chris Pak
9e6f93a494
replace SIMPLE_VARIABLE regex with byte-level scanner to avoid MatchData
2026-04-04 17:33:53 -07:00
Tobi Lutke and Chris Pak
dc6e9799e9
fast-path simple variable parsing: skip Lexer/Parser for plain dot-separated lookups
2026-04-04 17:33:53 -07:00
Tobi Lutke and Chris Pak
98e29aa4a7
use frozen EMPTY_ARRAY for Variable filters when no filters present
2026-04-04 17:33:53 -07:00
Tobi Lutke and Chris Pak
a404cf10d0
fast-path variable_lookups: skip mutable string alloc when no dot/bracket follows
2026-04-04 17:33:53 -07:00
Tobi Lutke and Chris Pak
e73b41f3b6
fast-path String in render_obj_to_output, avoid Utils.to_s dispatch for common case
2026-04-04 17:33:53 -07:00
Tobi Lutke and Chris Pak
9d9d094e20
short-circuit parse_number with first-byte check before regex
2026-04-04 17:33:53 -07:00
Tobi Lutke and Chris Pak
4c96b5f682
avoid unnecessary strip allocation in Expression.parse, use byteslice for string literals
2026-04-04 17:33:53 -07:00
Tobi Lutke and Chris Pak
0b19c0ce44
use equal? for frozen array comparison in Lexer, skip whitespace with \s+
2026-04-04 17:33:53 -07:00
Tobi Lutke and Chris Pak
a43d970473
use getbyte instead of string indexing in whitespace_handler and create_variable
2026-04-04 17:33:53 -07:00
Tobi Lutke and Chris Pak
3751f95da2
add auto/bench.sh: unit tests + liquid-spec + perf benchmark
2026-04-04 17:33:53 -07:00
Tobi Lutke and Chris Pak
6ffd0e2339
replace VariableParser regex scan with manual byte parser in VariableLookup
2026-04-04 17:33:53 -07:00
Tobi Lutke and Chris Pak
dc7dda2253
replace FullToken regex with manual byte parsing in parse_for_document
2026-04-04 17:33:53 -07:00
Tobi Lutke and Chris Pak
2479b26f5c
add quick benchmark script for autoresearch
2026-04-04 17:33:53 -07:00
Kevin Menard and GitHub
a9c85622dd
Merge pull request #2066 from eregon/skip-slow-test
...
Skip slow test raising many exceptions on non-CRuby
2026-03-26 02:14:10 -04:00
Benoit Daloze
9f4d7e78b8
Skip slow test raising many exceptions on non-CRuby
2026-03-25 17:20:30 +01:00
Kevin Menard and GitHub
fd68d076dd
Merge pull request #2038 from eregon/truffleruby-ci
...
Add TruffleRuby in CI
2026-03-25 11:53:01 -04:00
Benoit Daloze
96aa47d13f
Add TruffleRuby in CI
2026-03-25 16:46:47 +01:00
Benoit Daloze
ad70c5c459
Improve no Symbol leak tests to be more reliable
2026-03-25 16:46:47 +01:00
Benoit Daloze
d824de701c
Adapt slice filter to work on non-64 bit platforms
2026-03-25 16:46:47 +01:00
Alok Swamy and GitHub
dd37353cca
Merge pull request #2062 from Shopify/update-setup-ruby
...
Update ruby/setup-ruby to v1.295.0 for ubuntu-24.04 support
2026-03-19 15:29:47 -04:00
Alok Swamy and Claude Opus 4.6
e80f775f89
Update ruby/setup-ruby from v1.273.0 to v1.295.0
...
The pinned version (v1.273.0) does not have prebuilt `ruby-head` binaries
for `ubuntu-24.04`, which `ubuntu-latest` now resolves to. This causes CI
to fail with "Unavailable version head for ruby on ubuntu-24.04".
Updating to v1.295.0 picks up ubuntu-24.04 support for all Ruby versions
including head builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected] >
2026-03-19 15:22:56 -04:00
Ian Ker-Seymer and GitHub
59d8d0d22d
Add cumulative resource score tracking across partial renders ( #2058 )
...
* feat: add cumulative resource score tracking across partial renders
Add cumulative_render_score and cumulative_assign_score counters to
ResourceLimits that accumulate across reset() calls, with optional
cumulative_render_score_limit and cumulative_assign_score_limit to
cap total work across all partial renders.
Also add a reached? check in BlockBody's render loop so that once a
cumulative limit triggers, the parent template stops processing
further nodes.
Bump version to 5.12.0.
* refactor: move cumulative limit enforcement into reset()
Instead of checking reached? in BlockBody's render loop, enforce
cumulative limits in reset() itself. Since reset() is called before
the begin/rescue MemoryError block in Template#render, the raise
propagates to the parent naturally — no changes to BlockBody needed.
v5.12.0
2026-03-18 11:54:46 -04:00
Gray Gilmore and GitHub
5fa36267aa
Merge pull request #2054 from Shopify/gg-fix-rubocop-offenses
...
Fix rubocop offenses in test file
2026-03-06 13:28:54 -08:00
Gray Gilmore
a72b604680
Fix rubocop offenses in test file
2026-03-06 13:27:05 -08:00
Gray Gilmore and GitHub
3e76244cd2
Merge pull request #2050 from bakura10/squish-filter
...
Add squish filter
2026-03-06 13:22:18 -08:00
Michaël Gallego
d589c51697
Add squish filter
2026-02-19 10:03:52 +09: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