class RuboCop::Cop::Corrector

AST of the source_buffer.
The nodes modified by the corrections should be part of the
Important!
based on the different correction rules supplied.
This class takes a source buffer and rewrite its source

def initialize(source_buffer, corrections = [])

Parameters:
  • corrections (Array(#call)) --
  • source_buffer (Parser::Source::Buffer) --
def initialize(source_buffer, corrections = [])
  @source_buffer = source_buffer
  @corrections = corrections
  @source_rewriter = Parser::Source::Rewriter.new(source_buffer)
  @diagnostics = []
  # Don't print warnings to stderr if corrections conflict with each other
  @source_rewriter.diagnostics.consumer = lambda do |diagnostic|
    @diagnostics << diagnostic
  end
end

def insert_after(range, content)

Parameters:
  • content (String) --
  • range (Parser::Source::Range) --
def insert_after(range, content)
  @source_rewriter.insert_after(range, content)
end

def insert_before(range, content)

Parameters:
  • content (String) --
  • range (Parser::Source::Range) --
def insert_before(range, content)
  @source_rewriter.insert_before(range, content)
end

def remove(range)

Parameters:
  • range (Parser::Source::Range) --
def remove(range)
  @source_rewriter.remove(range)
end

def remove_leading(range, size)

Parameters:
  • size (Integer) --
  • range (Parser::Source::Range) --
def remove_leading(range, size)
  to_remove = Parser::Source::Range.new(range.source_buffer,
                                        range.begin_pos,
                                        range.begin_pos + size)
  @source_rewriter.remove(to_remove)
end

def remove_preceding(range, size)

Parameters:
  • size (Integer) --
  • range (Parser::Source::Range) --
def remove_preceding(range, size)
  to_remove = Parser::Source::Range.new(range.source_buffer,
                                        range.begin_pos - size,
                                        range.begin_pos)
  @source_rewriter.remove(to_remove)
end

def remove_trailing(range, size)

Parameters:
  • size (Integer) --
  • range (Parser::Source::Range) --
def remove_trailing(range, size)
  to_remove = Parser::Source::Range.new(range.source_buffer,
                                        range.end_pos - size,
                                        range.end_pos)
  @source_rewriter.remove(to_remove)
end

def replace(range, content)

Parameters:
  • content (String) --
  • range (Parser::Source::Range) --
def replace(range, content)
  @source_rewriter.replace(range, content)
end

def rewrite

Returns:
  • (String) -
def rewrite
  # rubocop:disable Lint/HandleExceptions
  @corrections.each do |correction|
    begin
      @source_rewriter.transaction do
        correction.call(self)
      end
    rescue ::Parser::ClobberingError
    end
  end
  # rubocop:enable Lint/HandleExceptions
  @source_rewriter.process
end