ruby / irb

interactive Ruby
BSD 2-Clause "Simplified" License
356 stars 114 forks source link

break debug command changes ruby behavior #977

Open etiennebarrie opened 4 days ago

etiennebarrie commented 4 days ago

Description

When evaluating a Ruby expression that starts with break while not using the debugger, the behavior of the ruby code changes.

$ ruby -e 'p((break :foo while true))'
:foo
$ irb -f --prompt simple
>> break :foo while true
Debugging commands are only available when IRB is started with binding.irb
=> nil

The line evaluates to nil while I would expect to evaluate to :foo like it does without IRB.

Result of irb_info

Ruby version: 3.3.3
IRB version: irb 1.13.2 (2024-06-15)
InputMethod: RelineInputMethod with Reline 0.5.9 and /Users/etienne/.inputrc
Completion: Autocomplete, RegexpCompletor
.irbrc paths: /Users/etienne/.config/irb/irbrc
RUBY_PLATFORM: arm64-darwin23
LC_ALL env: en_US.UTF-8
East Asian Ambiguous Width: 1

Terminal Emulator

Terminal.app

Setting Files

Disabled using the -f command-line option.

tompng commented 3 days ago

The confusing => nil part is now hidden in master branch. https://github.com/ruby/irb/pull/972

Break command and ruby expression has a conflict.

# add a breakpoint to file "./while" on line 1
irb(main):001> break while 1

Changing the behavior will also make unexpected result.

irb(main):001> break file.rb 2
#=> SyntaxError, but I expect a message why break command is not available now

I think it is not easy to improve.