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