lib/mutant/mutator/node/send.rb in mutant-0.8.0 vs lib/mutant/mutator/node/send.rb in mutant-0.8.1
- old
+ new
@@ -22,10 +22,12 @@
gsub: %i[sub],
eql?: %i[equal?],
to_s: %i[to_str],
to_i: %i[to_int],
to_a: %i[to_ary],
+ at: %i[fetch],
+ :[] => %i[at fetch],
:== => %i[eql? equal?],
:>= => %i[> == eql? equal?],
:<= => %i[< == eql? equal?],
:> => %i[== >= eql? equal?],
:< => %i[== <= eql? equal?]
@@ -36,11 +38,10 @@
# Perform dispatch
#
# @return [undefined]
#
# @api private
- #
def dispatch
emit_singletons
if meta.index_assignment?
run(Index::Assign)
else
@@ -51,36 +52,42 @@
# Perform non index dispatch
#
# @return [undefined]
#
# @api private
- #
def non_index_dispatch
- case
- when meta.binary_method_operator?
+ if meta.binary_method_operator?
run(Binary)
- when meta.attribute_assignment?
+ elsif meta.attribute_assignment?
run(AttributeAssignment)
else
normal_dispatch
end
end
- # Return arguments
+ # AST metadata for node
#
- # @return [Enumerable<Parser::AST::Node>]
+ # @return [AST::Meta::Send]
#
# @api private
+ def meta
+ AST::Meta::Send.new(node)
+ end
+ memoize :meta
+
+ # Arguments being send
#
+ # @return [Enumerable<Parser::AST::Node>]
+ #
+ # @api private
alias_method :arguments, :remaining_children
# Perform normal, non special case dispatch
#
# @return [undefined]
#
# @api private
- #
def normal_dispatch
emit_naked_receiver
emit_selector_replacement
emit_argument_propagation
mutate_receiver
@@ -90,33 +97,28 @@
# Emit selector replacement
#
# @return [undefined]
#
# @api private
- #
def emit_selector_replacement
- SELECTOR_REPLACEMENTS.fetch(selector, EMPTY_ARRAY).each do |replacement|
- emit_selector(replacement)
- end
+ SELECTOR_REPLACEMENTS.fetch(selector, EMPTY_ARRAY).each(&method(:emit_selector))
end
# Emit naked receiver mutation
#
# @return [undefined]
#
# @api private
- #
def emit_naked_receiver
emit(receiver) if receiver && !NOT_ASSIGNABLE.include?(receiver.type)
end
# Mutate arguments
#
# @return [undefined]
#
# @api private
- #
def mutate_arguments
emit_type(receiver, selector)
remaining_children_with_index.each do |_node, index|
mutate_child(index)
delete_child(index)
@@ -126,22 +128,20 @@
# Emit argument propagation
#
# @return [undefined]
#
# @api private
- #
def emit_argument_propagation
node = arguments.first
emit(node) if arguments.one? && !NOT_STANDALONE.include?(node.type)
end
# Emit receiver mutations
#
# @return [undefined]
#
# @api private
- #
def mutate_receiver
return unless receiver
emit_implicit_self
emit_receiver_mutations do |node|
!n_nil?(node)
@@ -151,10 +151,9 @@
# Emit implicit self mutation
#
# @return [undefined]
#
# @api private
- #
def emit_implicit_self
emit_receiver(nil) if n_self?(receiver) && !(
KEYWORDS.include?(selector) ||
METHOD_OPERATORS.include?(selector) ||
OP_ASSIGN.include?(parent_type) ||