module ErrorHighlight::CoreExt

Constants

SKIP_TO_S_FOR_SUPER_LOOKUP

This is a marker to let ‘DidYouMean::Correctable#original_message` skip the following method definition of `to_s`. See github.com/ruby/did_you_mean/pull/152

Public Instance Methods

to_s() click to toggle source
Calls superclass method
# File error_highlight/core_ext.rb, line 11
def to_s
  msg = super.dup

  locs = backtrace_locations
  return msg unless locs

  loc = locs.first
  begin
    node = RubyVM::AbstractSyntaxTree.of(loc, keep_script_lines: true)
    opts = {}

    case self
    when NoMethodError, NameError
      opts[:point_type] = :name
      opts[:name] = name
    when TypeError, ArgumentError
      opts[:point_type] = :args
    end

    spot = ErrorHighlight.spot(node, **opts)

  rescue SyntaxError
  rescue SystemCallError # file not found or something
  rescue ArgumentError   # eval'ed code
  end

  if spot
    points = ErrorHighlight.formatter.message_for(spot)
    msg << points if !msg.include?(points)
  end

  msg
end