Class: Mutineer::Mutators::ReturnNil

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

Overview

Return-nil mutator.

Replaces explicit return values and final expressions with nil.

Instance Method Summary collapse

Instance Method Details

#mutations_for(subject, source) ⇒ Array<Mutineer::Mutation>

Collects return-nil mutations for a subject.

Parameters:

  • subject (Mutineer::Subject)

    subject to inspect.

  • source (String)

    full source text.

Returns:



16
17
18
19
20
21
22
23
24
25
# File 'lib/mutineer/mutators/return_nil.rb', line 16

def mutations_for(subject, source)
  @source = source
  @mutations = []
  body = subject.def_node.body
  if body
    body.accept(self)       # rule 1 (explicit return nodes in this body)
    final_expression_nil(body) # rule 2 (method's final expression)
  end
  @mutations
end

#visit_def_node(node) ⇒ void

This method returns an undefined value.

Nested method definitions are discovered as their own subjects; do not recurse into them (prevents double-counting their statements).

Parameters:

  • node (Prism::DefNode)

    nested definition node.



47
# File 'lib/mutineer/mutators/return_nil.rb', line 47

def visit_def_node(node); end

#visit_return_node(node) ⇒ void

This method returns an undefined value.

Visits return nodes.

Parameters:

  • node (Prism::ReturnNode)

    node to inspect.



31
32
33
34
35
36
37
38
39
40
# File 'lib/mutineer/mutators/return_nil.rb', line 31

def visit_return_node(node)
  args = node.arguments
  if args
    values = args.arguments
    unless values.size == 1 && values.first.is_a?(Prism::NilNode)
      emit(args.location)
    end
  end
  super
end