Module: ErrorHighlight::CoreExt

Defined in:
lib/error_highlight/core_ext.rb

Instance Method Summary collapse

Instance Method Details

#to_sObject


11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/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