From 6ba1af089845a2c280a24e2dab58129391481175 Mon Sep 17 00:00:00 2001 From: Vidar Holen Date: Fri, 11 Dec 2020 20:28:36 -0800 Subject: [PATCH] Warn when a variable is assigned to itself --- src/ShellCheck/Analytics.hs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/ShellCheck/Analytics.hs b/src/ShellCheck/Analytics.hs index ed626d9..ef1ed2c 100644 --- a/src/ShellCheck/Analytics.hs +++ b/src/ShellCheck/Analytics.hs @@ -193,6 +193,7 @@ nodeChecks = [ ,checkModifiedArithmeticInRedirection ,checkBlatantRecursion ,checkBadTestAndOr + ,checkAssignToSelf ] optionalChecks = map fst optionalTreeChecks @@ -3974,5 +3975,26 @@ checkComparisonWithLeadingX params t = return $ replaceStart id params 2 "'" _ -> Nothing +prop_checkAssignToSelf1 = verify checkAssignToSelf "x=$x" +prop_checkAssignToSelf2 = verify checkAssignToSelf "x=${x}" +prop_checkAssignToSelf3 = verify checkAssignToSelf "x=\"$x\"" +prop_checkAssignToSelf4 = verifyNot checkAssignToSelf "x=$x mycmd" +checkAssignToSelf _ t = + case t of + T_SimpleCommand _ vars [] -> mapM_ check vars + _ -> return () + where + check t = + case t of + T_Assignment id Assign name [] t -> + case getWordParts t of + [T_DollarBraced _ _ b] -> do + when (Just name == getLiteralString b) $ + msg id + _ -> return () + _ -> return () + msg id = info id 2269 "This variable is assigned to itself, so the assignment does nothing." + + return [] runTests = $( [| $(forAllProperties) (quickCheckWithResult (stdArgs { maxSuccess = 1 }) ) |])