summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-07-24 01:56:04 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-07-24 01:56:04 +0000
commit3fe5d355a802d3212651a42eb6c54129cbf89b21 (patch)
treeb9de5e17892d4a69acfe115f2ec3f93da03acaf8
parentbb52d2be4080e8cd6f1633c7fe8339b0ccced566 (diff)
optparse.rb: case-sensitive candidate
* lib/optparse.rb (candidate): short options are case-sensitive by the default, should not match case-different options.. https://github.com/mernen/completion-ruby/pull/9#issuecomment-317287946 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59412 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--lib/optparse.rb8
-rw-r--r--test/optparse/test_bash_completion.rb5
2 files changed, 9 insertions, 4 deletions
diff --git a/lib/optparse.rb b/lib/optparse.rb
index c38aec38be9..05415901a35 100644
--- a/lib/optparse.rb
+++ b/lib/optparse.rb
@@ -1744,16 +1744,16 @@ XXX
def candidate(word)
list = []
case word
+ when '-'
+ long = short = true
when /\A--/
word, arg = word.split(/=/, 2)
argpat = Completion.regexp(arg, false) if arg and !arg.empty?
long = true
- when /\A-(!-)/
- short = true
when /\A-/
- long = short = true
+ short = true
end
- pat = Completion.regexp(word, true)
+ pat = Completion.regexp(word, long)
visit(:each_option) do |opt|
next unless Switch === opt
opts = (long ? opt.long : []) + (short ? opt.short : [])
diff --git a/test/optparse/test_bash_completion.rb b/test/optparse/test_bash_completion.rb
index 714fd35cff6..513e986f66a 100644
--- a/test/optparse/test_bash_completion.rb
+++ b/test/optparse/test_bash_completion.rb
@@ -40,4 +40,9 @@ class TestOptionParser::BashCompletion < Test::Unit::TestCase
def test_long_for_option_complete
assert_equal(%w[hello help], @opt.candidate("--for=h"))
end
+
+ def test_case_sensitive
+ @opt.define("-Z") {}
+ assert_equal(%w[-z], @opt.candidate("-z"))
+ end
end