optparse-applicative 0.14.2.0 → 0.14.3.0
raw patch · 6 files changed
+49/−50 lines, 6 filesdep ~QuickCheckdep ~semigroupsPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: QuickCheck, semigroups
API changes (from Hackage documentation)
- Options.Applicative.Builder: instance Data.Semigroup.Semigroup (Options.Applicative.Builder.InfoMod a)
- Options.Applicative.Builder: instance Data.Semigroup.Semigroup Options.Applicative.Builder.PrefsMod
- Options.Applicative.Builder.Internal: instance Data.Semigroup.Semigroup (Options.Applicative.Builder.Internal.DefaultProp a)
- Options.Applicative.Builder.Internal: instance Data.Semigroup.Semigroup (Options.Applicative.Builder.Internal.Mod f a)
- Options.Applicative.Help.Chunk: instance GHC.Base.Monoid a => Data.Semigroup.Semigroup (Options.Applicative.Help.Chunk.Chunk a)
- Options.Applicative.Help.Types: instance Data.Semigroup.Semigroup Options.Applicative.Help.Types.ParserHelp
- Options.Applicative.Internal: tryP :: MonadP m => m a -> m (Either ParseError a)
- Options.Applicative.Types: instance Data.Semigroup.Semigroup Options.Applicative.Types.Completer
- Options.Applicative.Types: instance Data.Semigroup.Semigroup Options.Applicative.Types.ParseError
+ Options.Applicative.Builder: instance GHC.Base.Semigroup (Options.Applicative.Builder.InfoMod a)
+ Options.Applicative.Builder: instance GHC.Base.Semigroup Options.Applicative.Builder.PrefsMod
+ Options.Applicative.Builder.Internal: instance GHC.Base.Semigroup (Options.Applicative.Builder.Internal.DefaultProp a)
+ Options.Applicative.Builder.Internal: instance GHC.Base.Semigroup (Options.Applicative.Builder.Internal.Mod f a)
+ Options.Applicative.Help.Chunk: instance GHC.Base.Monoid a => GHC.Base.Semigroup (Options.Applicative.Help.Chunk.Chunk a)
+ Options.Applicative.Help.Pretty: (<$$>) :: Doc -> Doc -> Doc
+ Options.Applicative.Help.Pretty: (<+>) :: Doc -> Doc -> Doc
+ Options.Applicative.Help.Pretty: (<//>) :: Doc -> Doc -> Doc
+ Options.Applicative.Help.Pretty: (</>) :: Doc -> Doc -> Doc
+ Options.Applicative.Help.Pretty: SChar :: Char -> SimpleDoc -> SimpleDoc
+ Options.Applicative.Help.Pretty: SEmpty :: SimpleDoc
+ Options.Applicative.Help.Pretty: SFail :: SimpleDoc
+ Options.Applicative.Help.Pretty: SLine :: !Int -> SimpleDoc -> SimpleDoc
+ Options.Applicative.Help.Pretty: SSGR :: [SGR] -> SimpleDoc -> SimpleDoc
+ Options.Applicative.Help.Pretty: SText :: !Int -> String -> SimpleDoc -> SimpleDoc
+ Options.Applicative.Help.Pretty: align :: Doc -> Doc
+ Options.Applicative.Help.Pretty: angles :: Doc -> Doc
+ Options.Applicative.Help.Pretty: backslash :: Doc
+ Options.Applicative.Help.Pretty: black :: Doc -> Doc
+ Options.Applicative.Help.Pretty: blue :: Doc -> Doc
+ Options.Applicative.Help.Pretty: bold :: Doc -> Doc
+ Options.Applicative.Help.Pretty: bool :: Bool -> Doc
+ Options.Applicative.Help.Pretty: braces :: Doc -> Doc
+ Options.Applicative.Help.Pretty: brackets :: Doc -> Doc
+ Options.Applicative.Help.Pretty: cat :: [Doc] -> Doc
+ Options.Applicative.Help.Pretty: char :: Char -> Doc
+ Options.Applicative.Help.Pretty: class Pretty a
+ Options.Applicative.Help.Pretty: colon :: Doc
+ Options.Applicative.Help.Pretty: column :: Int -> Doc -> Doc
+ Options.Applicative.Help.Pretty: comma :: Doc
+ Options.Applicative.Help.Pretty: cyan :: Doc -> Doc
+ Options.Applicative.Help.Pretty: data Doc
+ Options.Applicative.Help.Pretty: data SimpleDoc
+ Options.Applicative.Help.Pretty: debold :: Doc -> Doc
+ Options.Applicative.Help.Pretty: deunderline :: Doc -> Doc
+ Options.Applicative.Help.Pretty: displayIO :: Handle -> SimpleDoc -> IO ()
+ Options.Applicative.Help.Pretty: displayS :: SimpleDoc -> ShowS
+ Options.Applicative.Help.Pretty: dot :: Doc
+ Options.Applicative.Help.Pretty: double :: Double -> Doc
+ Options.Applicative.Help.Pretty: dquote :: Doc
+ Options.Applicative.Help.Pretty: dquotes :: Doc -> Doc
+ Options.Applicative.Help.Pretty: dullblack :: Doc -> Doc
+ Options.Applicative.Help.Pretty: dullblue :: Doc -> Doc
+ Options.Applicative.Help.Pretty: dullcyan :: Doc -> Doc
+ Options.Applicative.Help.Pretty: dullgreen :: Doc -> Doc
+ Options.Applicative.Help.Pretty: dullmagenta :: Doc -> Doc
+ Options.Applicative.Help.Pretty: dullred :: Doc -> Doc
+ Options.Applicative.Help.Pretty: dullwhite :: Doc -> Doc
+ Options.Applicative.Help.Pretty: dullyellow :: Doc -> Doc
+ Options.Applicative.Help.Pretty: empty :: Doc
+ Options.Applicative.Help.Pretty: enclose :: Doc -> Doc -> Doc -> Doc
+ Options.Applicative.Help.Pretty: encloseSep :: Doc -> Doc -> Doc -> [Doc] -> Doc
+ Options.Applicative.Help.Pretty: equals :: Doc
+ Options.Applicative.Help.Pretty: fill :: Int -> Doc -> Doc
+ Options.Applicative.Help.Pretty: fillBreak :: Int -> Doc -> Doc
+ Options.Applicative.Help.Pretty: fillCat :: [Doc] -> Doc
+ Options.Applicative.Help.Pretty: fillSep :: [Doc] -> Doc
+ Options.Applicative.Help.Pretty: flatAlt :: Doc -> Doc -> Doc
+ Options.Applicative.Help.Pretty: float :: Float -> Doc
+ Options.Applicative.Help.Pretty: green :: Doc -> Doc
+ Options.Applicative.Help.Pretty: group :: Doc -> Doc
+ Options.Applicative.Help.Pretty: hPutDoc :: Handle -> Doc -> IO ()
+ Options.Applicative.Help.Pretty: hang :: Int -> Doc -> Doc
+ Options.Applicative.Help.Pretty: hardline :: Doc
+ Options.Applicative.Help.Pretty: hcat :: [Doc] -> Doc
+ Options.Applicative.Help.Pretty: hsep :: [Doc] -> Doc
+ Options.Applicative.Help.Pretty: indent :: Int -> Doc -> Doc
+ Options.Applicative.Help.Pretty: infixr 5 </>
+ Options.Applicative.Help.Pretty: infixr 6 <+>
+ Options.Applicative.Help.Pretty: int :: Int -> Doc
+ Options.Applicative.Help.Pretty: integer :: Integer -> Doc
+ Options.Applicative.Help.Pretty: langle :: Doc
+ Options.Applicative.Help.Pretty: lbrace :: Doc
+ Options.Applicative.Help.Pretty: lbracket :: Doc
+ Options.Applicative.Help.Pretty: line :: Doc
+ Options.Applicative.Help.Pretty: linebreak :: Doc
+ Options.Applicative.Help.Pretty: list :: [Doc] -> Doc
+ Options.Applicative.Help.Pretty: lparen :: Doc
+ Options.Applicative.Help.Pretty: magenta :: Doc -> Doc
+ Options.Applicative.Help.Pretty: nest :: Int -> Doc -> Doc
+ Options.Applicative.Help.Pretty: nesting :: Int -> Doc -> Doc
+ Options.Applicative.Help.Pretty: onblack :: Doc -> Doc
+ Options.Applicative.Help.Pretty: onblue :: Doc -> Doc
+ Options.Applicative.Help.Pretty: oncyan :: Doc -> Doc
+ Options.Applicative.Help.Pretty: ondullblack :: Doc -> Doc
+ Options.Applicative.Help.Pretty: ondullblue :: Doc -> Doc
+ Options.Applicative.Help.Pretty: ondullcyan :: Doc -> Doc
+ Options.Applicative.Help.Pretty: ondullgreen :: Doc -> Doc
+ Options.Applicative.Help.Pretty: ondullmagenta :: Doc -> Doc
+ Options.Applicative.Help.Pretty: ondullred :: Doc -> Doc
+ Options.Applicative.Help.Pretty: ondullwhite :: Doc -> Doc
+ Options.Applicative.Help.Pretty: ondullyellow :: Doc -> Doc
+ Options.Applicative.Help.Pretty: ongreen :: Doc -> Doc
+ Options.Applicative.Help.Pretty: onmagenta :: Doc -> Doc
+ Options.Applicative.Help.Pretty: onred :: Doc -> Doc
+ Options.Applicative.Help.Pretty: onwhite :: Doc -> Doc
+ Options.Applicative.Help.Pretty: onyellow :: Doc -> Doc
+ Options.Applicative.Help.Pretty: parens :: Doc -> Doc
+ Options.Applicative.Help.Pretty: plain :: Doc -> Doc
+ Options.Applicative.Help.Pretty: pretty :: Pretty a => a -> Doc
+ Options.Applicative.Help.Pretty: prettyList :: Pretty a => [a] -> Doc
+ Options.Applicative.Help.Pretty: punctuate :: Doc -> [Doc] -> [Doc]
+ Options.Applicative.Help.Pretty: putDoc :: Doc -> IO ()
+ Options.Applicative.Help.Pretty: rangle :: Doc
+ Options.Applicative.Help.Pretty: rational :: Rational -> Doc
+ Options.Applicative.Help.Pretty: rbrace :: Doc
+ Options.Applicative.Help.Pretty: rbracket :: Doc
+ Options.Applicative.Help.Pretty: red :: Doc -> Doc
+ Options.Applicative.Help.Pretty: renderCompact :: Doc -> SimpleDoc
+ Options.Applicative.Help.Pretty: renderPretty :: Float -> Int -> Doc -> SimpleDoc
+ Options.Applicative.Help.Pretty: renderSmart :: Float -> Int -> Doc -> SimpleDoc
+ Options.Applicative.Help.Pretty: rparen :: Doc
+ Options.Applicative.Help.Pretty: semi :: Doc
+ Options.Applicative.Help.Pretty: semiBraces :: [Doc] -> Doc
+ Options.Applicative.Help.Pretty: sep :: [Doc] -> Doc
+ Options.Applicative.Help.Pretty: softbreak :: Doc
+ Options.Applicative.Help.Pretty: softline :: Doc
+ Options.Applicative.Help.Pretty: space :: Doc
+ Options.Applicative.Help.Pretty: squote :: Doc
+ Options.Applicative.Help.Pretty: squotes :: Doc -> Doc
+ Options.Applicative.Help.Pretty: string :: String -> Doc
+ Options.Applicative.Help.Pretty: text :: String -> Doc
+ Options.Applicative.Help.Pretty: tupled :: [Doc] -> Doc
+ Options.Applicative.Help.Pretty: underline :: Doc -> Doc
+ Options.Applicative.Help.Pretty: vcat :: [Doc] -> Doc
+ Options.Applicative.Help.Pretty: vsep :: [Doc] -> Doc
+ Options.Applicative.Help.Pretty: white :: Doc -> Doc
+ Options.Applicative.Help.Pretty: width :: Doc -> Int -> Doc -> Doc
+ Options.Applicative.Help.Pretty: yellow :: Doc -> Doc
+ Options.Applicative.Help.Types: instance GHC.Base.Semigroup Options.Applicative.Help.Types.ParserHelp
+ Options.Applicative.Types: instance GHC.Base.Semigroup Options.Applicative.Types.Completer
+ Options.Applicative.Types: instance GHC.Base.Semigroup Options.Applicative.Types.ParseError
- Options.Applicative: CompletionResult :: (String -> IO String) -> CompletionResult
+ Options.Applicative: CompletionResult :: String -> IO String -> CompletionResult
- Options.Applicative: ParserFailure :: (String -> (h, ExitCode, Int)) -> ParserFailure h
+ Options.Applicative: ParserFailure :: String -> (h, ExitCode, Int) -> ParserFailure h
- Options.Applicative.Builder.Internal: OptionFields :: [OptName] -> Completer -> (String -> ParseError) -> OptionFields a
+ Options.Applicative.Builder.Internal: OptionFields :: [OptName] -> Completer -> String -> ParseError -> OptionFields a
- Options.Applicative.Extra: CompletionResult :: (String -> IO String) -> CompletionResult
+ Options.Applicative.Extra: CompletionResult :: String -> IO String -> CompletionResult
- Options.Applicative.Extra: ParserFailure :: (String -> (h, ExitCode, Int)) -> ParserFailure h
+ Options.Applicative.Extra: ParserFailure :: String -> (h, ExitCode, Int) -> ParserFailure h
- Options.Applicative.Types: Completer :: (String -> IO [String]) -> Completer
+ Options.Applicative.Types: Completer :: String -> IO [String] -> Completer
- Options.Applicative.Types: CompletionResult :: (String -> IO String) -> CompletionResult
+ Options.Applicative.Types: CompletionResult :: String -> IO String -> CompletionResult
- Options.Applicative.Types: ParserFailure :: (String -> (h, ExitCode, Int)) -> ParserFailure h
+ Options.Applicative.Types: ParserFailure :: String -> (h, ExitCode, Int) -> ParserFailure h
- Options.Applicative.Types: ParserM :: (forall x. (r -> Parser x) -> Parser x) -> ParserM r
+ Options.Applicative.Types: ParserM :: forall x. (r -> Parser x) -> Parser x -> ParserM r
Files
- CHANGELOG.md +8/−0
- Options/Applicative/Common.hs +7/−13
- Options/Applicative/Internal.hs +1/−4
- README.md +3/−3
- optparse-applicative.cabal +24/−24
- tests/test.hs +6/−6
CHANGELOG.md view
@@ -1,3 +1,11 @@+## Version 0.14.3.0 (03 Oct 2018)++- Updated dependency bounds.++- Fix tab completion with Commands being unreachable.++- Clean ups and Documentation.+ ## Version 0.14.2.0 (26 Feb 2018) - Updated dependency bounds.
Options/Applicative/Common.hs view
@@ -274,7 +274,7 @@ | otherwise = MultNode [] go m d r f (MultP p1 p2) = MultNode [go m d r f p1, go m d r' f p2]- where r' = r || has_positional p1+ where r' = r || hasArg p1 go m d r f (AltP p1 p2) = AltNode [go m d' r f p1, go m d' r f p2] where d' = d || has_default p1 || has_default p2 go _ d r f (BindP p k) =@@ -283,18 +283,12 @@ Nothing -> go' Just aa -> MultNode [ go', go True d r f (k aa) ] - has_positional :: Parser a -> Bool- has_positional (NilP _) = False- has_positional (OptP p) = (is_positional . optMain) p- has_positional (MultP p1 p2) = has_positional p1 || has_positional p2- has_positional (AltP p1 p2) = has_positional p1 || has_positional p2- has_positional (BindP p _) = has_positional p-- is_positional :: OptReader a -> Bool- is_positional (OptReader {}) = False- is_positional (FlagReader {}) = False- is_positional (ArgReader {}) = True- is_positional (CmdReader {}) = True+ hasArg :: Parser a -> Bool+ hasArg (NilP _) = False+ hasArg (OptP p) = (isArg . optMain) p+ hasArg (MultP p1 p2) = hasArg p1 || hasArg p2+ hasArg (AltP p1 p2) = hasArg p1 || hasArg p2+ hasArg (BindP p _) = hasArg p simplify :: OptTree a -> OptTree a
Options/Applicative/Internal.hs view
@@ -30,7 +30,7 @@ import Control.Monad (MonadPlus(..), liftM, ap, guard) import Control.Monad.Trans.Class (MonadTrans, lift) import Control.Monad.Trans.Except- (runExcept, runExceptT, withExcept, ExceptT(..), throwE, catchE)+ (runExcept, runExceptT, withExcept, ExceptT(..), throwE) import Control.Monad.Trans.Reader (mapReaderT, runReader, runReaderT, Reader, ReaderT, ask) import Control.Monad.Trans.State (StateT, get, put, modify, evalStateT, runStateT)@@ -43,7 +43,6 @@ getPrefs :: m ParserPrefs missingArgP :: ParseError -> Completer -> m a- tryP :: m a -> m (Either ParseError a) errorP :: ParseError -> m a exitP :: IsCmdStart -> ArgPolicy -> Parser b -> Maybe a -> m a @@ -79,7 +78,6 @@ getPrefs = P . lift . lift $ ask missingArgP e _ = errorP e- tryP (P p) = P $ lift $ runExceptT p exitP i _ p = P . maybe (throwE . MissingError i . SomeParser $ p) return errorP = P . throwE @@ -152,7 +150,6 @@ getPrefs = Completion $ lift ask missingArgP _ = Completion . lift . lift . ComplOption- tryP (Completion p) = Completion $ catchE (Right <$> p) (return . Left) exitP _ a p _ = Completion . lift . lift $ ComplParser (SomeParser p) a errorP = Completion . throwE
README.md view
@@ -238,7 +238,7 @@ -q --target world It is this property which leads us to an Applicative interface-instead of a Monadic one, as all option must be considered in+instead of a Monadic one, as all options must be considered in parallel, and can not depend on the output of other options. Note, however, that the order of sequencing is still somewhat@@ -475,8 +475,8 @@ Another interesting use for the `flag'` builder is to count the number of instances on the command line, for example, verbosity-settings could be specified on a scale; the following parser with-count the number of of instances of `-v` on the command line.+settings could be specified on a scale; the following parser will+count the number of instances of `-v` on the command line. ```haskell length <$> many (flag' () (short 'v'))
optparse-applicative.cabal view
@@ -1,5 +1,5 @@ name: optparse-applicative-version: 0.14.2.0+version: 0.14.3.0 synopsis: Utilities and combinators for parsing command line options description: optparse-applicative is a haskell library for parsing options@@ -24,11 +24,6 @@ cabal-version: >= 1.8 extra-source-files: CHANGELOG.md README.md- tests/Examples/Alternatives.hs- tests/Examples/Cabal.hs- tests/Examples/Commands.hs- tests/Examples/Hello.hs- tests/Examples/Formatting.hs tests/alt.err.txt tests/cabal.err.txt tests/carry.err.txt@@ -57,23 +52,22 @@ if impl(ghc >= 8.0) ghc-options: -Wno-redundant-constraints -Wcompat -Wnoncanonical-monad-instances -Wnoncanonical-monadfail-instances - exposed-modules: Options.Applicative,- Options.Applicative.Arrows,- Options.Applicative.BashCompletion,- Options.Applicative.Builder,- Options.Applicative.Builder.Completer,- Options.Applicative.Builder.Internal,- Options.Applicative.Common,- Options.Applicative.Extra,- Options.Applicative.Help,- Options.Applicative.Help.Chunk,- Options.Applicative.Help.Core,- Options.Applicative.Help.Levenshtein,- Options.Applicative.Help.Pretty,- Options.Applicative.Help.Types,- Options.Applicative.Types,- Options.Applicative.Internal-+ exposed-modules: Options.Applicative+ , Options.Applicative.Arrows+ , Options.Applicative.BashCompletion+ , Options.Applicative.Builder+ , Options.Applicative.Builder.Completer+ , Options.Applicative.Builder.Internal+ , Options.Applicative.Common+ , Options.Applicative.Extra+ , Options.Applicative.Help+ , Options.Applicative.Help.Chunk+ , Options.Applicative.Help.Core+ , Options.Applicative.Help.Levenshtein+ , Options.Applicative.Help.Pretty+ , Options.Applicative.Help.Types+ , Options.Applicative.Types+ , Options.Applicative.Internal build-depends: base == 4.* , transformers >= 0.2 && < 0.6@@ -95,10 +89,16 @@ hs-source-dirs: tests + other-modules: Examples.Alternatives+ , Examples.Cabal+ , Examples.Commands+ , Examples.Formatting+ , Examples.Hello+ build-depends: base , bytestring == 0.10.* , optparse-applicative- , QuickCheck >= 2.8 && < 2.12+ , QuickCheck >= 2.8 && < 2.13 if !impl(ghc >= 8) build-depends: semigroups
tests/test.hs view
@@ -649,16 +649,16 @@ prop_suggest :: Property prop_suggest = once $- let p2 = subparser (command "reachable" (info (pure ()) idm))- p1 = subparser (command "unreachable" (info (pure ()) idm))- p = (,) <$> p2 <*> p1+ let p2 = subparser (command "first" (info (pure ()) idm))+ p1 = subparser (command "fst" (info (pure ()) idm))+ p3 = subparser (command "far-off" (info (pure ()) idm))+ p = p2 *> p1 *> p3 i = info p idm- result = run i ["ureachable"]+ result = run i ["fist"] in assertError result $ \failure -> let (msg, _) = renderFailure failure "prog" in counterexample msg- $ isInfixOf "Did you mean this?\n reachable" msg- .&. not (isInfixOf "unreachable" msg)+ $ isInfixOf "Did you mean one of these?\n first\n fst" msg prop_bytestring_reader :: Property prop_bytestring_reader = once $