Bug #7537

OptionParser treats negative digits as options

Added by Ilya Vorontsov over 1 year ago. Updated 7 months ago.

[ruby-core:50706]
Status:Assigned
Priority:Normal
Assignee:Nobuyoshi Nakada
Category:lib
Target version:-
ruby -v:1.9.3(p0, p327 both) Backport:

Description

Is it intentional that negative digits are treated as options?
If I use negative digit as an argument of an option, it is treated as a number

OptionParser.new {|opts|
opts.on('-p','--pvalue VAL', Integer, 'P-value') {|v| puts "P-value: #{v}" }
}.parse!

ruby my_test.rb -p -1 works normally

But if I use it as optional argument of an option:

OptionParser.new {|opts|
opts.on('-p','--pvalue [VAL]', Integer, 'P-value') {|v| puts "P-value: #{v}" }
}.parse!

ruby my_test.rb -p -1 fails with "Invalid option -1"

Also I can't use it as non-optional argument

OptionParser.new {|opts|
opts.on('-n', 'no Pvalue argument, other arguments only') {}
}.parse!
puts ARGV

ruby my_test.rb -1 also fails with "Invalid option -1"

259.patch Magnifier (10.2 KB) Zachary Scott, 04/05/2013 11:38 AM

History

#1 Updated by Ilya Vorontsov over 1 year ago

In my opinion, negative numbers shouldn't be treated as option keys unless it was explicitly specified. In other cases them should be treated as usual parameters.

#2 Updated by Zachary Scott over 1 year ago

  • Category set to lib
  • Assignee set to Nobuyoshi Nakada

#3 Updated by Usaku NAKAMURA over 1 year ago

  • Status changed from Open to Assigned

#4 Updated by Ilya Vorontsov about 1 year ago

Sent a pull-request. https://github.com/ruby/ruby/pull/259
I've made changes the same way as python do -- http://docs.python.org/dev/library/argparse.html#arguments-containing
This patch introduces one possible (but not very serious and very rare) incompatibility: if one already uses explicitly defined negative-digit option such as '-1' and also uses an option with optional argument '-p [ARG]' and runs a command with options '-p -1' then before patch it'll be treated as two different options '-p', '-1' and after patch they are treated as an option '-p' with value '-1'.
If one meets this problem, he can use option declaration with equal sign: '-p=[ARG]' or just change places of arguments and run his program with options '-1 -p'.
But I suppose not too many people use explicitly defined numeric options and even less people use optional argument with them in such order (may be even nobody use it such a way).

Also, if possible, backporting into 1.9 of this patch will be very useful. Unfortunately I don't know how should I do this.

#5 Updated by Zachary Scott about 1 year ago

I've attached the patch from the associated pull request.

#6 Updated by Ilya Vorontsov 7 months ago

Any thoughts about this patch?

Also available in: Atom PDF