summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Sima <ben@bsima.me>2024-04-10 19:24:51 -0400
committerBen Sima <ben@bsima.me>2024-04-10 20:31:27 -0400
commit544bf574297b5bcca765e9f495a6bace9d9866cd (patch)
tree38a000c79ae97c34a314eeca38319d29b65038df
parent9bc97d8b5da953761052ca142bdea0662ddb3445 (diff)
Report cli errors on run
This is mostly helpful when debugging or writing programs, not during usage, but I shouldn't be suppressing errors anyway. My first version of this patch used `Biz.Log` instead of `panic`. Unfortunately this exposed a bug in bild: Control/Concurrent/Go.hs (and others) failed to build because it imported `Biz.Cli` which imported `Biz.Log`, and bild couldn't find `Biz/Log.hs`. So apparently my function `detectHaskellImports` doesn't detect all Haskell imports, somewhere along the lines I cut the graph short instead of recursing. I guess that will be a project for another day.
-rw-r--r--Biz/Cli.hs20
1 files changed, 12 insertions, 8 deletions
diff --git a/Biz/Cli.hs b/Biz/Cli.hs
index b3c7583..5029792 100644
--- a/Biz/Cli.hs
+++ b/Biz/Cli.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE NoImplicitPrelude #-}
@@ -33,14 +35,16 @@ data Plan cfg = Plan
main :: Plan cfg -> IO ()
main Plan {..} =
Environment.getArgs
- +> Docopt.parseArgsOrExit help
- +> \args ->
- if args `has` Docopt.command "test"
- then Test.run test
- else
- if args `has` Docopt.longOption "help" || args `has` Docopt.shortOption 'h'
- then Docopt.exitWithUsage help
- else move args
+ /> Docopt.parseArgs help
+ +> \case
+ Left err -> panic <| show err
+ Right args ->
+ if args `has` Docopt.command "test"
+ then Test.run test
+ else
+ if args `has` Docopt.longOption "help" || args `has` Docopt.shortOption 'h'
+ then Docopt.exitWithUsage help
+ else move args
has :: Docopt.Arguments -> Docopt.Option -> Bool
has = Docopt.isPresent