ruby / irb

interactive Ruby
BSD 2-Clause "Simplified" License
393 stars 119 forks source link

After entering `debug`, _ (underscore) stops working #891

Open joe-sharp opened 9 months ago

joe-sharp commented 9 months ago

Description

Underscore stops working correctly after entering debug mode. Issue is present on Ruby 2.7.8-3.3.0. Cross filed from https://github.com/ruby/debug/issues/1069

Additional context

Shell session:

```rb irb(# 3+3 => 6 irb(# _ => 6 irb(# debug irb:rdbg(# 3+3 6 irb:rdbg(# _ nil ```

This older more detailed shell session shows that the most recent irb error seems to be returned if it were the last command.

Older Shell session:

```rb irb(#):001> 3+3 => 6 irb(#):002> puts _ 6 => nil irb(#):003> 4+4 => 8 irb(#):004> info (rdbg:irb) info %self = # @foo = "bar" irb:rdbg(#):002> puts _ nil irb:rdbg(#):003> 4+4 8 irb:rdbg(#):004> puts _ nil irb:rdbg(#):005> 4+4 8 irb:rdbg(#):006> info %self = # _ = nil @foo = "bar" irb:rdbg(#):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(#):008> puts _ uninitialized constant Foobar::Bar nil irb:rdbg(#):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(#):010> info %self = # _ = # @foo = "bar" irb:rdbg(#):011> Bar.methods eval error: uninitialized constant Foobar::Bar (rdbg)/scratch.rb:1:in `set_foo'` nil irb:rdbg(#):012> info %self = # _ = nil @foo = "bar" irb:rdbg(#):013> Bar.methods eval error: uninitialized constant Foobar::Bar (rdbg)/scratch.rb:1:in `set_foo'` nil irb:rdbg(#):014> puts _ nil ```

Result of irb_info

Please paste the result of irb_info command in IRB.

ex.)

irb:rdbg(#<RuboCop::Formatter::Markdow...):004> irb_info
Ruby version: 3.2.3
IRB version: irb 1.11.2 (2024-02-07)
InputMethod: RelineInputMethod with Reline 0.4.3
Completion: Autocomplete, RegexpCompletor
.irbrc path: /Users/joesharp/.config/irb/irbrc
RUBY_PLATFORM: arm64-darwin22
LANG env: en_US.UTF-8
East Asian Ambiguous Width: 1

Terminal Emulator

What's your terminal emulator? iTerm2

Setting Files

Are you using ~/.irbrc and ~/.inputrc? Only an irbrc