Class: SyntaxTree::Visitor

Inherits:
Object
  • Object
show all
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

LanguageServer::InlayHints, FieldVisitor

Defined Under Namespace

Classes: FieldVisitor, JSONVisitor, MatchVisitor, PrettyPrintVisitor, VisitMethodChecker, VisitMethodError

Class Method Summary collapse

Instance Method Summary collapse

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.

Raises:



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_methodsObject

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