Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions lib/herb/ast/helpers.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,17 @@ def erb_comment?(opening)
def erb_output?(opening)
opening.include?("=")
end

#: (Herb::AST::ERBContentNode) -> bool
def inline_ruby_comment?(node)
return false unless node.is_a?(Herb::AST::ERBContentNode)
return false if erb_comment?(node.tag_opening&.value || "")

content = node.content&.value || ""
stripped = content.lstrip

stripped.start_with?("#") && node.location.start.line == node.location.end.line
end
end
end
end
2 changes: 2 additions & 0 deletions lib/herb/engine/compiler.rb
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,8 @@ def visit_cdata_node(node)
end

def visit_erb_content_node(node)
return if inline_ruby_comment?(node)

process_erb_tag(node)
end

Expand Down
3 changes: 3 additions & 0 deletions sig/herb/ast/helpers.rbs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

83 changes: 83 additions & 0 deletions test/engine/erb_comments_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# frozen_string_literal: true

require_relative "../test_helper"
require_relative "../snapshot_utils"
require_relative "../../lib/herb/engine"

module Engine
class ERBCommentsTest < Minitest::Spec
include SnapshotUtils

test "inline ruby comment on same line" do
template = %(<% if true %><% # Comment here %><% end %>)

assert_compiled_snapshot(template)
end

test "inline ruby comment with newline" do
template = "<% if true %><% # Comment here %>\n<% end %>"

assert_compiled_snapshot(template)
end

test "inline ruby comment between code" do
template = %(<% if true %><% # Comment here %><%= "hello" %><% end %>)

assert_compiled_snapshot(template)
end

test "inline ruby comment before and between code" do
template = %(<% # Comment here %><% if true %><% # Comment here %><%= "hello" %><% end %>)

assert_compiled_snapshot(template)
end

test "inline ruby comment with spaces" do
template = %(<% # Comment %> <% code = "test" %><%= code %>)

assert_compiled_snapshot(template)
end

test "inline ruby comment multiline" do
template = "<% # Comment\nmore %> <% code = \"test\" %><%= code %>"

assert_compiled_snapshot(template)
end

test "evaluation: inline ruby comment on same line" do
template = %(<% if true %><% # Comment here %><% end %>)

assert_evaluated_snapshot(template)
end

test "evaluation: inline ruby comment with newline" do
template = "<% if true %><% # Comment here %>\n<% end %>"

assert_evaluated_snapshot(template)
end

test "evaluation: inline ruby comment between code" do
template = %(<% if true %><% # Comment here %><%= "hello" %><% end %>)

assert_evaluated_snapshot(template)
end

test "evaluation: inline ruby comment before and between code" do
template = %(<% # Comment here %><% if true %><% # Comment here %><%= "hello" %><% end %>)

assert_evaluated_snapshot(template)
end

test "evaluation: inline ruby comment with spaces" do
template = %(<% # Comment %> <% code = "test" %><%= code %>)

assert_evaluated_snapshot(template)
end

test "evaluation: inline ruby comment multiline" do
template = "<% # Comment\nmore %> <% code = \"test\" %><%= code %>"

assert_evaluated_snapshot(template, { more: "ignored" })
end
end
end
36 changes: 36 additions & 0 deletions test/engine/evaluation_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -398,5 +398,41 @@ class EvaluationTest < Minitest::Spec

assert_evaluated_snapshot(template, {}, { escape: false })
end

test "inline ruby comment on same line" do
template = %(<% if true %><% # Comment here %><% end %>)

assert_evaluated_snapshot(template, {}, { escape: false })
end

test "inline ruby comment with newline" do
template = "<% if true %><% # Comment here %>\n<% end %>"

assert_evaluated_snapshot(template, {}, { escape: false })
end

test "inline ruby comment between code" do
template = %(<% if true %><% # Comment here %><%= "hello" %><% end %>)

assert_evaluated_snapshot(template, {}, { escape: false })
end

test "inline ruby comment before and between code" do
template = %(<% # Comment here %><% if true %><% # Comment here %><%= "hello" %><% end %>)

assert_evaluated_snapshot(template, {}, { escape: false })
end

test "inline ruby comment with spaces" do
template = %(<% # Comment %> <% code = "test" %><%= code %>)

assert_evaluated_snapshot(template, {}, { escape: false })
end

test "inline ruby comment multiline" do
template = "<% # Comment\nmore %> <% code = \"test\" %><%= code %>"

assert_evaluated_snapshot(template, { more: "ignored" }, { escape: false })
end
end
end

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading