Class: JsxRosetta::AST::Visitor
- Inherits:
-
Object
- Object
- JsxRosetta::AST::Visitor
- 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 |