Repository navigation
Feat/Bug: Set the value of _ (underscore) to the value of the last ruby expression #1069
Copy link
Copy link
Open
Description
Your proposal
Pry and IRB have a feature in which _ is always set the the value of the last expression. While I realize it may not make sense to do this with debug commands, it would be nice if the feature was there at least for Ruby expressions. The current behavior seems to be setting _ to the last error, but seemingly only for debug commands like ls. This is kind of a bug in the irb_console since IRB has this feature normally but it stops working after entering debug mode.
Additional context
Shell session:
irb(#<Foobar:0x000000011efeb9f0>):001> 3+3
=> 6
irb(#<Foobar:0x000000011efeb9f0>):002> puts _
6
=> nil
irb(#<Foobar:0x000000011efeb9f0>):003> 4+4
=> 8
irb(#<Foobar:0x000000011efeb9f0>):004> info
(rdbg:irb) info
%self = #<Foobar:0x000000011efeb9f0 @foo="bar">
@foo = "bar"
irb:rdbg(#<Foobar:0x000000011efeb9f0>):002> puts _
nil
irb:rdbg(#<Foobar:0x000000011efeb9f0>):003> 4+4
8
irb:rdbg(#<Foobar:0x000000011efeb9f0>):004> puts _
nil
irb:rdbg(#<Foobar:0x000000011efeb9f0>):005> 4+4
8
irb:rdbg(#<Foobar:0x000000011efeb9f0>):006> info
%self = #<Foobar:0x000000011efeb9f0 @foo="bar">
_ = nil
@foo = "bar"
irb:rdbg(#<Foobar:0x000000011efeb9f0>):007> ls Bar
Traceback (most recent call last):
24: from /Users/joesharp/.asdf/installs/ruby/2.7.8/lib/ruby/gems/2.7.0/gems/debug-1.9.1/lib/debug/session.rb:212:in `block in activate'
23: from /Users/joesharp/.asdf/installs/ruby/2.7.8/lib/ruby/gems/2.7.0/gems/debug-1.9.1/lib/debug/session.rb:254:in `session_server_main'
22: from /Users/joesharp/.asdf/installs/ruby/2.7.8/lib/ruby/gems/2.7.0/gems/debug-1.9.1/lib/debug/session.rb:365:in `process_event'
21: from /Users/joesharp/.asdf/installs/ruby/2.7.8/lib/ruby/gems/2.7.0/gems/debug-1.9.1/lib/debug/session.rb:403:in `wait_command_loop'
20: from /Users/joesharp/.asdf/installs/ruby/2.7.8/lib/ruby/gems/2.7.0/gems/debug-1.9.1/lib/debug/session.rb:403:in `loop'
19: from /Users/joesharp/.asdf/installs/ruby/2.7.8/lib/ruby/gems/2.7.0/gems/debug-1.9.1/lib/debug/session.rb:404:in `block in wait_command_loop'
18: from /Users/joesharp/.asdf/installs/ruby/2.7.8/lib/ruby/gems/2.7.0/gems/debug-1.9.1/lib/debug/session.rb:444:in `wait_command'
15: from /Users/joesharp/.asdf/installs/ruby/2.7.8/lib/ruby/gems/2.7.0/gems/debug-1.9.1/lib/debug/session.rb:1981:in `intercept_trap_sigint'
4: from /Users/joesharp/.asdf/installs/ruby/2.7.8/lib/ruby/gems/2.7.0/gems/debug-1.9.1/lib/debug/irb_integration.rb:9:in `evaluate'
(irb):7:in `set_foo': uninitialized constant Foobar::Bar (NameError)`
irb:rdbg(#<Foobar:0x000000011efeb9f0>):008> puts _
uninitialized constant Foobar::Bar
nil
irb:rdbg(#<Foobar:0x000000011efeb9f0>):009> ls Bar
Traceback (most recent call last):
24: from /Users/joesharp/.asdf/installs/ruby/2.7.8/lib/ruby/gems/2.7.0/gems/debug-1.9.1/lib/debug/session.rb:212:in `block in activate'
23: from /Users/joesharp/.asdf/installs/ruby/2.7.8/lib/ruby/gems/2.7.0/gems/debug-1.9.1/lib/debug/session.rb:254:in `session_server_main'
22: from /Users/joesharp/.asdf/installs/ruby/2.7.8/lib/ruby/gems/2.7.0/gems/debug-1.9.1/lib/debug/session.rb:365:in `process_event'
21: from /Users/joesharp/.asdf/installs/ruby/2.7.8/lib/ruby/gems/2.7.0/gems/debug-1.9.1/lib/debug/session.rb:403:in `wait_command_loop'
20: from /Users/joesharp/.asdf/installs/ruby/2.7.8/lib/ruby/gems/2.7.0/gems/debug-1.9.1/lib/debug/session.rb:403:in `loop'
19: from /Users/joesharp/.asdf/installs/ruby/2.7.8/lib/ruby/gems/2.7.0/gems/debug-1.9.1/lib/debug/session.rb:404:in `block in wait_command_loop'
18: from /Users/joesharp/.asdf/installs/ruby/2.7.8/lib/ruby/gems/2.7.0/gems/debug-1.9.1/lib/debug/session.rb:444:in `wait_command'
15: from /Users/joesharp/.asdf/installs/ruby/2.7.8/lib/ruby/gems/2.7.0/gems/debug-1.9.1/lib/debug/session.rb:1981:in `intercept_trap_sigint'
4: from /Users/joesharp/.asdf/installs/ruby/2.7.8/lib/ruby/gems/2.7.0/gems/debug-1.9.1/lib/debug/irb_integration.rb:9:in `evaluate'
(irb):9:in `set_foo': uninitialized constant Foobar::Bar (NameError)`
irb:rdbg(#<Foobar:0x000000011efeb9f0>):010> info
%self = #<Foobar:0x000000011efeb9f0 @foo="bar">
_ = #<NameError: uninitialized constant Foobar::Bar>
@foo = "bar"
irb:rdbg(#<Foobar:0x000000011efeb9f0>):011> Bar.methods
eval error: uninitialized constant Foobar::Bar
(rdbg)/scratch.rb:1:in `set_foo'`
nil
irb:rdbg(#<Foobar:0x000000011efeb9f0>):012> info
%self = #<Foobar:0x000000011efeb9f0 @foo="bar">
_ = nil
@foo = "bar"
irb:rdbg(#<Foobar:0x000000011efeb9f0>):013> Bar.methods
eval error: uninitialized constant Foobar::Bar
(rdbg)/scratch.rb:1:in `set_foo'`
nil
irb:rdbg(#<Foobar:0x000000011efeb9f0>):014> puts _
nilReactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Activity
joe-sharp commentedon Jan 26, 2024
Please let me know if the bug portion of this (
_stops working in IRB when entering debug mode) should be filed as a separate issue. Thanks!joe-sharp commentedon Jan 26, 2024
Additionally, please note in the "Session Variables" section of https://docs.ruby-lang.org/en/2.2.0/IRB.html#module-IRB-label-Commands that IRB also supports
__(double underscore) and__[line_no]when configured to do so. It always supports the single underscore for the last value though.st0012 commentedon Jan 26, 2024
Yes please open a separate issue in IRB, thank you!