class Sorbet::Eraser::Parser

A Ripper parser that will replace usage of Sorbet patterns with whitespace so that location information is maintained but Sorbet methods aren't called.

Attributes

line_counts[R]
patterns[R]

Public Class Methods

erase(source) click to toggle source
# File lib/sorbet/eraser/parser.rb, line 84
def self.erase(source)
  parser = new(source)

  if parser.parse.nil? || parser.error?
    raise "Invalid source"
  else
    parser.patterns.inject(source) do |current, pattern|
      pattern.erase(current)
    end
  end
end
new(source) click to toggle source
Calls superclass method
# File lib/sorbet/eraser/parser.rb, line 65
def initialize(source)
  super(source)

  @line_counts = []
  last_index = 0

  source.lines.each do |line|
    if line.size == line.bytesize
      @line_counts << SingleByteString.new(last_index)
    else
      @line_counts << MultiByteString.new(last_index, line)
    end

    last_index += line.size
  end

  @patterns = []
end

Private Instance Methods

loc() click to toggle source
# File lib/sorbet/eraser/parser.rb, line 98
def loc
  line_counts[lineno - 1][column]
end