optionally remove empty nodes from AST

This commit is contained in:
Michael Go
2025-01-07 14:34:49 -04:00
parent 879ec3e288
commit db64a0f0c2
5 changed files with 117 additions and 28 deletions
+15 -2
View File
@@ -59,7 +59,7 @@ module Liquid
end
new_tag = tag.parse(tag_name, markup, tokenizer, parse_context)
next if new_tag.is_a?(Comment)
next if parse_context.omit_blank_nodes && blank_node?(new_tag)
@blank &&= new_tag.blank?
@nodelist << new_tag
@@ -157,7 +157,7 @@ module Liquid
end
new_tag = tag.parse(tag_name, markup, tokenizer, parse_context)
next if new_tag.is_a?(Comment)
next if parse_context.omit_blank_nodes && blank_node?(new_tag)
@blank &&= new_tag.blank?
@nodelist << new_tag
@@ -275,5 +275,18 @@ module Liquid
def raise_missing_variable_terminator(token, parse_context)
BlockBody.raise_missing_variable_terminator(token, parse_context)
end
def blank_node?(node)
case node
when Comment
true
when BlockBody
true if node.nodelist.empty?
when Tag
node.nodelist.all? { |n| blank_node?(n) }
else
false
end
end
end
end
+5 -1
View File
@@ -3,7 +3,7 @@
module Liquid
class ParseContext
attr_accessor :locale, :line_number, :trim_whitespace, :depth
attr_reader :partial, :warnings, :error_mode, :environment
attr_reader :partial, :warnings, :error_mode, :environment, :omit_blank_nodes
def initialize(options = Const::EMPTY_HASH)
@environment = options.fetch(:environment, Environment.default)
@@ -12,6 +12,10 @@ module Liquid
@locale = @template_options[:locale] ||= I18n.new
@warnings = []
# remove blank nodes such as
# comment tags, empty if tags, etc from the AST
@omit_blank_nodes = options.fetch(:omit_blank_nodes, false)
self.depth = 0
self.partial = false
end