Class: SyntaxTree::Visitor::MatchVisitor
- Inherits:
-
FieldVisitor
- Object
- BasicVisitor
- FieldVisitor
- SyntaxTree::Visitor::MatchVisitor
- Defined in:
- lib/syntax_tree/visitor/match_visitor.rb
Overview
This visitor transforms the AST into a Ruby pattern matching expression that would match correctly against the AST.
Instance Attribute Summary collapse
-
#q ⇒ Object
readonly
Returns the value of attribute q.
Instance Method Summary collapse
-
#initialize(q) ⇒ MatchVisitor
constructor
A new instance of MatchVisitor.
- #visit(node) ⇒ Object
Methods inherited from FieldVisitor
#visit_BEGIN, #visit_CHAR, #visit_END, #visit___end__, #visit_alias, #visit_aref, #visit_aref_field, #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_binary, #visit_block_var, #visit_blockarg, #visit_bodystmt, #visit_brace_block, #visit_break, #visit_call, #visit_case, #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_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_lambda_var, #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
Methods inherited from BasicVisitor
#visit_all, #visit_child_nodes, visit_method, visit_methods
Constructor Details
#initialize(q) ⇒ MatchVisitor
Returns a new instance of MatchVisitor.
10 11 12 |
# File 'lib/syntax_tree/visitor/match_visitor.rb', line 10 def initialize(q) @q = q end |
Instance Attribute Details
#q ⇒ Object (readonly)
Returns the value of attribute q.
8 9 10 |
# File 'lib/syntax_tree/visitor/match_visitor.rb', line 8 def q @q end |
Instance Method Details
#visit(node) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/syntax_tree/visitor/match_visitor.rb', line 14 def visit(node) case node when Node super when String # pp will split up a string on newlines and concat them together using # a "+" operator. This breaks the pattern matching expression. So # instead we're going to check here for strings and manually put the # entire value into the output buffer. q.text(node.inspect) else node.pretty_print(q) end end |