Class: JsxRosetta::AST::Visitor

Inherits:
Object
  • Object
show all
Defined in:
lib/jsx_rosetta/ast/visitor.rb

Overview

Visitor base class. Subclasses define ‘visit_<snake_case_type>` methods to handle specific Babel node types. Anything without a dedicated handler falls through to `visit_default`, which by default recurses into the node’s children.

Example:

class TagCollector < JsxRosetta::AST::Visitor
  attr_reader :tags
  def initialize; @tags = []; super; end

  def visit_jsx_element(node)
    @tags << node.tag_name
    visit_children(node)
  end
end

collector = TagCollector.new
collector.visit(parsed_file)

Instance Method Summary collapse

Instance Method Details

#visit(node) ⇒ Object



27
28
29
30
31
32
33
34
35
36
# File 'lib/jsx_rosetta/ast/visitor.rb', line 27

def visit(node)
  return unless node.is_a?(Node)

  method_name = "visit_#{Inflector.underscore(node.type)}"
  if respond_to?(method_name)
    public_send(method_name, node)
  else
    visit_default(node)
  end
end

#visit_children(node) ⇒ Object



42
43
44
# File 'lib/jsx_rosetta/ast/visitor.rb', line 42

def visit_children(node)
  node.each_child { |child| visit(child) }
end

#visit_default(node) ⇒ Object



38
39
40
# File 'lib/jsx_rosetta/ast/visitor.rb', line 38

def visit_default(node)
  visit_children(node)
end