Class: Mutineer::Mutators::OperatorAssignment
- Defined in:
- lib/mutineer/mutators/operator_assignment.rb
Overview
Operator-assignment mutator (Tier-2).
Swaps the operator of a compound assignment, one mutation per
occurrence: t += x -> t -= x. Prism parses t += x as its own
node, not as a CallNode, so the arithmetic mutator never sees it.
The mapping is the same as for arithmetic. Other compound operators
(||=, &&=, |=, <<= and the rest) are not changed.
Constant Summary collapse
- REPLACEMENTS =
Token replacements for compound arithmetic operators.
{ :+ => "-=", :- => "+=", :* => "/=", :/ => "*=", :% => "*=", :** => "*=" }.freeze
Instance Method Summary collapse
-
#emit(node) ⇒ void
private
Emits a mutation when the node's operator has a replacement.
-
#visit_call_operator_write_node(node) ⇒ void
Visits
a.b += xanda&.b += x. -
#visit_class_variable_operator_write_node(node) ⇒ void
Visits
@@t += x. -
#visit_constant_operator_write_node(node) ⇒ void
Visits
T += x. -
#visit_constant_path_operator_write_node(node) ⇒ void
Visits
A::T += xand::T += x. -
#visit_def_node(node) ⇒ void
Skips a nested method definition.
-
#visit_global_variable_operator_write_node(node) ⇒ void
Visits
$t += x. -
#visit_index_operator_write_node(node) ⇒ void
Visits
a[i] += x. -
#visit_instance_variable_operator_write_node(node) ⇒ void
Visits
@t += x. -
#visit_local_variable_operator_write_node(node) ⇒ void
Visits
t += x.
Methods inherited from Base
Instance Method Details
#emit(node) ⇒ void (private)
This method returns an undefined value.
Emits a mutation when the node's operator has a replacement.
106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/mutineer/mutators/operator_assignment.rb', line 106 def emit(node) replacement = REPLACEMENTS[node.binary_operator] return unless replacement loc = node.binary_operator_loc @mutations << Mutation.new( start_offset: loc.start_offset, end_offset: loc.end_offset, replacement: replacement, operator: :operator_assignment ) end |
#visit_call_operator_write_node(node) ⇒ void
This method returns an undefined value.
Visits a.b += x and a&.b += x.
79 80 81 82 |
# File 'lib/mutineer/mutators/operator_assignment.rb', line 79 def visit_call_operator_write_node(node) emit(node) super end |
#visit_class_variable_operator_write_node(node) ⇒ void
This method returns an undefined value.
Visits @@t += x.
43 44 45 46 |
# File 'lib/mutineer/mutators/operator_assignment.rb', line 43 def visit_class_variable_operator_write_node(node) emit(node) super end |
#visit_constant_operator_write_node(node) ⇒ void
This method returns an undefined value.
Visits T += x.
61 62 63 64 |
# File 'lib/mutineer/mutators/operator_assignment.rb', line 61 def visit_constant_operator_write_node(node) emit(node) super end |
#visit_constant_path_operator_write_node(node) ⇒ void
This method returns an undefined value.
Visits A::T += x and ::T += x.
70 71 72 73 |
# File 'lib/mutineer/mutators/operator_assignment.rb', line 70 def visit_constant_path_operator_write_node(node) emit(node) super end |
#visit_def_node(node) ⇒ void
This method returns an undefined value.
Skips a nested method definition. The project finds it as a subject of its own, so a visit here counts its compound assignments twice.
98 |
# File 'lib/mutineer/mutators/operator_assignment.rb', line 98 def visit_def_node(node); end |
#visit_global_variable_operator_write_node(node) ⇒ void
This method returns an undefined value.
Visits $t += x.
52 53 54 55 |
# File 'lib/mutineer/mutators/operator_assignment.rb', line 52 def visit_global_variable_operator_write_node(node) emit(node) super end |
#visit_index_operator_write_node(node) ⇒ void
This method returns an undefined value.
Visits a[i] += x.
88 89 90 91 |
# File 'lib/mutineer/mutators/operator_assignment.rb', line 88 def visit_index_operator_write_node(node) emit(node) super end |
#visit_instance_variable_operator_write_node(node) ⇒ void
This method returns an undefined value.
Visits @t += x.
34 35 36 37 |
# File 'lib/mutineer/mutators/operator_assignment.rb', line 34 def visit_instance_variable_operator_write_node(node) emit(node) super end |
#visit_local_variable_operator_write_node(node) ⇒ void
This method returns an undefined value.
Visits t += x.
25 26 27 28 |
# File 'lib/mutineer/mutators/operator_assignment.rb', line 25 def visit_local_variable_operator_write_node(node) emit(node) super # the value can hold its own compound assignment end |