boostorg / boostorg/program_options
Confusing behavior when order of long/short options are swapped
- 主要言語
- C++
- スター
- 136
- フォーク
- 117
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
Adding an option like this:
```cpp
desc.add_options()( "h,help", "Print help and exit" );
```
In a simple test program and then trying to use `--help` results in a confusing error:
```
$ ./prog --help
libc++abi.dylib: terminating with uncaught exception of type boost::exception_detail::clone_impl >: unrecognised option '--help'
```
The [documentation](https://www.boost.org/doc/libs/1_66_0/doc/html/boost/program_options/option_description.html) for `option_description::option_description(const char*, const value_semantic*)` says:
> The 'name' parameter is interpreted by the following rules:
> if there's no "," character in 'name', it specifies long name
> otherwise, the part before "," specifies long name and the part after -- short name.
However, it is easy for new users of this library to think that swapping them is OK.
The reason for this limitation isn't clear to me -- presumably, if one is "long" and the other "short", providing them in either order should be OK, and a simple test can tell which is which. In either case, the error message on misuse is needlessly cryptic and could probably be turned into an error thrown from `option_description::option_description`. This seems reasonable, since using `"h,help"` as the option name results in bad behavior regardless: the resulting executable has options `--h` and `-h`.
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
調査の方向性
option_description::option_description(const char*, const value_semantic*) と、文書化されている名前形式のルールから始めます。"h,help" を使って単純なテストプログラムでの動作を再現し、その後、順序を入れ替えた名前を明示的に受け入れるべきか拒否すべきかを判断します。誤った使用によって分かりにくい実行時の動作が発生しなくなり、意図した動作がテストでカバーされれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- cpp
- 領域
- cli
- issue の種類
- バグ
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 35/100