Class: SyntaxTree::Visitor
- Inherits:
-
Object
- Object
- SyntaxTree::Visitor
- Defined in:
- lib/syntax_tree/visitor.rb,
lib/syntax_tree/visitor/json_visitor.rb,
lib/syntax_tree/visitor/field_visitor.rb,
lib/syntax_tree/visitor/match_visitor.rb,
lib/syntax_tree/visitor/pretty_print_visitor.rb
Overview
Visitor is a parent class that provides the ability to walk down the tree and handle a subset of nodes. By defining your own subclass, you can explicitly handle a node type by defining a visit_* method.
Direct Known Subclasses
Defined Under Namespace
Classes: FieldVisitor, JSONVisitor, MatchVisitor, PrettyPrintVisitor, VisitMethodChecker, VisitMethodError
Class Method Summary collapse
-
.visit_method(method_name) ⇒ Object
This method is here to help folks write visitors.
-
.visit_methods ⇒ Object
This is the list of all of the valid visit methods.
Instance Method Summary collapse
- #visit(node) ⇒ Object
- #visit_all(nodes) ⇒ Object
- #visit_child_nodes(node) ⇒ Object (also: #visit_aref, #visit_aref_field, #visit_alias, #visit_arg_block, #visit_arg_paren, #visit_arg_star, #visit_args, #visit_args_forward, #visit_array, #visit_aryptn, #visit_assign, #visit_assoc, #visit_assoc_splat, #visit_backref, #visit_backtick, #visit_bare_assoc_hash, #visit_BEGIN, #visit_begin, #visit_binary, #visit_blockarg, #visit_block_var, #visit_bodystmt, #visit_brace_block, #visit_break, #visit_call, #visit_case, #visit_CHAR, #visit_class, #visit_comma, #visit_command, #visit_command_call, #visit_comment, #visit_const, #visit_const_path_field, #visit_const_path_ref, #visit_const_ref, #visit_cvar, #visit_def, #visit_def_endless, #visit_defined, #visit_defs, #visit_do_block, #visit_dot2, #visit_dot3, #visit_dyna_symbol, #visit_END, #visit_else, #visit_elsif, #visit_embdoc, #visit_embexpr_beg, #visit_embexpr_end, #visit_embvar, #visit_ensure, #visit_excessed_comma, #visit_fcall, #visit_field, #visit_float, #visit_fndptn, #visit_for, #visit_gvar, #visit_hash, #visit_heredoc, #visit_heredoc_beg, #visit_hshptn, #visit_ident, #visit_if, #visit_if_mod, #visit_if_op, #visit_imaginary, #visit_in, #visit_int, #visit_ivar, #visit_kw, #visit_kwrest_param, #visit_label, #visit_label_end, #visit_lambda, #visit_lbrace, #visit_lbracket, #visit_lparen, #visit_massign, #visit_method_add_block, #visit_mlhs, #visit_mlhs_paren, #visit_module, #visit_mrhs, #visit_next, #visit_not, #visit_op, #visit_opassign, #visit_params, #visit_paren, #visit_period, #visit_pinned_begin, #visit_pinned_var_ref, #visit_program, #visit_qsymbols, #visit_qsymbols_beg, #visit_qwords, #visit_qwords_beg, #visit_rassign, #visit_rational, #visit_rbrace, #visit_rbracket, #visit_redo, #visit_regexp_beg, #visit_regexp_content, #visit_regexp_end, #visit_regexp_literal, #visit_rescue, #visit_rescue_ex, #visit_rescue_mod, #visit_rest_param, #visit_retry, #visit_return, #visit_return0, #visit_rparen, #visit_sclass, #visit_statements, #visit_string_concat, #visit_string_content, #visit_string_dvar, #visit_string_embexpr, #visit_string_literal, #visit_super, #visit_symbeg, #visit_symbol_content, #visit_symbol_literal, #visit_symbols, #visit_symbols_beg, #visit_tlambda, #visit_tlambeg, #visit_top_const_field, #visit_top_const_ref, #visit_tstring_beg, #visit_tstring_content, #visit_tstring_end, #visit_unary, #visit_undef, #visit_unless, #visit_unless_mod, #visit_until, #visit_until_mod, #visit_var_alias, #visit_var_field, #visit_var_ref, #visit_vcall, #visit_void_stmt, #visit_when, #visit_while, #visit_while_mod, #visit_word, #visit_words, #visit_words_beg, #visit_xstring, #visit_xstring_literal, #visit_yield, #visit_yield0, #visit_zsuper, #visit___end__)
Class Method Details
.visit_method(method_name) ⇒ Object
This method is here to help folks write visitors.
It’s not always easy to ensure you’re writing the correct method name in the visitor since it’s perfectly valid to define methods that don’t override these parent methods.
If you use this method, you can ensure you’re writing the correct method name. It will raise an error if the visit method you’re defining isn’t actually a method on the parent visitor.
48 49 50 51 52 |
# File 'lib/syntax_tree/visitor.rb', line 48 def visit_method(method_name) return if visit_methods.include?(method_name) raise VisitMethodError, method_name end |
.visit_methods ⇒ Object
This is the list of all of the valid visit methods.
55 56 57 58 |
# File 'lib/syntax_tree/visitor.rb', line 55 def visit_methods @visit_methods ||= Visitor.instance_methods.grep(/^visit_(?!child_nodes)/) end |
Instance Method Details
#visit(node) ⇒ Object
61 62 63 |
# File 'lib/syntax_tree/visitor.rb', line 61 def visit(node) node&.accept(self) end |
#visit_all(nodes) ⇒ Object
65 66 67 |
# File 'lib/syntax_tree/visitor.rb', line 65 def visit_all(nodes) nodes.map { |node| visit(node) } end |
#visit_child_nodes(node) ⇒ Object Also known as: visit_aref, visit_aref_field, visit_alias, visit_arg_block, visit_arg_paren, visit_arg_star, visit_args, visit_args_forward, visit_array, visit_aryptn, visit_assign, visit_assoc, visit_assoc_splat, visit_backref, visit_backtick, visit_bare_assoc_hash, visit_BEGIN, visit_begin, visit_binary, visit_blockarg, visit_block_var, visit_bodystmt, visit_brace_block, visit_break, visit_call, visit_case, visit_CHAR, visit_class, visit_comma, visit_command, visit_command_call, visit_comment, visit_const, visit_const_path_field, visit_const_path_ref, visit_const_ref, visit_cvar, visit_def, visit_def_endless, visit_defined, visit_defs, visit_do_block, visit_dot2, visit_dot3, visit_dyna_symbol, visit_END, visit_else, visit_elsif, visit_embdoc, visit_embexpr_beg, visit_embexpr_end, visit_embvar, visit_ensure, visit_excessed_comma, visit_fcall, visit_field, visit_float, visit_fndptn, visit_for, visit_gvar, visit_hash, visit_heredoc, visit_heredoc_beg, visit_hshptn, visit_ident, visit_if, visit_if_mod, visit_if_op, visit_imaginary, visit_in, visit_int, visit_ivar, visit_kw, visit_kwrest_param, visit_label, visit_label_end, visit_lambda, visit_lbrace, visit_lbracket, visit_lparen, visit_massign, visit_method_add_block, visit_mlhs, visit_mlhs_paren, visit_module, visit_mrhs, visit_next, visit_not, visit_op, visit_opassign, visit_params, visit_paren, visit_period, visit_pinned_begin, visit_pinned_var_ref, visit_program, visit_qsymbols, visit_qsymbols_beg, visit_qwords, visit_qwords_beg, visit_rassign, visit_rational, visit_rbrace, visit_rbracket, visit_redo, visit_regexp_beg, visit_regexp_content, visit_regexp_end, visit_regexp_literal, visit_rescue, visit_rescue_ex, visit_rescue_mod, visit_rest_param, visit_retry, visit_return, visit_return0, visit_rparen, visit_sclass, visit_statements, visit_string_concat, visit_string_content, visit_string_dvar, visit_string_embexpr, visit_string_literal, visit_super, visit_symbeg, visit_symbol_content, visit_symbol_literal, visit_symbols, visit_symbols_beg, visit_tlambda, visit_tlambeg, visit_top_const_field, visit_top_const_ref, visit_tstring_beg, visit_tstring_content, visit_tstring_end, visit_unary, visit_undef, visit_unless, visit_unless_mod, visit_until, visit_until_mod, visit_var_alias, visit_var_field, visit_var_ref, visit_vcall, visit_void_stmt, visit_when, visit_while, visit_while_mod, visit_word, visit_words, visit_words_beg, visit_xstring, visit_xstring_literal, visit_yield, visit_yield0, visit_zsuper, visit___end__
69 70 71 |
# File 'lib/syntax_tree/visitor.rb', line 69 def visit_child_nodes(node) visit_all(node.child_nodes) end |