diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e5bfd9..ec0da6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a ## [Unreleased] +### Fixes + +- Handles formatting empty documents and removing leading new-linews in files with content. + ## [0.10.1] - 2023-08-20 ### Added diff --git a/lib/syntax_tree/erb/parser.rb b/lib/syntax_tree/erb/parser.rb index 3b02695..7052151 100644 --- a/lib/syntax_tree/erb/parser.rb +++ b/lib/syntax_tree/erb/parser.rb @@ -57,6 +57,10 @@ def parse_any_tag @found_doctype = true end end + + # Ignore new lines in beginning of document + next if tag.is_a?(NewLine) + # Allow skipping empty CharData return tag unless tag.skip? end diff --git a/test/erb_test.rb b/test/erb_test.rb index 63a5fff..d0329af 100644 --- a/test/erb_test.rb +++ b/test/erb_test.rb @@ -101,5 +101,12 @@ def test_erb_group_blank_line assert_formatting(source, source) end + + def test_erb_empty_first_line + source = "\n\n<%= what %>\n" + expected = "<%= what %>\n" + + assert_formatting(source, expected) + end end end diff --git a/test/html_test.rb b/test/html_test.rb index ca55327..e44fd54 100644 --- a/test/html_test.rb +++ b/test/html_test.rb @@ -28,6 +28,11 @@ def test_html_unmatched_single_quote end end + def test_empty_file + source = "" + assert_formatting(source, "\n") + end + def test_html_doctype parsed = ERB.parse("") assert_instance_of(SyntaxTree::ERB::Doctype, parsed.elements.first)