boostorg / boostorg/program_options

Long case insensitive style also makes short case insensitive.

Abierto
#74 1 comentario 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
C++
Estrellas
136
Forks
117
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

When you use the *::long_case_insensitive* style it inadvertently behaves as if you also selected *::short_case_insensitive*.

I noticed this behavior since boost 1.68.0, compiling with 1.67.0 gives the correct result.

In v1.67.0, if you call the test program below like this, `./test -A`, it will give the correct result:

```
Adam is selected: false
Alice is selected: true
```

In v1.68.0 and v1.69.0 it will give the wrong result, as if *::short_case_insensitive* was also selected.:

```
Adam is selected: true
Alice is selected: false
```

Basically the *-A* argument becomes an *-a* argument.

## Example code to illustrate the problem.

```
#include
#include

namespace po = boost::program_options;
namespace po_style = boost::program_options::command_line_style;

int main(int argc, char* argv[]){

bool adamSelected = false;
bool aliceSelected = false;

try{
po::options_description desc("Allowed options");
desc.add_options()
("adam,a", po::value(&adamSelected)->default_value(false)->implicit_value(true),"Choose Adam")
("alice,A", po::value(&aliceSelected)->default_value(false)->implicit_value(true),"Choose Alice")
;

po::variables_map vm;

auto parsed = po::command_line_parser(argc, argv).options(desc).style(po_style::unix_style | po_style::long_case_insensitive).run();
po::store(parsed, vm);

po::notify(vm);

std::cout << "Adam is selected: " << (adamSelected?"true":"false") << std::endl
<< "Alice is selected: " << (aliceSelected?"true":"false") << std::endl;
}
catch(std::exception& e){
std::cerr << e.what() << std::endl;
}
return 0;
}

```

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Línea de trabajo

Empieza reproduciendo el problema con el ejemplo command_line_parser proporcionado, especialmente con ./test -A, y sigue cómo se gestiona long_case_insensitive en la ruta de análisis del estilo de línea de comandos. Se considerará terminado cuando long_case_insensitive ya no haga que las opciones cortas no distingan entre mayúsculas y minúsculas, se conserve la salida esperada de 1.67.0 y exista una prueba de regresión que cubra este comportamiento.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
cpp
Área
cli
Tipo de issue
Error
Dificultad
3/5
Tiempo estimado
1-2 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.