diff --git a/CHANGELOG.md b/CHANGELOG.md index e698390..26ea725 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a ## [Unreleased] +- Handle ERB-tags inside HTML-tags, like `
>` + ## [0.10.4] - 2023-08-28 - Avoid grouping single tags diff --git a/lib/syntax_tree/erb/parser.rb b/lib/syntax_tree/erb/parser.rb index aefc6ca..ab11be1 100644 --- a/lib/syntax_tree/erb/parser.rb +++ b/lib/syntax_tree/erb/parser.rb @@ -368,10 +368,17 @@ def parse_until_erb(classes:) def parse_html_opening_tag opening = consume(:open) name = consume(:name) + if name.value =~ /\A[@:#]/ raise ParseError, "Invalid html-tag name #{name}" end - attributes = many { parse_html_attribute } + + attributes = + many do + atleast do + maybe { parse_erb_tag } || maybe { parse_html_attribute } + end + end closing = atleast do diff --git a/test/erb_test.rb b/test/erb_test.rb index 99db39f..7d4b152 100644 --- a/test/erb_test.rb +++ b/test/erb_test.rb @@ -51,6 +51,13 @@ def test_if_and_end_in_same_tag assert_formatting(source, expected) end + def test_erb_inside_html_tag + source = "
>
" + expected = "
>
\n" + + assert_formatting(source, expected) + end + def test_long_if_statement source = "<%=number_to_percentage(@reports&.first&.stability*100,precision: 1) if @reports&.first&.other&.stronger&.longer %>"