-
Notifications
You must be signed in to change notification settings - Fork 26
Closed
Description
Summary
If define a long option string (that exceeds summary width?) without the short option, TypeError will occur when displaying help.
Steps to reproduce
require 'optparse'
options = {}
OptionParser.new do |opts|
# These options are fine.
opts.on('', '--long-option-param') { options[:long_option_param_without_short] = true }
opts.on('-a', '--long-long-option-param-with-short') { options[:long_long_option_param_with_short] = true }
# This causes TypeError
opts.on('', '--long-long-option-param-without-short') { options[:long_long_option_param_without_short] = true }
end.parse!
p options$ ruby ./long_param_test.rb -h
/Users/castor/.rbenv/versions/3.1.2/lib/ruby/3.1.0/optparse.rb:634:in `+': no implicit conversion of nil into String (TypeError)
from /Users/castor/.rbenv/versions/3.1.2/lib/ruby/3.1.0/optparse.rb:634:in `summarize'
from /Users/castor/.rbenv/versions/3.1.2/lib/ruby/3.1.0/optparse.rb:898:in `block in summarize'
from /Users/castor/.rbenv/versions/3.1.2/lib/ruby/3.1.0/optparse.rb:895:in `reverse_each'
from /Users/castor/.rbenv/versions/3.1.2/lib/ruby/3.1.0/optparse.rb:895:in `summarize'
from /Users/castor/.rbenv/versions/3.1.2/lib/ruby/3.1.0/optparse.rb:1743:in `block in visit'
from /Users/castor/.rbenv/versions/3.1.2/lib/ruby/3.1.0/optparse.rb:1742:in `reverse_each'
from /Users/castor/.rbenv/versions/3.1.2/lib/ruby/3.1.0/optparse.rb:1742:in `visit'
from /Users/castor/.rbenv/versions/3.1.2/lib/ruby/3.1.0/optparse.rb:1286:in `summarize'
from /Users/castor/.rbenv/versions/3.1.2/lib/ruby/3.1.0/optparse.rb:1293:in `help'
from /Users/castor/.rbenv/versions/3.1.2/lib/ruby/3.1.0/optparse.rb:1002:in `block (2 levels) in <class:OptionParser>'
from /Users/castor/.rbenv/versions/3.1.2/lib/ruby/3.1.0/optparse.rb:1614:in `block in parse_in_order'
from /Users/castor/.rbenv/versions/3.1.2/lib/ruby/3.1.0/optparse.rb:1559:in `catch'
from /Users/castor/.rbenv/versions/3.1.2/lib/ruby/3.1.0/optparse.rb:1559:in `parse_in_order'
from /Users/castor/.rbenv/versions/3.1.2/lib/ruby/3.1.0/optparse.rb:1553:in `order!'
from /Users/castor/.rbenv/versions/3.1.2/lib/ruby/3.1.0/optparse.rb:1659:in `permute!'
from /Users/castor/.rbenv/versions/3.1.2/lib/ruby/3.1.0/optparse.rb:1684:in `parse!'
from ./long_param_test.rb:8:in `<main>'Expected
$ ruby ./long_param_test.rb -h
Usage: long_param_test [options]
--long-option-param
-a --long-long-option-param-with-short
--long-long-option-param-without-shortEnvironment
$ ruby -v
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin20]
$ gem list --local | grep optparse
optparse (default: 0.2.0)Metadata
Metadata
Assignees
Labels
No labels