Class: Mutineer::Mutators::ConditionNegation

Inherits:
Base
  • Object
show all
Defined in:
lib/mutineer/mutators/condition_negation.rb

Overview

Condition-negation mutator.

Wraps if/unless predicates in !( ... ) textually.

Instance Method Summary collapse

Methods inherited from Base

#heredoc?, #mutations_for

Instance Method Details

#visit_if_node(node) ⇒ void

This method returns an undefined value.

Visits if nodes.

Parameters:

  • node (Prism::IfNode) —

    node to inspect.



15
16
17
18
# File 'lib/mutineer/mutators/condition_negation.rb', line 15

def visit_if_node(node)
  wrap(node.predicate)
  super
end

#visit_unless_node(node) ⇒ void

This method returns an undefined value.

Visits unless nodes.

Parameters:

  • node (Prism::UnlessNode) —

    node to inspect.



24
25
26
27
# File 'lib/mutineer/mutators/condition_negation.rb', line 24

def visit_unless_node(node)
  wrap(node.predicate)
  super
end

#wrap(predicate) ⇒ void (private)

This method returns an undefined value.

Wraps a predicate in negation.

Parameters:

  • predicate (Prism::Node, nil) —

    predicate node.



35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/mutineer/mutators/condition_negation.rb', line 35

def wrap(predicate)
  return unless predicate

  loc = predicate.location
  original = @source.byteslice(loc.start_offset...loc.end_offset)
  @mutations << Mutation.new(
    start_offset: loc.start_offset,
    end_offset: loc.end_offset,
    replacement: "!( #{original} )",
    operator: :condition_negation
  )
end