Sha256: 599d96fb18cbab272e7fc9e582a58b73942346fa1647ad8d5bf180abe62767e1

Contents?: true

Size: 959 Bytes

Versions: 1

Compression:

Stored size: 959 Bytes

Contents

module OffenseToCorrector
  class Offense
    # How many underline carots (^), and potentially an error after
    OFFENSE_MATCH = /^ *?(?<underline>\^+) *?(?<error>.*)?$/

    attr_reader :error, :range, :source

    def initialize(error:, range:, source:)
      @error = error
      @range = range
      @source = source
    end

    def deconstruct_keys(keys)
      { error:, range:, source: }
    end

    # See if there's an underline, if so get how long it is and
    # the error message after it
    #
    def self.parse(line:, previous_line:)
      match_data = OFFENSE_MATCH.match(line) or return nil
      underline  = match_data[:underline]
      error      = match_data[:error].lstrip

      underline_start = line.index(underline)
      underline_end   = underline_start + underline.size
      range           = underline_start...underline_end

      source = previous_line.slice(range).chomp

      new(error:, range:, source:)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
offense_to_corrector-0.0.2 lib/offense_to_corrector/offense.rb