Sha256: 436ca0d7dcef2b5ee065f33005be3153126d47ad513aab412842c8a65f437469

Contents?: true

Size: 831 Bytes

Versions: 5

Compression:

Stored size: 831 Bytes

Contents

# frozen_string_literal: true

module DeadEnd
  # Capture parse errors from ripper
  #
  # Example:
  #
  #   puts RipperErrors.new(" def foo").call.errors
  #   # => ["syntax error, unexpected end-of-input, expecting ';' or '\\n'"]
  class RipperErrors < Ripper
    attr_reader :errors

    # Comes from ripper, called
    # on every parse error, msg
    # is a string
    def on_parse_error(msg)
      @errors ||= []
      @errors << msg
    end

    alias_method :on_alias_error, :on_parse_error
    alias_method :on_assign_error, :on_parse_error
    alias_method :on_class_name_error, :on_parse_error
    alias_method :on_param_error, :on_parse_error
    alias_method :compile_error, :on_parse_error

    def call
      @run_once ||= begin
        @errors = []
        parse
        true
      end
      self
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
dead_end-4.0.0 lib/dead_end/ripper_errors.rb
dead_end-3.1.2 lib/dead_end/ripper_errors.rb
dead_end-3.1.1 lib/dead_end/ripper_errors.rb
dead_end-3.1.0 lib/dead_end/ripper_errors.rb
dead_end-3.0.3 lib/dead_end/ripper_errors.rb