From 7f2cf1fe67936fbfac027a69fd5e381926174023 Mon Sep 17 00:00:00 2001 From: Marco Concetto Rudilosso Date: Fri, 7 Jul 2023 11:20:34 +0100 Subject: [PATCH] Recursively parse for liquid tag --- lib/liquid/block_body.rb | 7 +++++-- test/integration/tags/liquid_tag_test.rb | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/lib/liquid/block_body.rb b/lib/liquid/block_body.rb index 42d372bb..33a6a99f 100644 --- a/lib/liquid/block_body.rb +++ b/lib/liquid/block_body.rb @@ -45,9 +45,12 @@ module Liquid end tag_name = Regexp.last_match(1) markup = Regexp.last_match(2) - if tag_name == "liquid" - next + + if tag_name == 'liquid' + parse_context.line_number -= 1 + next parse_liquid_tag(markup, parse_context) end + unless (tag = registered_tags[tag_name]) # end parsing if we reach an unknown tag and let the caller decide # determine how to proceed diff --git a/test/integration/tags/liquid_tag_test.rb b/test/integration/tags/liquid_tag_test.rb index d10c49a6..c6694fa7 100644 --- a/test/integration/tags/liquid_tag_test.rb +++ b/test/integration/tags/liquid_tag_test.rb @@ -124,4 +124,26 @@ class LiquidTagTest < Minitest::Test -%} LIQUID end + + def test_nested_liquid_tags_on_same_line + assert_template_result('good', <<~LIQUID) + {%- liquid liquid liquid echo "good" -%} + LIQUID + end + + def test_nested_liquid_liquid_is_not_skipped_if_used_in_non_tag_position + assert_template_result('liquid', <<~LIQUID, { 'liquid' => 'liquid' }) + {%- liquid liquid liquid echo liquid -%} + LIQUID + end + + def test_next_liquid_with_unclosed_if_tag + assert_match_syntax_error("Liquid syntax error (line 2): 'if' tag was never closed", <<~LIQUID) + {%- liquid + liquid if true + echo "good" + endif + -%} + LIQUID + end end