-
Notifications
You must be signed in to change notification settings - Fork 26
Open
Description
Currently, error_highlight
spots the deepest Ruby frame. This may show code in a gem, which may not be very useful for application writers.
Consider:
# gem code
class SomeGem
def foo(x)
raise ArgumentError, "wrong input" if x == nil
end
end
# app code
SomeGem.new.foo(nil)
Here is the current behavior:
$ ruby test.rb
test.rb:4:in `foo': wrong input (ArgumentError)
raise ArgumentError, "wrong input" if x == nil
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
from test.rb:9:in `<main>'
However, application writers may want to see the line of SomeGem.new.foo(nil)
.
How might this be resolved?
- Display code snippets for all frames, not just for the deepest one. Python does this, but I am not very keen on it because it makes the error trace very messy.
- Add an argument
Kernel#raise
to tell error_highlight which frame should be displayed, for example,raise ArgumentError, "wrong input", error_highlight_skip_frames: 1
.
For 2, there are two ways how to show the error.
2-1. Keep the error trace as is and change only the snippet. This might be confusing because the snippet line does not exist in test.rb:4
.
$ ruby test.rb
test.rb:4:in `foo': wrong input (ArgumentError)
SomeGem.new.foo(nil)
^^^
from test.rb:9:in `<main>'
2-2. Skip the error trace. This looks good to me, but I think this is beyond the responsibilities of error_highlight.
$ ruby test.rb
test.rb:9:in `<main>': wrong input (ArgumentError)
SomeGem.new.foo(nil)
^^^
I wonder if we should put something like raise skip_frames: n
in the Ruby core side? I need to organize my thoughts.
apainintheneck
Metadata
Metadata
Assignees
Labels
No labels