[#44237] Float を利用するRubyプログラム — SASADA Koichi <ko1@...>

 ささだです.

16 messages 2007/11/17
[#44241] Re: Float を利用するRubyプログラム — SASADA Koichi <ko1@...> 2007/11/19

 ささだです.

[ruby-list:44179] [PATCH] optparse においてショートオプションがない && 引数が長い場合のサマリの修正

From: Kobayashi Noritada <nori1@...>
Date: 2007-11-02 10:49:05 UTC
List: ruby-list #44179
こんにちは、小林です。

Rabbit を使っていて気付いたのですが、optparse において、
ショートオプションがないオプションの引数が長いとき、
ヘルプ (オプションサマリ) の表示がおかしくなります。

例:

require 'optparse'

OptionParser.new {|opt|
  opt.on('--long-opt-1=arg', 'long opt + short arg')
  opt.on('--long-opt-2=very-very-very-long-arg', 'long opt + long arg')
  opt.on('-3=very-very-very-very-very-very-very-very-long-arg',
         'short opt + long arg')
  opt.on('-4', '--long-opt-4=arg', 'short/long opts + short arg')
  opt.on('-5',
         '--long-opt-5=very-very-very-very-very-very-very-very-long-arg',
         'short/long opts + long arg')
  opt.on('-6', '-7', '--long-opt-6',
         '--long-opt-7=very-very-very-very-very-very-very-very-long-arg',
         'multiple short/long opts + long arg')
  opt.parse!(ARGV)
}

サマリ表示結果:

noritada[19:17]% ruby foo.rb --help                             terra:~/tmp/opt
Usage: foo [options]
        --long-opt-1=arg             long opt + short arg
    =very-very-very-long-arg         long opt + long arg
        --long-opt-2
    -3=very-very-very-very-very-very-very-very-long-arg
                                     short opt + long arg
    -4, --long-opt-4=arg             short/long opts + short arg
    -5=very-very-very-very-very-very-very-very-long-arg
        --long-opt-5                 short/long opts + long arg
    -6, -7=very-very-very-very-very-very-very-very-long-arg
        --long-opt-6, --long-opt-7   multiple short/long opts + long arg

(long-opt-2 に関する表示が乱れていることが分かります。)

そこで、修正するパッチを作成してみました。
もし適切そうだったら取り込んでいただけませんでしょうか?

-- 
|:  Noritada KOBAYASHI
|:  Dept. of General Systems Studies,
|:  Graduate School of Arts and Sciences, Univ. of Tokyo
|:  E-mail: nori1@dolphin.c.u-tokyo.ac.jp (preferable)
|:          nori@esa.c.u-tokyo.ac.jp
|:  Key fingerprint = AB26 9533 81DA 997B 3C06  4380 19BB ADA0 695C 9F53

Attachments (1)

optparse.diff (410 Bytes, text/x-diff)
--- optparse.rb.org	2007-02-20 15:53:16.000000000 +0900
+++ optparse.rb	2007-11-02 19:26:36.000000000 +0900
@@ -379,7 +379,7 @@
       while s = lopts.shift
         l = left[-1].length + s.length
         l += arg.length if left.size == 1 && arg
-        l < max or left << ''
+        l < max or sopts.empty? or left << ''
         left[-1] << if left[-1].empty? then ' ' * 4 else ', ' end << s
       end
 

In This Thread

Prev Next