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 %>"