Skip to content

Commit 4949444

Browse files
committed
Don't silently ignore superfluous command line arguments
1 parent 587d779 commit 4949444

1 file changed

Lines changed: 15 additions & 7 deletions

File tree

GHCMod.hs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ parseArgs spec argv
7777
----------------------------------------------------------------
7878

7979
data GHCModError = SafeList
80+
| TooManyArguments String
8081
| NoSuchCommand String
8182
| CmdArg [String]
8283
| FileNotExist String deriving (Show, Typeable)
@@ -100,15 +101,19 @@ main = flip catches handlers $ do
100101
cmdArg2 = cmdArg !. 2
101102
cmdArg3 = cmdArg !. 3
102103
cmdArg4 = cmdArg !. 4
104+
remainingArgs = tail cmdArg
105+
nArgs n f = if length remainingArgs == n
106+
then f
107+
else throw (TooManyArguments cmdArg0)
103108
res <- case cmdArg0 of
104-
"browse" -> concat <$> mapM (browseModule opt) (tail cmdArg)
109+
"browse" -> concat <$> mapM (browseModule opt) remainingArgs
105110
"list" -> listModules opt
106-
"check" -> withFile (checkSyntax opt cradle) cmdArg1
107-
"expand" -> withFile (checkSyntax opt { expandSplice = True } cradle) cmdArg1
108-
"debug" -> withFile (debugInfo opt cradle strVer) cmdArg1
109-
"type" -> withFile (typeExpr opt cradle cmdArg2 (read cmdArg3) (read cmdArg4)) cmdArg1
110-
"info" -> withFile (infoExpr opt cradle cmdArg2 cmdArg3) cmdArg1
111-
"lint" -> withFile (lintSyntax opt) cmdArg1
111+
"check" -> nArgs 1 $ withFile (checkSyntax opt cradle) cmdArg1
112+
"expand" -> nArgs 1 $ withFile (checkSyntax opt { expandSplice = True } cradle) cmdArg1
113+
"debug" -> nArgs 1 $ withFile (debugInfo opt cradle strVer) cmdArg1
114+
"type" -> nArgs 4 $ withFile (typeExpr opt cradle cmdArg2 (read cmdArg3) (read cmdArg4)) cmdArg1
115+
"info" -> nArgs 3 $ withFile (infoExpr opt cradle cmdArg2 cmdArg3) cmdArg1
116+
"lint" -> nArgs 1 $ withFile (lintSyntax opt) cmdArg1
112117
"lang" -> listLanguages opt
113118
"flag" -> listFlags opt
114119
"boot" -> do
@@ -125,6 +130,9 @@ main = flip catches handlers $ do
125130
handler1 = print -- for debug
126131
handler2 :: GHCModError -> IO ()
127132
handler2 SafeList = printUsage
133+
handler2 (TooManyArguments cmd) = do
134+
hPutStrLn stderr $ "\"" ++ cmd ++ "\": Too many arguments"
135+
printUsage
128136
handler2 (NoSuchCommand cmd) = do
129137
hPutStrLn stderr $ "\"" ++ cmd ++ "\" not supported"
130138
printUsage

0 commit comments

Comments
 (0)