From 0b5f6b9762c8dd0b27a3c9d2d75f010a5ae638cc Mon Sep 17 00:00:00 2001 From: Vidar Holen Date: Sat, 17 May 2014 09:26:53 -0700 Subject: [PATCH] Warn about aliases referencing $1/$*/$@ --- ShellCheck/Analytics.hs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/ShellCheck/Analytics.hs b/ShellCheck/Analytics.hs index 34566cd..776f29c 100644 --- a/ShellCheck/Analytics.hs +++ b/ShellCheck/Analytics.hs @@ -198,6 +198,7 @@ nodeChecks = [ ,checkMultipleAppends ,checkAliasesExpandEarly ,checkSuspiciousIFS + ,checkAliasesUsesArgs ] @@ -939,6 +940,7 @@ checkSingleQuotedVariables params t@(T_SingleQuoted id s) = ,"zsh" ,"ssh" ,"xprop" + ,"alias" ] || "awk" `isSuffixOf` commandName || "perl" `isPrefixOf` commandName @@ -2744,3 +2746,18 @@ checkSuspiciousIFS params (T_Assignment id Assign "IFS" Nothing value) = _ -> return () suggest r = warn id 2141 $ "Did you mean IFS=" ++ r ++ " ?" checkSuspiciousIFS _ _ = return () + +prop_checkAliasesUsesArgs1 = verify checkAliasesUsesArgs "alias a='cp $1 /a'" +prop_checkAliasesUsesArgs2 = verifyNot checkAliasesUsesArgs "alias $1='foo'" +prop_checkAliasesUsesArgs3 = verify checkAliasesUsesArgs "alias a=\"echo \\${@}\"" +checkAliasesUsesArgs params = + checkUnqualifiedCommand "alias" (const f) + where + re = mkRegex "\\$\\{?[0-9*@]" + f = mapM_ checkArg + checkArg arg = + let string = fromJust $ getLiteralStringExt (const $ return "_") arg in + when ('=' `elem` string && string `matches` re) $ + err (getId arg) 2142 + "Aliases can't use positional parameters. Use a function." +