class Crispr::Mutations::MethodCall

Mutates method calls by altering the method name or arguments.

def match?(node)

Returns:
  • (Boolean) -

Parameters:
  • node (Parser::AST::Node) --
def match?(node)
  node.type == :send
end

def mutations_for(node)

Returns:
  • (Array) -

Parameters:
  • node (Parser::AST::Node) --
def mutations_for(node)
  return [] unless match?(node)
  original_receiver, original_method_name, *args = *node
  mutations = []
  # Replace method name with a placeholder
  mutations << s(:send, original_receiver, :foo, *args)
  # Add nil as an argument if none exist
  mutations << s(:send, original_receiver, original_method_name, s(:nil)) if args.empty?
  # Remove first argument if any exist
  mutations << s(:send, original_receiver, original_method_name, *args[1..]) if args.any?
  mutations
end