mdoc 0.4.1.0 → 0.4.1.1
raw patch · 6 files changed
+65/−28 lines, 6 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- examples/example.1 +6/−1
- mdoc.cabal +1/−1
- src/Mdoc/Data/Positional.hs +1/−3
- src/Mdoc/Examples/Docker.hs +12/−12
- src/Mdoc/Examples/OptEnvConf.hs +9/−5
- src/OptEnvConf/Mdoc.hs +36/−6
examples/example.1 view
@@ -9,7 +9,8 @@ .Nm .Bk -words .Op Fl v-.Fl i Ar INPUT+.Op Fl a | Fl b+.Op Fl i Ar INPUT .Op Fl Fl debug .Ar FILE .Op Ar FILE ...@@ -17,6 +18,10 @@ .Sh DESCRIPTION The options are as follows: .Bl -tag -width indent+.It Fl a , Fl Fl apple+Use apples+.It Fl b , Fl Fl banana+Use bananas .It Fl i Ar INPUT .It Fl v , Fl Fl verbose .It Fl Fl debug
mdoc.cabal view
@@ -1,6 +1,6 @@ cabal-version: 1.18 name: mdoc-version: 0.4.1.0+version: 0.4.1.1 license: AGPL-3 license-file: COPYING maintainer: Pat Brisbin
src/Mdoc/Data/Positional.hs view
@@ -71,8 +71,6 @@ instance Pretty Positional1 where pretty p = case p.unwrap of- PositionalSwitch f -> case f of- Flag c _ -> pretty c- GNUFlag {} -> pretty $ Flag1 f+ PositionalSwitch f -> pretty $ Flag1 f PositionalOption o -> pretty $ Option1 o PositionalArgument a -> pretty a
src/Mdoc/Examples/Docker.hs view
@@ -16,18 +16,18 @@ {- FOURMOLU_DISABLE -} dockerOpt :: OptEnvConf.Parser ()-dockerOpt = void $ (,,,,,,,,,,,)- <$> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.reader (OptEnvConf.str @Text), OptEnvConf.long "config", OptEnvConf.metavar "string", OptEnvConf.help "Location of client config files", OptEnvConf.value "~/.docker"])- <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.reader (OptEnvConf.str @Text), OptEnvConf.short 'c', OptEnvConf.long "context", OptEnvConf.metavar "string", OptEnvConf.help "Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with \"docker context use\")"])- <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.switch True, OptEnvConf.value False, OptEnvConf.short 'D', OptEnvConf.long "debug", OptEnvConf.help "Enable debug mode"])- <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.reader (OptEnvConf.str @Text), OptEnvConf.short 'H', OptEnvConf.long "host", OptEnvConf.metavar "string", OptEnvConf.help "Daemon socket to connect to"])- <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.reader (OptEnvConf.str @Text), OptEnvConf.short 'l', OptEnvConf.long "log-level", OptEnvConf.metavar "string", OptEnvConf.help "Set the logging level (\"debug\", \"info\", \"warn\", \"error\", \"fatal\")", OptEnvConf.value "info"])- <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.switch True, OptEnvConf.value False, OptEnvConf.long "tls", OptEnvConf.help "Use TLS; implied by --tlsverify"])- <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.reader (OptEnvConf.str @Text), OptEnvConf.long "tlscacert", OptEnvConf.metavar "string", OptEnvConf.help "Trust certs signed only by this CA", OptEnvConf.value "~/.docker/ca.pem"])- <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.reader (OptEnvConf.str @Text), OptEnvConf.long "tlscert", OptEnvConf.metavar "string", OptEnvConf.help "Path to TLS certificate file", OptEnvConf.value "~/.docker/cert.pem"])- <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.reader (OptEnvConf.str @Text), OptEnvConf.long "tlskey", OptEnvConf.metavar "string", OptEnvConf.help "Path to TLS key file", OptEnvConf.value "~/.docker/key.pem"])- <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.switch True, OptEnvConf.value False, OptEnvConf.long "tlsverify", OptEnvConf.help "Use TLS and verify the remote"])- <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.switch True, OptEnvConf.value False, OptEnvConf.short 'v', OptEnvConf.long "version", OptEnvConf.help "Print version information and quit"])+dockerOpt = void $ (,,,,,,,,,,,,)+ <$> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.option, OptEnvConf.reader (OptEnvConf.str @Text), OptEnvConf.long "config", OptEnvConf.metavar "string", OptEnvConf.help "Location of client config files", OptEnvConf.value "~/.docker"])+ <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.option, OptEnvConf.reader (OptEnvConf.str @Text), OptEnvConf.short 'c', OptEnvConf.long "context", OptEnvConf.metavar "string", OptEnvConf.help "Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with \"docker context use\")"])+ <*> OptEnvConf.setting [OptEnvConf.switch True, OptEnvConf.value False, OptEnvConf.short 'D', OptEnvConf.long "debug", OptEnvConf.help "Enable debug mode"]+ <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.option, OptEnvConf.reader (OptEnvConf.str @Text), OptEnvConf.short 'H', OptEnvConf.long "host", OptEnvConf.metavar "string", OptEnvConf.help "Daemon socket to connect to"])+ <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.option, OptEnvConf.reader (OptEnvConf.str @Text), OptEnvConf.short 'l', OptEnvConf.long "log-level", OptEnvConf.metavar "string", OptEnvConf.help "Set the logging level (\"debug\", \"info\", \"warn\", \"error\", \"fatal\")", OptEnvConf.value "info"])+ <*> OptEnvConf.setting [OptEnvConf.switch True, OptEnvConf.value False, OptEnvConf.long "tls", OptEnvConf.help "Use TLS; implied by --tlsverify"]+ <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.option, OptEnvConf.reader (OptEnvConf.str @Text), OptEnvConf.long "tlscacert", OptEnvConf.metavar "string", OptEnvConf.help "Trust certs signed only by this CA", OptEnvConf.value "~/.docker/ca.pem"])+ <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.option, OptEnvConf.reader (OptEnvConf.str @Text), OptEnvConf.long "tlscert", OptEnvConf.metavar "string", OptEnvConf.help "Path to TLS certificate file", OptEnvConf.value "~/.docker/cert.pem"])+ <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.option, OptEnvConf.reader (OptEnvConf.str @Text), OptEnvConf.long "tlskey", OptEnvConf.metavar "string", OptEnvConf.help "Path to TLS key file", OptEnvConf.value "~/.docker/key.pem"])+ <*> OptEnvConf.setting [OptEnvConf.switch True, OptEnvConf.value False, OptEnvConf.long "tlsverify", OptEnvConf.help "Use TLS and verify the remote"]+ <*> OptEnvConf.setting [OptEnvConf.switch True, OptEnvConf.value False, OptEnvConf.short 'v', OptEnvConf.long "version", OptEnvConf.help "Print version information and quit"] <*> OptEnvConf.commands [ OptEnvConf.command "run" "Create and run a new container from an image" runOpt , OptEnvConf.command "exec" "Execute a command in a running container" execOpt
src/Mdoc/Examples/OptEnvConf.hs view
@@ -64,14 +64,18 @@ & name "examplerc" "opt-env-conf example config" {- FOURMOLU_DISABLE -}-exampleParser :: OptEnvConf.Parser (Bool, Bool, Text, Text, [Text])-exampleParser = (,,,,)+exampleParser :: OptEnvConf.Parser ()+exampleParser = void $ (,,,,,) <$> OptEnvConf.setting [OptEnvConf.env "DEBUG", OptEnvConf.conf "debug", OptEnvConf.switch True, OptEnvConf.long "debug", OptEnvConf.help "Enable debug", OptEnvConf.value False , OptEnvConf.example "# enable debug" , OptEnvConf.example "debug: true" ] <*> OptEnvConf.setting [OptEnvConf.conf "verbose", OptEnvConf.switch True, OptEnvConf.short 'v', OptEnvConf.long "verbose", OptEnvConf.value False]- <*> OptEnvConf.setting [OptEnvConf.env "INPUT", OptEnvConf.option, OptEnvConf.reader OptEnvConf.str, OptEnvConf.short 'i', OptEnvConf.metavar "INPUT"]- <*> OptEnvConf.setting [OptEnvConf.conf "file", OptEnvConf.argument, OptEnvConf.reader OptEnvConf.str, OptEnvConf.metavar "FILE"]- <*> OptEnvConf.many (OptEnvConf.setting [OptEnvConf.argument, OptEnvConf.reader OptEnvConf.str, OptEnvConf.metavar "FILE"])+ <*>+ ( OptEnvConf.setting [OptEnvConf.switch True, OptEnvConf.short 'a', OptEnvConf.long "apple", OptEnvConf.value False, OptEnvConf.help "Use apples"]+ <|> OptEnvConf.setting [OptEnvConf.switch True, OptEnvConf.short 'b', OptEnvConf.long "banana", OptEnvConf.value False, OptEnvConf.help "Use bananas"]+ )+ <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.env "INPUT", OptEnvConf.option, OptEnvConf.reader $ OptEnvConf.str @Text, OptEnvConf.short 'i', OptEnvConf.metavar "INPUT"])+ <*> OptEnvConf.setting [OptEnvConf.conf "file", OptEnvConf.argument, OptEnvConf.reader $ OptEnvConf.str @Text, OptEnvConf.metavar "FILE"]+ <*> OptEnvConf.many (OptEnvConf.setting [OptEnvConf.argument, OptEnvConf.reader $ OptEnvConf.str @Text, OptEnvConf.metavar "FILE"]) {- FOURMOLU_ENABLE -}
src/OptEnvConf/Mdoc.hs view
@@ -8,6 +8,38 @@ -- Portability : POSIX -- -- See "Mdoc.Examples.OptEnvConf".+--+-- == Limitations+--+-- "OptEnvConf" uses an /or Nothing/ pattern for both 'optional' and+-- 'some'/'many' cases (unlike @optparse-applicative@, which introduces+-- 'BindNode' specifically to distinguish the latter case.)+--+-- This means we cannot tell the difference and have to decide if this should+-- result in processing that option as optional (showing @[x]@), multiple+-- (showing @x ...@), or both (showing @[x ...]@).+--+-- We cannot get this right, because "OptEnvConf" does not encode the+-- difference. It never includes @...@ in its rendered help or man-pages, so it+-- doesn't need to.+--+-- Therefore, we code for the following outcomes:+--+-- +------------+-----------------+------------------+----------++-- | Modifier | Positional type | Result | Correct? |+-- +============+=================+==================+==========++-- | 'optional' | option | @[option]@ | yes |+-- +------------+-----------------+------------------+----------++-- | 'optional' | argument | @[argument ...]@ | no |+-- +------------+-----------------+------------------+----------++-- | 'many' | option | @[option]@ | no |+-- +------------+-----------------+------------------+----------++-- | 'many' | argument | @argument ...@ | yes |+-- +------------+-----------------+------------------+----------++--+-- Any behavior here is wrong; we do this primarily because a @SYNOPSIS@ with a+-- final @[file ...]@ argument is so common that we would like to render that+-- case in particular correctly. module OptEnvConf.Mdoc ( getPage ) where@@ -105,10 +137,9 @@ pure $ addCommands (zipWith getCommand [1 ..] cdocs) acc AnyDocsAnd ds -> foldM (foldSetDocsM f) acc ds AnyDocsOr [d] -> foldSetDocsM f acc d- -- Optionality represented as "<|> Nothing"- AnyDocsOr [d, AnyDocsSingle Nothing] -> foldSetDocsM fForOr acc d+ AnyDocsOr [d, AnyDocsSingle Nothing] -> foldSetDocsM fAsOrNothing acc d AnyDocsOr ds -> do- sub <- foldM (foldSetDocsM fForOr) mempty $ traceShowId ds+ sub <- foldM (foldSetDocsM f) mempty ds pure $ addAlternation Optional (getPositionals sub) acc AnyDocsSingle Nothing -> pure acc -- hidden/internal AnyDocsSingle (Just d) -> do@@ -124,14 +155,13 @@ , example = exampleMdoc <$> nonEmpty (setDocExamples d) } where- -- This is crazy wrong but I keep adding shit based on test cases- fForOr i m d =+ fAsOrNothing i m d = f i m $ d { optionality = case d.optionality of Required -> Optional o -> o- , multiple = null $ setDocDasheds d.item+ , multiple = setDocTryArgument d.item } exampleMdoc :: NonEmpty String -> Mdoc