Sha256: 8bf0eef6a407b025cffa1a803cec884368cf77ccf19c88fa193dcd772781dfc8
Contents?: true
Size: 1.48 KB
Versions: 1
Compression:
Stored size: 1.48 KB
Contents
require "metamorpher/transformer/merger" require "metamorpher/transformer/site" require "metamorpher/rewriter/rule" require "metamorpher/drivers/ruby" module Metamorpher module Transformer module Base def transform(src, &block) literal = driver.parse(src) replacements = reduce_to_replacements(src, literal) merge(src, replacements, &block) end def transform_file(path, &block) transform(File.read(path), &block) end 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 def driver @driver ||= Metamorpher::Drivers::Ruby.new end private def reduce_to_replacements(src, literal) [].tap do |replacements| rules.each do |rule| # FIXME : change to inject? rule.reduce(literal) do |original, rewritten| original_position = driver.source_location_for(original) original_code = src[original_position] transformed_code = driver.unparse(rewritten) replacements << Site.new(original_position, original_code, transformed_code) end end end end def rules @rules ||= replacements.map { |r| Rewriter::Rule.new(pattern: pattern, replacement: r) } end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
metamorpher-0.2.0 | lib/metamorpher/transformer/base.rb |