Add function parsingErrorString
parent
8793adcc7d
commit
719d447701
|
@ -83,7 +83,7 @@ runCmdParserWithHelpDesc mProgName input cmdF =
|
||||||
-- any error case.
|
-- any error case.
|
||||||
runCmdParserSimple :: String -> CmdParser Identity out () -> Either String out
|
runCmdParserSimple :: String -> CmdParser Identity out () -> Either String out
|
||||||
runCmdParserSimple s p = case snd $ runCmdParser Nothing (InputString s) p of
|
runCmdParserSimple s p = case snd $ runCmdParser Nothing (InputString s) p of
|
||||||
Left e -> Left $ show e
|
Left e -> Left $ parsingErrorString e
|
||||||
Right desc ->
|
Right desc ->
|
||||||
maybe (Left "command has no implementation") Right $ _cmd_out desc
|
maybe (Left "command has no implementation") Right $ _cmd_out desc
|
||||||
|
|
||||||
|
|
|
@ -38,31 +38,38 @@ mainFromCmdParser :: CmdParser Identity (IO ()) () -> IO ()
|
||||||
mainFromCmdParser cmd = do
|
mainFromCmdParser cmd = do
|
||||||
progName <- System.Environment.getProgName
|
progName <- System.Environment.getProgName
|
||||||
case checkCmdParser (Just progName) cmd of
|
case checkCmdParser (Just progName) cmd of
|
||||||
Left e -> do
|
Left e -> do
|
||||||
putStrErrLn $ progName ++ ": internal error: failed sanity check for butcher main command parser!"
|
putStrErrLn
|
||||||
|
$ progName
|
||||||
|
++ ": internal error: failed sanity check for butcher main command parser!"
|
||||||
putStrErrLn $ "(" ++ e ++ ")"
|
putStrErrLn $ "(" ++ e ++ ")"
|
||||||
putStrErrLn $ "aborting."
|
putStrErrLn $ "aborting."
|
||||||
Right _ -> do
|
Right _ -> do
|
||||||
args <- System.Environment.getArgs
|
args <- System.Environment.getArgs
|
||||||
case runCmdParser (Just progName) (InputArgs args) cmd of
|
case runCmdParser (Just progName) (InputArgs args) cmd of
|
||||||
(desc, Left (ParsingError mess remaining)) -> do
|
(desc, Left (ParsingError mess remaining)) -> do
|
||||||
putStrErrLn $ progName ++ ": error parsing arguments: " ++ head mess
|
putStrErrLn
|
||||||
|
$ progName
|
||||||
|
++ ": error parsing arguments: "
|
||||||
|
++ case mess of
|
||||||
|
[] -> ""
|
||||||
|
(m:_) -> m
|
||||||
putStrErrLn $ case remaining of
|
putStrErrLn $ case remaining of
|
||||||
InputString "" -> "at the end of input."
|
InputString "" -> "at the end of input."
|
||||||
InputString str -> case show str of
|
InputString str -> case show str of
|
||||||
s | length s < 42 -> "at: " ++ s ++ "."
|
s | length s < 42 -> "at: " ++ s ++ "."
|
||||||
s -> "at: " ++ take 40 s ++ "..\"."
|
s -> "at: " ++ take 40 s ++ "..\"."
|
||||||
InputArgs [] -> "at the end of input"
|
InputArgs [] -> "at the end of input"
|
||||||
InputArgs xs -> case List.unwords $ show <$> xs of
|
InputArgs xs -> case List.unwords $ show <$> xs of
|
||||||
s | length s < 42 -> "at: " ++ s ++ "."
|
s | length s < 42 -> "at: " ++ s ++ "."
|
||||||
s -> "at: " ++ take 40 s ++ "..\"."
|
s -> "at: " ++ take 40 s ++ "..\"."
|
||||||
putStrErrLn $ "usage:"
|
putStrErrLn $ "usage:"
|
||||||
printErr $ ppUsage desc
|
printErr $ ppUsage desc
|
||||||
(desc, Right out) -> case _cmd_out out of
|
(desc, Right out ) -> case _cmd_out out of
|
||||||
Nothing -> do
|
Nothing -> do
|
||||||
putStrErrLn $ "usage:"
|
putStrErrLn $ "usage:"
|
||||||
printErr $ ppUsage desc
|
printErr $ ppUsage desc
|
||||||
Just a -> a
|
Just a -> a
|
||||||
|
|
||||||
-- | Same as mainFromCmdParser, but with one additional twist: You get access
|
-- | Same as mainFromCmdParser, but with one additional twist: You get access
|
||||||
-- to a knot-tied complete CommandDesc for this full command. Useful in
|
-- to a knot-tied complete CommandDesc for this full command. Useful in
|
||||||
|
|
|
@ -33,6 +33,7 @@ module UI.Butcher.Monadic.Pretty
|
||||||
, ppUsageWithHelp
|
, ppUsageWithHelp
|
||||||
, ppPartDescUsage
|
, ppPartDescUsage
|
||||||
, ppPartDescHeader
|
, ppPartDescHeader
|
||||||
|
, parsingErrorString
|
||||||
)
|
)
|
||||||
where
|
where
|
||||||
|
|
||||||
|
@ -233,3 +234,21 @@ ppPartDescHeader = \case
|
||||||
where
|
where
|
||||||
rec = ppPartDescHeader
|
rec = ppPartDescHeader
|
||||||
|
|
||||||
|
-- | Simple conversion from 'ParsingError' to 'String'.
|
||||||
|
parsingErrorString :: ParsingError -> String
|
||||||
|
parsingErrorString (ParsingError mess remaining) =
|
||||||
|
"error parsing arguments: " ++ messStr ++ remainingStr
|
||||||
|
where
|
||||||
|
messStr = case mess of
|
||||||
|
[] -> ""
|
||||||
|
(m:_) -> m ++ " "
|
||||||
|
remainingStr = case remaining of
|
||||||
|
InputString "" -> "at the end of input."
|
||||||
|
InputString str -> case show str of
|
||||||
|
s | length s < 42 -> "at: " ++ s ++ "."
|
||||||
|
s -> "at: " ++ take 40 s ++ "..\"."
|
||||||
|
InputArgs [] -> "at the end of input"
|
||||||
|
InputArgs xs -> case List.unwords $ show <$> xs of
|
||||||
|
s | length s < 42 -> "at: " ++ s ++ "."
|
||||||
|
s -> "at: " ++ take 40 s ++ "..\"."
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue