Class: Spoom::Sorbet::Errors::Parser

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/spoom/sorbet/errors.rb

Overview

Parse errors from Sorbet output

Constant Summary collapse

HEADER =
[
  "👋 Hey there! Heads up that this is not a release build of sorbet.",
  "Release builds are faster and more well-supported by the Sorbet team.",
  "Check out the README to learn how to build Sorbet in release mode.",
  "To forcibly silence this error, either pass --silence-dev-message,",
  "or set SORBET_SILENCE_DEV_MESSAGE=1 in your shell environment.",
]

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(error_url_base: DEFAULT_ERROR_URL_BASE) ⇒ Parser

Returns a new instance of Parser.



30
31
32
33
34
# File 'lib/spoom/sorbet/errors.rb', line 30

def initialize(error_url_base: DEFAULT_ERROR_URL_BASE)
  @errors = []
  @error_line_match_regex = error_line_match_regexp(error_url_base)
  @current_error = nil
end

Class Method Details

.parse_string(output, error_url_base: DEFAULT_ERROR_URL_BASE) ⇒ Object



24
25
26
27
# File 'lib/spoom/sorbet/errors.rb', line 24

def self.parse_string(output, error_url_base: DEFAULT_ERROR_URL_BASE)
  parser = Spoom::Sorbet::Errors::Parser.new(error_url_base: error_url_base)
  parser.parse(output)
end

Instance Method Details

#parse(output) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/spoom/sorbet/errors.rb', line 37

def parse(output)
  output.each_line do |line|
    break if /^No errors! Great job\./.match?(line)
    break if /^Errors: /.match?(line)
    next if HEADER.include?(line.strip)

    next if line == "\n"

    if (error = match_error_line(line))
      close_error if @current_error
      open_error(error)
      next
    end

    append_error(line) if @current_error
  end
  close_error if @current_error
  @errors
end