packages feed

optparse-applicative 0.12.0.0 → 0.12.1.0

raw patch · 6 files changed

+52/−40 lines, 6 filesdep ~processdep ~transformersdep ~transformers-compat

Dependency ranges changed: process, transformers, transformers-compat

Files

CHANGELOG.md view
@@ -1,3 +1,17 @@+## Version 0.12.1.0 (18 Jan 2016)++- Updated dependency bounds.++- Improve subparser contexts to improve usage error texts++- Doc++- Fixed bugs+    * \# 164 - Invalid options and invalid arguments after parser has succeeded+               not displaying+    * \# 146 - multi-word filename completion is broken++ ## Version 0.12.0.0 (17 Sep 2015)  - Add "missing" error condition descriptions when required flags and arguments
Options/Applicative/BashCompletion.hs view
@@ -78,6 +78,7 @@   [ "_" ++ progn ++ "()"   , "{"   , "    local cmdline"+  , "    local IFS=$'\n'"   , "    CMDLINE=(--bash-completion-index $COMP_CWORD)"   , ""   , "    for arg in ${COMP_WORDS[@]}; do"
Options/Applicative/Common.hs view
@@ -52,7 +52,7 @@   OptDescStyle (..)   ) where -import Control.Applicative (pure, (<*>), (<$>), (<|>), (<$))+import Control.Applicative (pure, (<*>), (<*), (*>), (<$>), (<|>), (<$)) import Control.Arrow (left) import Control.Monad (guard, mzero, msum, when, liftM) import Control.Monad.Trans.Class (lift)@@ -102,14 +102,13 @@     return result   CmdReader _ f ->     flip fmap (f arg) $ \subp -> StateT $ \args -> do-      setContext (Just arg) subp       prefs <- getPrefs       let runSubparser             | prefBacktrack prefs = \i a ->                 runParser (getPolicy i) (infoParser i) a             | otherwise = \i a             -> (,) <$> runParserInfo i a <*> pure []-      runSubparser subp args+      enterContext arg subp *> runSubparser subp args <* exitContext   _ -> Nothing  optMatches :: MonadP m => Bool -> OptReader a -> OptWord -> Maybe (StateT Args m a)@@ -243,8 +242,9 @@ runParserFully :: MonadP m => ArgPolicy -> Parser a -> Args -> m a runParserFully policy p args = do   (r, args') <- runParser policy p args-  guard $ null args'-  return r+  case args' of+    []  -> return r+    a:_ -> parseError a  -- | The default value of a 'Parser'.  This function returns an error if any of -- the options don't have a default value.@@ -258,13 +258,11 @@       = Left $ Leaf (f (OptHelpInfo m d) opt)       | otherwise       = Left $ MultNode []-evalParser m d f (MultP p1 p2) = case evalParser m d f p1 <*> evalParser m d f p2 of-  Right a -> Right a-  Left _  -> case (evalParser m d f p1, evalParser m d f p2) of-    (Left a', Left b') -> Left $ MultNode [a', b']-    (Left a', _)       -> Left $ MultNode [a']-    (_, Left b')       -> Left $ MultNode [b']-    _                  -> Left $ MultNode []+evalParser m d f (MultP p1 p2) = case (evalParser m d f p1, evalParser m d f p2) of+  (Right a', Right b') -> Right $ a' b'+  (Left a', Left b')   -> Left $ MultNode [a', b']+  (Left a', _)         -> Left $ MultNode [a']+  (_, Left b')         -> Left $ MultNode [b'] evalParser m d f (AltP p1 p2) = case (evalParser m d f p1, evalParser m d f p2) of   (Right a', _)        -> Right a'   (_, Right b')        -> Right b'
Options/Applicative/Extra.hs view
@@ -44,6 +44,9 @@   , help "Show this help text"   , hidden ] +-- | Builder for a command parser with a \"helper\" option attached.+-- Used in the same way as `subparser`, but includes a \"--help|-h\" inside+-- the subcommand. hsubparser :: Mod CommandFields a -> Parser a hsubparser m = mkParser d g rdr   where@@ -133,7 +136,7 @@ -- -- @handleParseResult . Failure $ parserFailure pprefs pinfo ShowHelpText mempty@ parserFailure :: ParserPrefs -> ParserInfo a-              -> ParseError -> Context+              -> ParseError -> [Context]               -> ParserFailure ParserHelp parserFailure pprefs pinfo msg ctx = ParserFailure $ \progn ->   let h = with_context ctx pinfo $ \names pinfo' -> mconcat@@ -149,12 +152,12 @@       ShowHelpText   -> ExitSuccess       InfoMsg  _     -> ExitSuccess -    with_context :: Context+    with_context :: [Context]                  -> ParserInfo a                  -> (forall b . [String] -> ParserInfo b -> c)                  -> c-    with_context NullContext i f = f [] i-    with_context (Context n i) _ f = f n i+    with_context [] i f = f [] i+    with_context c@(Context _ i:_) _ f = f (contextNames c) i      usage_help progn names i = case msg of       InfoMsg _ -> mempty
Options/Applicative/Internal.hs view
@@ -17,6 +17,7 @@   , runCompletion   , SomeParser(..)   , ComplError(..)+  , contextNames    , ListT   , takeListT@@ -35,15 +36,13 @@   (runExcept, runExceptT, withExcept, ExceptT(..), throwE, catchE) import Control.Monad.Trans.Reader   (mapReaderT, runReader, runReaderT, Reader, ReaderT, ask)-import Control.Monad.Trans.Writer (runWriterT, WriterT, tell)-import Control.Monad.Trans.State (StateT, get, put, evalStateT)-import Data.Maybe (maybeToList)-import Data.Monoid (Monoid(..))+import Control.Monad.Trans.State (StateT, get, put, modify, evalStateT, runStateT)  import Options.Applicative.Types  class (Alternative m, MonadPlus m) => MonadP m where-  setContext :: Maybe String -> ParserInfo a -> m ()+  enterContext :: String -> ParserInfo a -> m ()+  exitContext :: m ()   getPrefs :: m ParserPrefs    missingArgP :: ParseError -> Completer -> m a@@ -51,7 +50,7 @@   errorP :: ParseError -> m a   exitP :: Parser b -> Either ParseError a -> m a -newtype P a = P (ExceptT ParseError (WriterT Context (Reader ParserPrefs)) a)+newtype P a = P (ExceptT ParseError (StateT [Context] (Reader ParserPrefs)) a)  instance Functor P where   fmap f (P m) = P $ fmap f m@@ -74,20 +73,16 @@   data Context-  = forall a . Context [String] (ParserInfo a)-  | NullContext--contextNames :: Context -> [String]-contextNames (Context ns _) = ns-contextNames NullContext = []+  = forall a . Context String (ParserInfo a) -instance Monoid Context where-  mempty = NullContext-  mappend c (Context ns i) = Context (contextNames c ++ ns) i-  mappend c _ = c+contextNames :: [Context] -> [String]+contextNames ns =+  let go (Context n _) = n+  in  reverse $ go <$> ns  instance MonadP P where-  setContext name = P . lift . tell . Context (maybeToList name)+  enterContext name pinfo = P $ lift $ modify $ (:) $ Context name pinfo+  exitContext = P $ lift $ modify $ drop 1   getPrefs = P . lift . lift $ ask    missingArgP e _ = errorP e@@ -101,8 +96,8 @@ hoistEither :: MonadP m => Either ParseError a -> m a hoistEither = either errorP return -runP :: P a -> ParserPrefs -> (Either ParseError a, Context)-runP (P p) = runReader . runWriterT . runExceptT $ p+runP :: P a -> ParserPrefs -> (Either ParseError a, [Context])+runP (P p) = runReader . flip runStateT [] . runExceptT $ p  uncons :: [a] -> Maybe (a, [a]) uncons [] = Nothing@@ -165,7 +160,8 @@   mplus (Completion x) (Completion y) = Completion $ mplus x y  instance MonadP Completion where-  setContext _ _ = return ()+  enterContext _ _ = return ()+  exitContext = return ()   getPrefs = Completion $ lift ask    missingArgP _ = Completion . lift . lift . ComplOption
optparse-applicative.cabal view
@@ -1,5 +1,5 @@ name:                optparse-applicative-version:             0.12.0.0+version:             0.12.1.0 synopsis:            Utilities and combinators for parsing command line options description:     Here is a simple example of an applicative option parser:@@ -110,7 +110,7 @@                        Options.Applicative.Internal   ghc-options:         -Wall   build-depends:       base == 4.*,-                       transformers >= 0.2 && < 0.5,-                       transformers-compat >= 0.3 && < 0.5,-                       process >= 1.0 && < 1.4,+                       transformers >= 0.2 && < 0.6,+                       transformers-compat >= 0.3 && < 0.6,+                       process >= 1.0 && < 1.5,                        ansi-wl-pprint >= 0.6.6 && < 0.7