From fe87b064a2eaa08f2b1c2ee94dac604331157e7c Mon Sep 17 00:00:00 2001 From: tydeu Date: Thu, 30 Sep 2021 20:32:38 -0400 Subject: [PATCH] feat: for most CLI commands, error when given more args than expected --- Lake/Cli.lean | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/Lake/Cli.lean b/Lake/Cli.lean index 01eca055aa..238cc6fb7d 100644 --- a/Lake/Cli.lean +++ b/Lake/Cli.lean @@ -122,18 +122,23 @@ def script (pkg : Package) (name : String) (args : List String) : CliM UInt32 : pkg.scripts.forM fun name _ => IO.println name error s!"unknown script '{name}'" +def noArgsRem (act : CliM UInt32) : CliM UInt32 := do + let args ← takeArgs + if args.isEmpty then act else + error s!"unexpected arguments: {" ".intercalate args}" + def command : (cmd : String) → CliM UInt32 -| "new" => do execIO <| new (← takeArg) -| "init" => do execIO <| init (← takeArg) -| "run" => do script (← loadPkg []) (← takeArg) (← getSubArgs) -| "configure" => do execIO <| configure (← loadPkg (← getSubArgs)) -| "print-paths" => do execIO <| printPaths (← loadPkg (← getSubArgs)) (← takeArgs) -| "build" => do execIO <| build (← loadPkg (← getSubArgs)) -| "build-lib" => do execIO <| buildLib (← loadPkg (← getSubArgs)) -| "build-bin" => do execIO <| buildBin (← loadPkg (← getSubArgs)) -| "clean" => do execIO <| (← loadPkg (← getSubArgs)).clean +| "new" => do noArgsRem <| execIO <| new (← takeArg) +| "init" => do noArgsRem <| execIO <| init (← takeArg) +| "run" => do noArgsRem <| script (← loadPkg []) (← takeArg) (← getSubArgs) +| "configure" => do noArgsRem <| execIO <| configure (← loadPkg (← getSubArgs)) +| "print-paths" => do noArgsRem <| execIO <| printPaths (← loadPkg (← getSubArgs)) (← takeArgs) +| "build" => do noArgsRem <| execIO <| build (← loadPkg (← getSubArgs)) +| "build-lib" => do noArgsRem <| execIO <| buildLib (← loadPkg (← getSubArgs)) +| "build-bin" => do noArgsRem <| execIO <| buildBin (← loadPkg (← getSubArgs)) +| "clean" => do noArgsRem <| execIO <| (← loadPkg (← getSubArgs)).clean | "help" => do output <| help (← takeArg?) -| "self-check" => execIO verifyLeanVersion +| "self-check" => noArgsRem <| execIO verifyLeanVersion | cmd => error s!"unknown command '{cmd}'" def processArgs : CliM UInt32 := do