From 157fea73daf28cf4ca624da0a6e8818f09325ed1 Mon Sep 17 00:00:00 2001 From: Vidar Holen Date: Sun, 6 Oct 2013 15:54:31 -0700 Subject: [PATCH] Suggest ./* instead of * for command arguments --- ShellCheck/Analytics.hs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/ShellCheck/Analytics.hs b/ShellCheck/Analytics.hs index 6af4841..617420a 100644 --- a/ShellCheck/Analytics.hs +++ b/ShellCheck/Analytics.hs @@ -133,6 +133,7 @@ basicChecks = [ ,checkDollarBrackets ,checkSshHereDoc ,checkSshCommandString + ,checkGlobsAsOptions ] treeChecks = [ checkUnquotedExpansions @@ -1712,3 +1713,23 @@ checkUnusedAssignments t = snd $ runState (mapM_ checkAssignment flow) [] defaultMap = Map.fromList $ zip internalVariables $ repeat () +prop_checkGlobsAsOptions1 = verify checkGlobsAsOptions "rm *.txt" +prop_checkGlobsAsOptions2 = verify checkGlobsAsOptions "ls ??.*" +prop_checkGlobsAsOptions3 = verifyNot checkGlobsAsOptions "rm -- *.txt" +checkGlobsAsOptions (T_SimpleCommand _ _ args) = + mapM_ check $ takeWhile (not . isEndOfArgs) args + where + check v@(T_NormalWord _ ((T_Glob id s):_)) | s == "*" || s == "?" = + info id $ + "Use ./" ++ (concat $ deadSimple v) + ++ " so names with dashes won't become options." + check _ = return () + + isEndOfArgs t = + case concat $ deadSimple t of + "--" -> True + ":::" -> True + "::::" -> True + _ -> False + +checkGlobsAsOptions _ = return ()