diff --git a/lib/herb/engine/debug_visitor.rb b/lib/herb/engine/debug_visitor.rb index 44526311..a7743ffd 100644 --- a/lib/herb/engine/debug_visitor.rb +++ b/lib/herb/engine/debug_visitor.rb @@ -304,7 +304,9 @@ def in_excluded_context? excluded_tags = ["script", "style", "head", "textarea", "pre"] return true if excluded_tags.any? { |tag| @element_stack.include?(tag) } - return true if @erb_block_stack.any? { |node| javascript_tag?(node.content.value.strip) } + if @erb_block_stack.any? { |node| javascript_tag?(node.content.value.strip) || include_debug_disable_comment?(node.content.value.strip) } + return true + end false end @@ -355,6 +357,14 @@ def javascript_tag?(code) false end + + def include_debug_disable_comment?(code) + cleaned_code = code.strip.gsub(/\s+/, " ") + + return true if cleaned_code.match?(/#\s*herb:debug\sdisable\s*$/) + + false + end end end end diff --git a/sig/herb/engine/debug_visitor.rbs b/sig/herb/engine/debug_visitor.rbs index c74bfe4e..99df1e4d 100644 --- a/sig/herb/engine/debug_visitor.rbs +++ b/sig/herb/engine/debug_visitor.rbs @@ -70,6 +70,8 @@ module Herb # TODO: Rewrite using Prism Nodes once available def javascript_tag?: (untyped code) -> untyped + + def include_debug_disable_comment?: (untyped code) -> untyped end end end diff --git a/test/engine/debug_mode_test.rb b/test/engine/debug_mode_test.rb index 11d12f16..cd106216 100644 --- a/test/engine/debug_mode_test.rb +++ b/test/engine/debug_mode_test.rb @@ -402,5 +402,25 @@ class DebugModeTest < Minitest::Spec assert_compiled_snapshot(template, debug: true) end + + test "block without debug disable comment content erb expressions get debug spans" do + template = <<~ERB + <%= content_for :sidebar do %> +
<%= "Sidebar content" %>
+ <% end %> + ERB + + assert_compiled_snapshot(template, debug: true) + end + + test "block with debug disable comment content erb expressions do NOT get debug spans" do + template = <<~ERB + <%= content_for :sidebar do # herb:debug disable %> +
<%= "Sidebar content" %>
+ <% end %> + ERB + + assert_compiled_snapshot(template, debug: true) + end end end diff --git a/test/snapshots/engine/debug_mode_test/test_0047_block_without_debug_disable_comment_content_erb_expressions_get_debug_spans_68ba067be77ac7ba6e45e20ecf2b2656.txt b/test/snapshots/engine/debug_mode_test/test_0047_block_without_debug_disable_comment_content_erb_expressions_get_debug_spans_68ba067be77ac7ba6e45e20ecf2b2656.txt new file mode 100644 index 00000000..a41988a1 --- /dev/null +++ b/test/snapshots/engine/debug_mode_test/test_0047_block_without_debug_disable_comment_content_erb_expressions_get_debug_spans_68ba067be77ac7ba6e45e20ecf2b2656.txt @@ -0,0 +1,8 @@ +--- +source: "Engine::DebugModeTest#test_0047_block without debug disable comment content erb expressions get debug spans" +input: "{source: \"<%= content_for :sidebar do %>\\n
<%= \\\"Sidebar content\\\" %>
\\n<% end %>\\n\", options: {debug: true}}" +--- +_buf = ::String.new; _buf << content_for :sidebar do; _buf << ' +
'.freeze; _buf << ("Sidebar content").to_s; _buf << '
+'.freeze; end +_buf.to_s diff --git a/test/snapshots/engine/debug_mode_test/test_0048_block_with_debug_disable_comment_content_erb_expressions_do_NOT_get_debug_spans_9e272539f1dc64fcce9b758b199b2cde.txt b/test/snapshots/engine/debug_mode_test/test_0048_block_with_debug_disable_comment_content_erb_expressions_do_NOT_get_debug_spans_9e272539f1dc64fcce9b758b199b2cde.txt new file mode 100644 index 00000000..e75f73a5 --- /dev/null +++ b/test/snapshots/engine/debug_mode_test/test_0048_block_with_debug_disable_comment_content_erb_expressions_do_NOT_get_debug_spans_9e272539f1dc64fcce9b758b199b2cde.txt @@ -0,0 +1,8 @@ +--- +source: "Engine::DebugModeTest#test_0048_block with debug disable comment content erb expressions do NOT get debug spans" +input: "{source: \"<%= content_for :sidebar do # herb:debug disable %>\\n
<%= \\\"Sidebar content\\\" %>
\\n<% end %>\\n\", options: {debug: true}}" +--- +_buf = ::String.new; _buf << content_for :sidebar do # herb:debug disable; _buf << ' +
'.freeze; _buf << ("Sidebar content").to_s; _buf << '
+'.freeze; end +_buf.to_s