module Metamorpher::Transformer::Base
Public Instance Methods
driver()
click to toggle source
# File lib/metamorpher/transformer/base.rb, line 27 def driver @driver ||= Metamorpher::Drivers::Ruby.new end
transform(src, &block)
click to toggle source
# File lib/metamorpher/transformer/base.rb, line 9 def transform(src, &block) literal = driver.parse(src) replacements = reduce_to_replacements(src, literal) merge(src, replacements, &block) end
transform_file(path, &block)
click to toggle source
# File lib/metamorpher/transformer/base.rb, line 15 def transform_file(path, &block) transform(File.read(path), &block) end
transform_files(paths, &block)
click to toggle source
# File lib/metamorpher/transformer/base.rb, line 19 def transform_files(paths, &block) paths.each_with_object({}) do |path, result| changes = [] result[path] = transform_file(path) { |change| changes << change } block.call(path, result[path], changes) if block end end
Private Instance Methods
reduce_to_replacements(src, literal)
click to toggle source
# File lib/metamorpher/transformer/base.rb, line 33 def reduce_to_replacements(src, literal) [].tap do |replacements| rule.reduce(literal) do |original, rewritings| original_position = driver.source_location_for(original) original_code = src[original_position] rewritings.alternatives.each do |rewriting| replacements << Site.new(original_position, original_code, driver.unparse(rewriting)) end end end end
rule()
click to toggle source
# File lib/metamorpher/transformer/base.rb, line 46 def rule @rule ||= Rewriter::Rule.new(pattern: pattern, replacement: replacement) end