combining parsers with overlapping flags
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 25/100
Línea de trabajo
Start by tracing the parser representation around OptP, MultP, AltP, and BindP, then examine how OptName values are collected during parser combination. Compare the requested behavior with the uu-options delimiter approach and determine how overlapping flags should be reported or renamed. Done means combined parsers provide useful help for conflicts without requiring prefixes when no conflict exists.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Could optparse-applicative provide more help when combining parsers that have the same flag names. For example:
mapOptName :: (OptName -> OptName) -> Parser a -> Parser a
mapOptName f (OptP x) = OptP (mapOption x)
where
mapOption :: Option a -> Option a
mapOption (Option r p) = Option (mapReader r) p
mapReader :: OptReader a -> OptReader a
mapReader (OptReader n x y) = OptReader (map f n) x y
mapReader (FlagReader n a) = FlagReader (map f n) a
mapReader x = x
mapOptName f (MultP x y) = MultP (mapOptName f x) (mapOptName f y)
mapOptName f (AltP x y) = AltP (mapOptName f x) (mapOptName f y)
mapOptName f (BindP x y) = BindP (mapOptName f x) (mapOptName f . y)
mapOptName f x = x
addPrefix p (OptShort c) = OptLong (p ++ "-" ++ [c])
addPrefix p (OptLong c) = OptLong (p ++ "-" ++ c)
Lets me write something like:
step :: Parser Step
step = ...
steps :: Parser (Step, Step)
steps = (,) <$> mapOptName (addPrefix "step1") step
<*> mapOptName (addPrefix "step2") step
steps accepts arguments like --step1-x --step2-x if step accepts -x. Ideally the prefix could be left out when there is no conflict, but I think BindP gets in the way of defining a renameOptNames :: ([OptName] -> [OptName]) -> Parser a -> Parser a that sees all OptName at once.
uu-options supports +blah -blah delimiters. See section 5.2 of their techreport
- Lenguaje dominante
- Haskell
- Estrellas
- 957
- Forks
- 124
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de pcapriotti/optparse-applicative
-
Allow QuickCheck 2.17Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 75/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 42/100
pcapriotti/optparse-applicative#524 · 2 comentarios ·
-
Allow replacing commands with metavar when using parserOptionGroupPosiblemente ocupada @tbidne la tomó hace 86 días. Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
pcapriotti/optparse-applicative#523 · 1 comentario · 1 reacción ·
-
Nushell CompletionsAbierto
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
pcapriotti/optparse-applicative#513 · 4 comentarios ·
Todos los issues de pcapriotti/optparse-applicative
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
IntersectMBO/cardano-ledger#6276 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
OpenZeppelin/canton-contracts#92 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
hasura/graphql-engine#10954 ·
Los mantenedores suelen responder en 1 día