Class: SyntaxTree::CompleteMutationVisitor
- Inherits:
-
BasicVisitor
- Object
- BasicVisitor
- SyntaxTree::CompleteMutationVisitor
show all
- Defined in:
- lib/syntax_tree/complete_mutation_visitor.rb
Overview
This is a fix for SyntaxTree::MutationVisitor not traversing the entire tree
Instance Method Summary
collapse
-
#copy_and_visit_children(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_block, #visit_blockarg, #visit_block_var, #visit_bodystmt, #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_defined, #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_field, #visit_float, #visit_fndptn, #visit_for, #visit_gvar, #visit_hash, #visit_heredoc, #visit_heredoc_beg, #visit_heredoc_end, #visit_hshptn, #visit_ident, #visit_if, #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_range, #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_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_until, #visit_var_field, #visit_var_ref, #visit_vcall, #visit_void_stmt, #visit_when, #visit_while, #visit_word, #visit_words, #visit_words_beg, #visit_xstring, #visit_xstring_literal, #visit_yield, #visit_zsuper, #visit___end__)
-
#initialize ⇒ CompleteMutationVisitor
constructor
A new instance of CompleteMutationVisitor.
-
#mutate(query, &block) ⇒ Object
-
#visit(node) ⇒ Object
-
#visit_child(child) ⇒ Object
Constructor Details
Returns a new instance of CompleteMutationVisitor.
6
7
8
9
|
# File 'lib/syntax_tree/complete_mutation_visitor.rb', line 6
def initialize
super
@mutations = []
end
|
Instance Method Details
#copy_and_visit_children(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_block, visit_blockarg, visit_block_var, visit_bodystmt, visit_break, visit_call, visit_case, visit_CHAR, visit_class, visit_comma, visit_command, visit_command_call, , visit_const, visit_const_path_field, visit_const_path_ref, visit_const_ref, visit_cvar, visit_def, visit_defined, 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_field, visit_float, visit_fndptn, visit_for, visit_gvar, visit_hash, visit_heredoc, visit_heredoc_beg, visit_heredoc_end, visit_hshptn, visit_ident, visit_if, 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_range, 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_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_until, visit_var_field, visit_var_ref, visit_vcall, visit_void_stmt, visit_when, visit_while, visit_word, visit_words, visit_words_beg, visit_xstring, visit_xstring_literal, visit_yield, visit_zsuper, visit___end__
26
27
28
29
30
31
32
33
34
35
|
# File 'lib/syntax_tree/complete_mutation_visitor.rb', line 26
def copy_and_visit_children(node)
node.dup.tap do |clone|
clone.instance_variables.each do |name|
next if i[@location ].include?(name)
var = clone.instance_variable_get(name)
clone.instance_variable_set(name, visit_child(var))
end
end
end
|
#mutate(query, &block) ⇒ Object
11
12
13
|
# File 'lib/syntax_tree/complete_mutation_visitor.rb', line 11
def mutate(query, &block)
@mutations << [Pattern.new(query).compile, block]
end
|
#visit(node) ⇒ Object
15
16
17
18
19
20
21
22
23
24
|
# File 'lib/syntax_tree/complete_mutation_visitor.rb', line 15
def visit(node)
return unless node
result = node.accept(self)
@mutations.each do |(pattern, mutation)|
result = mutation.call(result) if pattern.call(result)
end
result
end
|
#visit_child(child) ⇒ Object
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/syntax_tree/complete_mutation_visitor.rb', line 37
def visit_child(child)
case child
when Array
child.map { |node| visit_child(node) }
when SyntaxTree::Node
visit(child)
else
child
end
end
|