ruby/irb

break debug command changes ruby behavior

etiennebarrie opened this issue · 2 comments

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.

The confusing => nil part is now hidden in master branch. #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.

Thank you.

The confusing => nil part is now hidden in master branch. #972

This has been released in 1.14.0.

I think it is not easy to improve

Indeed. As a workaround, prepending ; makes sure the line is considered as Ruby code.

$ irb -f --simple-prompt
>> break :foo while true
Debugging commands are only available when IRB is started with binding.irb
>> ;break :foo while true
=> :foo