class Transpec::BaseRewriter
Public Class Methods
create_source_rewriter(processed_source)
click to toggle source
# File lib/transpec/base_rewriter.rb, line 7 def self.create_source_rewriter(processed_source) # We prefer :warn diagnostic level and diagnostic consumer over :raise level # because the Parser::ClobberingError raised with :raise does not contain detailed message. # https://github.com/whitequark/parser/blob/v2.5.1.2/lib/parser/source/tree_rewriter.rb#L297 source_rewriter = Parser::Source::TreeRewriter.new( processed_source.buffer, different_replacements: :warn, swallowed_insertions: :warn ) source_rewriter.diagnostics.consumer = proc do |diagnostic| fail OverlappedRewriteError, diagnostic.render.join("\n") end source_rewriter end
Public Instance Methods
rewrite(processed_source)
click to toggle source
# File lib/transpec/base_rewriter.rb, line 43 def rewrite(processed_source) fail processed_source.error if processed_source.error source_rewriter = self.class.create_source_rewriter(processed_source) incomplete = false begin process(processed_source.ast, source_rewriter) rescue OverlappedRewriteError incomplete = true end rewritten_source = source_rewriter.process rewritten_source = rewrite_source(rewritten_source, processed_source.path) if incomplete rewritten_source end
rewrite_file!(arg)
click to toggle source
# File lib/transpec/base_rewriter.rb, line 24 def rewrite_file!(arg) processed_source = case arg when String then ProcessedSource.from_file(arg) when ProcessedSource then arg else fail "Invalid argument: #{arg}" end fail 'ProcessedSource must be derived from a file' unless processed_source.path rewritten_source = rewrite(processed_source) return if processed_source.to_s == rewritten_source File.write(processed_source.path, rewritten_source) end
rewrite_source(source, path = nil)
click to toggle source
# File lib/transpec/base_rewriter.rb, line 38 def rewrite_source(source, path = nil) processed_source = ProcessedSource.new(source, path) rewrite(processed_source) end
Private Instance Methods
process(ast, source_rewriter)
click to toggle source
# File lib/transpec/base_rewriter.rb, line 63 def process(ast, source_rewriter) # rubocop:disable UnusedMethodArgument fail NotImplementedError end