Commit Graph

  • f9257bf8c6 Document break tag theme rendering behavior break-tag-docs-theme-rendering Nathan FergusonandPi AI 2026-08-27 12:29:17 -04:00
  • 3befa567b1 Add hermetic template recording and replay liquid-hermetic Tobi Lutke 2026-08-07 10:40:39 -04:00
  • 44ba29514e Merge pull request #2051 from bakura10/doc-squish gh-pages Gray GilmoreandGitHub 2026-08-05 13:43:18 -07:00
  • 807d45a6b3 Surface blank-body inline errors in strict2 main Tobi Lütke 2026-07-05 18:56:24 +00:00
  • 7a5e45fc47 Bump to 5.13.0 (#2103) v5.13.0 shipit-deploy/rubygems Guilherme CarreiroandGitHub 2026-06-29 17:41:55 +02:00
  • 545fd750f2 Bump to 5.13.0 bump-5.13.0 Guilherme Carreiro 2026-06-29 17:40:23 +02:00
  • 058b40be1e Bump actions/checkout from 3.6.0 to 7.0.0 dependabot/github_actions/actions/checkout-7.0.0 dependabot[bot]andGitHub 2026-06-22 21:33:35 +00:00
  • 9e451b4307 Bump ruby/setup-ruby from 1.295.0 to 1.314.0 dependabot/github_actions/ruby/setup-ruby-1.314.0 dependabot[bot]andGitHub 2026-06-22 21:33:30 +00:00
  • 9efca9f718 Use liquid-spec branch for self specs Ian Ker-SeymerandIan Ker-Seymer 2026-06-10 22:00:48 -04:00
  • 529800f46b Let environment self shadow SelfDrop Ian Ker-SeymerandIan Ker-Seymer 2026-06-10 18:54:50 -04:00
  • 7b368dffb8 Fix SelfDrop equality (#2091) Guilherme CarreiroandGitHub 2026-06-05 10:47:37 +02:00
  • 771ceccf41 Cache SelfDrop per context self-drop-eq Guilherme Carreiro 2026-06-05 09:55:31 +02:00
  • b18930f2ea Fix SelfDrop equality Guilherme Carreiro 2026-06-02 16:41:59 +02:00
  • c4902e792a Add deferred partial rendering with Declarative Partial Updates render-after-prototype Marco Concetto Rudilosso 2026-05-25 12:31:15 +02:00
  • 742ac3dbf5 Prevent SelfDrop context mutation across render boundaries (#2082) Guilherme CarreiroandGitHub 2026-05-20 09:34:37 +02:00
  • 3f5a7faeb2 Adopt 'undef context=' self-drop-renderer-mutation Guilherme Carreiro 2026-05-13 10:36:44 +02:00
  • 8d8105a452 Update lib/liquid/self_drop.rb 2026-05-13 09:11:10 +02:00
  • ce0d465f68 Make whitespace filters Unicode-aware gg-fix-existing-whitespace Gray Gilmore 2026-05-06 14:00:13 -07:00
  • bc7f1caa35 Remove support for contextualization Guilherme Carreiro 2026-05-08 09:51:31 +02:00
  • fd49bbafb5 Renamed: test/integration/self_drop_test.rb -> test/integration/self_drop_context_test.rb Guilherme Carreiro 2026-05-06 16:06:38 +02:00
  • c698474abc Prevent SelfDrop context mutation across render boundaries Guilherme Carreiro 2026-05-06 09:49:30 +02:00
  • bb40962e4e fix(render): preserve scope chain when self: bound on render tag jf-self-drop-render-bug Josh Faigan 2026-04-30 15:22:49 -04:00
  • 1954a2655c Update liquid-spec adapters Ian Ker-SeymerandIan Ker-Seymer 2026-04-28 10:03:57 -04:00
  • 9ff501f919 Update liquid-spec adapters liquid-spec-missing-features Ian Ker-Seymer 2026-04-28 10:03:57 -04:00
  • 6d81b1b68c Merge pull request #2077 from Shopify/remove-strict2-from-error-message Alok SwamyandGitHub 2026-04-24 16:21:51 -04:00
  • dfddd8f390 Remove "strict2" from bare bracket error message remove-strict2-from-error-message Alok SwamyandClaude Opus 4.7 2026-04-24 16:18:05 -04:00
  • 95ce7e7fa1 Merge pull request #2067 from Shopify/strict2-increment-decrement Alok SwamyandGitHub 2026-04-24 16:11:49 -04:00
  • 197d755e0c Merge pull request #2065 from Shopify/strict2-assign-capture Alok SwamyandGitHub 2026-04-24 16:10:59 -04:00
  • 7d5a4d092a Merge pull request #2064 from Shopify/strict2-include-tablerow bare-bracket-self-keyword Alok SwamyandGitHub 2026-04-24 16:06:06 -04:00
  • d0c5444db1 Merge pull request #2060 from Shopify/bare-bracket-self-keyword Alok SwamyandGitHub 2026-04-24 16:06:02 -04:00
  • e7373023d6 Add targeted tests for byte-walking fast paths liquid-perf-bytetables Chris Pak 2026-04-05 21:01:31 -07:00
  • d3e39525f3 BlockBody: byte-walk tag tokens instead of FullToken regex Chris Pak 2026-04-05 20:53:53 -07:00
  • fd853a3593 VariableLookup: fast path for simple identifier chains Chris Pak 2026-04-05 20:53:53 -07:00
  • aaabfc5017 Expression: byte-walk parse_number and guard strip allocation Chris Pak 2026-04-05 20:53:53 -07:00
  • 7cd8df6fa8 Add ByteTables module and bench_quick.rb benchmark harness Chris Pak 2026-04-05 20:53:53 -07:00
  • 731f64deef Improves performance on hot parse and render paths liquid-perf-polish Chris Pak 2026-04-04 20:17:33 -07:00
  • 84779f8a28 Removes dead code, tightens idioms, adds clarifying comments Chris Pak 2026-04-04 20:17:12 -07:00
  • ba11b85875 Decomposes, extracts, and names the important concepts Chris Pak 2026-04-04 20:16:37 -07:00
  • 03e5e29b0b Adds ByteTables, moves cursor load order, consolidates byte constants Chris Pak 2026-04-04 20:12:53 -07:00
  • d9c42fd2eb Fixes infinite loop in tokenizer on trailing stray '{' Chris Pak 2026-04-04 20:07:56 -07:00
  • bc60deb671 update autoresearch experiment log Tobi LutkeandChris Pak 2026-03-12 17:38:05 -04:00
  • 17b691ee32 Replace @blocks.each with while loop in If render — avoids block proc allocation per render\n\nResult: {"status":"keep","combined_µs":3496,"parse_µs":2356,"render_µs":1140,"allocations":24530} Tobi LutkeandChris Pak 2026-03-12 17:31:41 -04:00
  • de95af5414 Inline to_liquid_value in If render — avoids one method dispatch per condition evaluation\n\nResult: {"status":"keep","combined_µs":3459,"parse_µs":2318,"render_µs":1141,"allocations":24647} Tobi LutkeandChris Pak 2026-03-12 17:31:20 -04:00
  • 6faa62697b Replace simple_lookup? byte scan with match? regex — 8x faster per call, cleaner code\n\nResult: {"status":"keep","combined_µs":3489,"parse_µs":2353,"render_µs":1136,"allocations":24647} Tobi LutkeandChris Pak 2026-03-12 17:27:17 -04:00
  • f39fad8934 Condition#evaluate: skip loop block for simple conditions (no child_relation) — saves 235 allocs\n\nResult: {"status":"keep","combined_µs":3445,"parse_µs":2284,"render_µs":1161,"allocations":24647} Tobi LutkeandChris Pak 2026-03-12 17:24:51 -04:00
  • 1aa5854f44 Clean confirmation run: 3,314µs (-55% from main), stable\n\nResult: {"status":"keep","combined_µs":3314,"parse_µs":2203,"render_µs":1111,"allocations":24882} Tobi LutkeandChris Pak 2026-03-12 17:22:24 -04:00
  • feb7036664 update autoresearch docs with current progress Tobi LutkeandChris Pak 2026-03-12 17:21:28 -04:00
  • 111aeed8f1 parse_tag_token without StringScanner: pure byte ops avoid reset(token) overhead, -12% combined\n\nResult: {"status":"keep","combined_µs":3350,"parse_µs":2212,"render_µs":1138,"allocations":24882} Tobi LutkeandChris Pak 2026-03-12 17:17:10 -04:00
  • 9cbfae22b0 Clean up tokenizer: remove unused StringScanner setup and regex constants\n\nResult: {"status":"keep","combined_µs":3490,"parse_µs":2331,"render_µs":1159,"allocations":24882} Tobi LutkeandChris Pak 2026-03-12 17:12:08 -04:00
  • 89076dbf3a Confirmation run: byteindex tokenizer consistently 3,400-3,600µs\n\nResult: {"status":"keep","combined_µs":3464,"parse_µs":2335,"render_µs":1129,"allocations":24882} Tobi LutkeandChris Pak 2026-03-12 17:11:29 -04:00
  • f2c0fbfa0b Replace StringScanner tokenizer with String#byteindex — 12% faster parse, no regex overhead for delimiter finding\n\nResult: {"status":"keep","combined_µs":3556,"parse_µs":2388,"render_µs":1168,"allocations":24882} Tobi LutkeandChris Pak 2026-03-12 17:11:15 -04:00
  • 78550c0e0d Baseline: 3,818µs combined, 24,881 allocs\n\nResult: {"status":"keep","combined_µs":3818,"parse_µs":2722,"render_µs":1096,"allocations":24881} Tobi LutkeandChris Pak 2026-03-12 16:48:10 -04:00
  • 68d697d1c5 Skip context.evaluate for String lookup keys in VariableLookup — avoids respond_to? dispatch\n\nResult: {"status":"keep","combined_µs":4103,"parse_µs":2881,"render_µs":1222,"allocations":24881} Tobi LutkeandChris Pak 2026-03-11 10:52:07 -04:00
  • a206932c4a update autoresearch.md with current progress Tobi LutkeandChris Pak 2026-03-11 10:51:39 -04:00
  • 8a39c3aa33 Cache no-arg filter tuples [name, EMPTY_ARRAY] — reuse frozen tuples across templates\n\nResult: {"status":"keep","combined_µs":4147,"parse_µs":2992,"render_µs":1155,"allocations":24881} Tobi LutkeandChris Pak 2026-03-11 10:49:44 -04:00
  • 89fcea371e Replace manual blank_string? with regex match — cleaner code\n\nResult: {"status":"keep","combined_µs":4196,"parse_µs":3042,"render_µs":1154,"allocations":25535} Tobi LutkeandChris Pak 2026-03-11 10:44:43 -04:00
  • de8675f8fb Skip to_liquid_value for String/Integer keys in VariableLookup — avoids respond_to? dispatch\n\nResult: {"status":"keep","combined_µs":4131,"parse_µs":2893,"render_µs":1238,"allocations":25535} Tobi LutkeandChris Pak 2026-03-11 10:44:05 -04:00
  • e3ba4aa958 Minor cleanup: optimize expect_id with while loop and early return\n\nResult: {"status":"keep","combined_µs":4184,"parse_µs":2921,"render_µs":1263,"allocations":25535} Tobi LutkeandChris Pak 2026-03-11 10:43:20 -04:00
  • c3e55e92d9 Replace manual scan_dotted_id with regex\n\nResult: {"status":"keep","combined_µs":4121,"parse_µs":2812,"render_µs":1309,"allocations":25535} Tobi LutkeandChris Pak 2026-03-11 10:42:07 -04:00
  • 0924e59840 Replace manual scan_quoted_string with regex capture groups\n\nResult: {"status":"keep","combined_µs":4102,"parse_µs":2849,"render_µs":1253,"allocations":25535} Tobi LutkeandChris Pak 2026-03-11 10:41:44 -04:00
  • 8d1f030825 Replace manual rest_blank? with regex skip + eos? check\n\nResult: {"status":"keep","combined_µs":4047,"parse_µs":2795,"render_µs":1252,"allocations":25535} Tobi LutkeandChris Pak 2026-03-11 10:41:20 -04:00
  • 4896d6d497 Replace manual scan_comparison_op with regex — cleaner and avoids byteslice allocation for op strings\n\nResult: {"status":"keep","combined_µs":4007,"parse_µs":2808,"render_µs":1199,"allocations":25535} Tobi LutkeandChris Pak 2026-03-11 10:40:47 -04:00
  • edd8fabb3a Replace manual scan_fragment/scan_quoted_string_raw/skip_fragment with regex — cleaner, same/better perf\n\nResult: {"status":"keep","combined_µs":4132,"parse_µs":2890,"render_µs":1242,"allocations":25535} Tobi LutkeandChris Pak 2026-03-11 10:40:10 -04:00
  • 28ede9c539 Replace manual byte-level scan_number with regex — cleaner code, same performance\n\nResult: {"status":"keep","combined_µs":4184,"parse_µs":2931,"render_µs":1253,"allocations":25535} Tobi LutkeandChris Pak 2026-03-11 10:39:14 -04:00
  • 14ac591403 Replace manual byte-level scan_id/skip_id with regex — C-level StringScanner.scan is faster than Ruby-level byte scanning\n\nResult: {"status":"keep","combined_µs":4185,"parse_µs":2943,"render_µs":1242,"allocations":25535} Tobi LutkeandChris Pak 2026-03-11 10:37:09 -04:00
  • 3f9b8916b2 Fast-path Hash lookups in VariableLookup#evaluate — skip respond_to? checks for Hash objects\n\nResult: {"status":"keep","combined_µs":4110,"parse_µs":2922,"render_µs":1188,"allocations":25535} Tobi LutkeandChris Pak 2026-03-11 10:35:29 -04:00
  • 41de814045 Skip to_liquid/context= for primitives in VariableLookup#evaluate\n\nResult: {"status":"keep","combined_µs":4334,"parse_µs":3062,"render_µs":1272,"allocations":25535} Tobi LutkeandChris Pak 2026-03-11 10:32:37 -04:00
  • 91d9a509f9 Fast return for primitive types in find_variable — skip to_liquid and respond_to?(:context=)\n\nResult: {"status":"keep","combined_µs":4225,"parse_µs":3009,"render_µs":1216,"allocations":25535} Tobi LutkeandChris Pak 2026-03-11 10:31:59 -04:00
  • 37a4c19405 Skip find_index when only one scope in find_variable — go straight to environments\n\nResult: {"status":"keep","combined_µs":4323,"parse_µs":3055,"render_µs":1268,"allocations":25535} Tobi LutkeandChris Pak 2026-03-11 10:31:35 -04:00
  • dc35b765e8 Skip respond_to?(:context=) for primitive types in find_variable — avoids method lookup overhead\n\nResult: {"status":"keep","combined_µs":4207,"parse_µs":2943,"render_µs":1264,"allocations":25535} Tobi LutkeandChris Pak 2026-03-11 10:30:41 -04:00
  • 1dfdce82dc Use EMPTY_ARRAY for empty static_environments in Context — avoids 60 array allocs per render cycle\n\nResult: {"status":"keep","combined_µs":4262,"parse_µs":3079,"render_µs":1183,"allocations":25535} Tobi LutkeandChris Pak 2026-03-11 10:26:30 -04:00
  • bf16d291c9 Lazy @changes hash in Registers — only allocate when a register is actually written\n\nResult: {"status":"keep","combined_µs":4287,"parse_µs":3059,"render_µs":1228,"allocations":25595} Tobi LutkeandChris Pak 2026-03-11 10:25:29 -04:00
  • 2da3ae330a Cache block_delimiter strings per tag name — avoids repeated string interpolation\n\nResult: {"status":"keep","combined_µs":4372,"parse_µs":3127,"render_µs":1245,"allocations":25605} Tobi LutkeandChris Pak 2026-03-11 10:23:56 -04:00
  • 1800cffd3b Lazy Context init: defer StringScanner and @interrupts array allocation until needed\n\nResult: {"status":"keep","combined_µs":4299,"parse_µs":3057,"render_µs":1242,"allocations":26015} Tobi LutkeandChris Pak 2026-03-11 10:22:29 -04:00
  • 02764d28f7 Cache small integer to_s (0-999): avoids 267 Integer#to_s allocations per render cycle\n\nResult: {"status":"keep","combined_µs":4158,"parse_µs":2920,"render_µs":1238,"allocations":26128} Tobi LutkeandChris Pak 2026-03-11 10:20:45 -04:00
  • f08fe63042 Replace split+join in truncatewords with manual word scan — avoids array + string allocations\n\nResult: {"status":"keep","combined_µs":4280,"parse_µs":3009,"render_µs":1271,"allocations":26395} Tobi LutkeandChris Pak 2026-03-11 10:20:11 -04:00
  • 588966fd1c Extend fast-path filter parsing to handle comma-separated multi-arg filters (e.g. pluralize: 'item', 'items')\n\nResult: {"status":"keep","combined_µs":4266,"parse_µs":3032,"render_µs":1234,"allocations":26480} Tobi LutkeandChris Pak 2026-03-11 10:16:39 -04:00
  • 0e5edcc9da Avoid expr_markup byteslice when name is entire markup string (no whitespace, no filters)\n\nResult: {"status":"keep","combined_µs":4277,"parse_µs":3057,"render_µs":1220,"allocations":27026} Tobi LutkeandChris Pak 2026-03-11 10:12:26 -04:00
  • 3f10ac702c Fast-path single-arg filter parsing: handle quoted strings, numbers, identifiers without Lexer/Parser\n\nResult: {"status":"keep","combined_µs":4427,"parse_µs":3181,"render_µs":1246,"allocations":27235} Tobi LutkeandChris Pak 2026-03-11 10:09:59 -04:00
  • f31930555e fix rubocop offenses: autocorrect style/layout violations Tobi LutkeandChris Pak 2026-03-11 09:53:44 -04:00
  • f0ac941ac6 update autoresearch.md with full progress log Tobi LutkeandChris Pak 2026-03-11 09:24:26 -04:00
  • 19bf49c116 For tag: migrate lax_parse to Cursor with zero-alloc skip_id/expect_id Tobi LutkeandChris Pak 2026-03-11 09:19:59 -04:00
  • 5204033588 Cursor: add skip_id, expect_id, skip_fragment for zero-alloc scanning Tobi LutkeandChris Pak 2026-03-11 09:19:27 -04:00
  • b0c9f576af REVERTED: Cursor for For tag adds 148 allocs from scan_id/scan_fragment string creation\n\nResult: {"status":"discard","combined_µs":5049,"parse_us":3765,"render_us":1284,"allocations":29793,"parse_µs":3765,"render_µs":1284} Tobi LutkeandChris Pak 2026-03-11 09:18:35 -04:00
  • 343ae1da56 remove dead BlockBody.parse_tag_token and If SIMPLE_CONDITION - now in Cursor Tobi LutkeandChris Pak 2026-03-11 09:17:29 -04:00
  • f42593dc50 introduce Cursor class: centralize byte-level scanning for tag/variable/condition parsing Tobi LutkeandChris Pak 2026-03-11 09:15:21 -04:00
  • 80edd212a0 add parse_simple to skip simple_lookup? check when caller validates Tobi LutkeandChris Pak 2026-03-11 09:10:05 -04:00
  • 65d7568403 fast-path VariableLookup init: skip scan_variable for simple identifier chains Tobi LutkeandChris Pak 2026-03-11 09:08:44 -04:00
  • c2ba6b0676 avoid allocating seen={} hash in Utils.to_s/inspect when not needed Tobi LutkeandChris Pak 2026-03-11 09:02:42 -04:00
  • 92ca381fb1 update autoresearch.sh: 3-run best-of, skip liquid-spec for speed Tobi LutkeandChris Pak 2026-03-11 09:01:57 -04:00
  • 1032d57532 optimize Context init: avoid unnecessary array wrapping for environments Tobi LutkeandChris Pak 2026-03-11 08:56:45 -04:00
  • e1a0e7e716 use frozen EMPTY_ARRAY/EMPTY_HASH for Context @filters/@disabled_tags Tobi LutkeandChris Pak 2026-03-11 08:55:55 -04:00
  • 1f309b19a7 replace INTEGER_REGEX/FLOAT_REGEX with byte-level parse_number Tobi LutkeandChris Pak 2026-03-11 08:54:31 -04:00
  • c6617accc5 replace SIMPLE_CONDITION regex with manual byte parser in if/elsif lax_parse Tobi LutkeandChris Pak 2026-03-11 08:52:49 -04:00
  • cf062e1da2 fast-path slice_collection: skip copy for full Array without offset/limit Tobi LutkeandChris Pak 2026-03-11 08:50:34 -04:00
  • 06a718cd69 add invoke_two fast path for single-arg filter invocation, avoids splat chain Tobi LutkeandChris Pak 2026-03-11 08:49:37 -04:00
  • 50888426a1 fast-path find_variable: check top scope first before find_index Tobi LutkeandChris Pak 2026-03-11 08:48:16 -04:00
  • 1a29584f96 add invoke_single fast path for no-arg filter invocation, avoids splat alloc Tobi LutkeandChris Pak 2026-03-11 08:47:21 -04:00
  • 9d16eb3d05 fast-path simple if truthiness: use byte scanner before SIMPLE_CONDITION regex Tobi LutkeandChris Pak 2026-03-11 08:36:28 -04:00
  • f879183a23 update autoresearch.md progress log Tobi LutkeandChris Pak 2026-03-11 08:35:43 -04:00