free_mutant/lib/mutant/matcher.rb

55 lines
990 B
Ruby

module Mutant
# Abstract matcher to find ASTs to mutate
class Matcher
include Adamantium::Flat, Enumerable, AbstractClass
extend DescendantsTracker
# Enumerate subjects
#
# @api private
#
# @return [undefined]
#
abstract_method :each
# Return identification
#
# @return [String
#
# @api private
#
abstract_method :identification
# Return matcher
#
# @param [String] input
#
# @return [nil]
# returns nil as default implementation
#
# @api private
#
def self.parse(input)
nil
end
# Return match from string
#
# @param [String] input
#
# @return [Matcher]
# returns matcher input if successful
#
# @return [nil]
# returns nil otherwise
#
def self.from_string(input)
descendants.each do |descendant|
matcher = descendant.parse(input)
return matcher if matcher
end
nil
end
end
end