boostorg / boostorg/program_options
Confusing behavior when order of long/short options are swapped
- Langage dominant
- C++
- Étoiles
- 136
- Forks
- 117
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
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`.
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Piste de recherche
Commencez par option_description::option_description(const char*, const value_semantic*) et les règles documentées de formatage des noms. Reproduisez le comportement dans le programme de test simple avec "h,help", puis déterminez si les noms inversés doivent être explicitement acceptés ou rejetés. C’est terminé lorsque la mauvaise utilisation ne produit plus le comportement déroutant à l’exécution et que le comportement attendu est couvert par un test.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- cpp
- Domaine
- cli
- Type d'issue
- Bug
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100