Class: SyntaxTree::ERB::MutationVisitor
- Inherits:
-
Object
- Object
- SyntaxTree::ERB::MutationVisitor
- Defined in:
- lib/syntax_tree/erb/mutation_visitor.rb
Overview
A base ERB Visitor class that returns a deep copy of the AST. It can be subclassed to mutate some parts of the AST and keep everything else as it was.
Ideally this class (or equivalent) would exist within SyntaxTree::ERB gem.
Direct Known Subclasses
Instance Method Summary collapse
- #copy_and_visit_children(node) ⇒ Object (also: #visit_attribute, #visit_block, #visit_char_data, #visit_closing_tag, #visit_doctype, #visit_document, #visit_erb, #visit_erb_block, #visit_erb_case, #visit_erb_case_when, #visit_erb_close, #visit_erb_comment, #visit_erb_content, #visit_erb_do_close, #visit_erb_else, #visit_erb_end, #visit_erb_if, #visit_erb_yield, #visit_html, #visit_html_comment, #visit_html_string, #visit_new_line, #visit_opening_tag, #visit_token)
- #visit(node) ⇒ Object
Instance Method Details
#copy_and_visit_children(node) ⇒ Object Also known as: visit_attribute, visit_block, visit_char_data, visit_closing_tag, visit_doctype, visit_document, visit_erb, visit_erb_block, visit_erb_case, visit_erb_case_when, visit_erb_close, visit_erb_comment, visit_erb_content, visit_erb_do_close, visit_erb_else, visit_erb_end, visit_erb_if, visit_erb_yield, visit_html, visit_html_comment, visit_html_string, visit_new_line, visit_opening_tag, visit_token
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/syntax_tree/erb/mutation_visitor.rb', line 15 def copy_and_visit_children(node) node.dup.tap do |clone| clone.instance_variables.each do |name| var = clone.instance_variable_get(name) clone.instance_variable_set( name, case var when Array var.map { |child| visit(child) } when SyntaxTree::ERB::Node visit(var) else var end ) end end end |
#visit(node) ⇒ Object
11 12 13 |
# File 'lib/syntax_tree/erb/mutation_visitor.rb', line 11 def visit(node) node&.accept(self) end |