From 4243c6a0bf59450f22debb613d2ed64e087e10da Mon Sep 17 00:00:00 2001 From: Vidar Holen Date: Wed, 24 May 2017 19:20:28 -0700 Subject: [PATCH] Treat + like :+ to squash SC2068 --- ShellCheck/Analytics.hs | 8 +++----- ShellCheck/AnalyzerLib.hs | 4 +++- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ShellCheck/Analytics.hs b/ShellCheck/Analytics.hs index 33d81fb..b555f90 100644 --- a/ShellCheck/Analytics.hs +++ b/ShellCheck/Analytics.hs @@ -659,15 +659,12 @@ prop_checkUnquotedDollarAt6 = verifyNot checkUnquotedDollarAt "a=$@" prop_checkUnquotedDollarAt7 = verify checkUnquotedDollarAt "for f in ${var[@]}; do true; done" prop_checkUnquotedDollarAt8 = verifyNot checkUnquotedDollarAt "echo \"${args[@]:+${args[@]}}\"" prop_checkUnquotedDollarAt9 = verifyNot checkUnquotedDollarAt "echo ${args[@]:+\"${args[@]}\"}" +prop_checkUnquotedDollarAt10 = verifyNot checkUnquotedDollarAt "echo ${@+\"$@\"}" checkUnquotedDollarAt p word@(T_NormalWord _ parts) | not $ isStrictlyQuoteFree (parentMap p) word = forM_ (take 1 $ filter isArrayExpansion parts) $ \x -> - unless (isAlternative x) $ + unless (isQuotedAlternativeReference x) $ err (getId x) 2068 "Double quote array expansions to avoid re-splitting elements." - where - -- Fixme: should detect whether the alternative is quoted - isAlternative b@(T_DollarBraced _ t) = ":+" `isInfixOf` bracedString b - isAlternative _ = False checkUnquotedDollarAt _ _ = return () prop_checkConcatenatedDollarAt1 = verify checkConcatenatedDollarAt "echo \"foo$@\"" @@ -1609,6 +1606,7 @@ prop_checkSpacefulness31= verifyNotTree checkSpacefulness "echo \"`echo \\\"$1\\ prop_checkSpacefulness32= verifyNotTree checkSpacefulness "var=$1; [ -v var ]" prop_checkSpacefulness33= verifyTree checkSpacefulness "for file; do echo $file; done" prop_checkSpacefulness34= verifyTree checkSpacefulness "declare foo$n=$1" +prop_checkSpacefulness35= verifyNotTree checkSpacefulness "echo ${1+\"$1\"}" checkSpacefulness params t = doVariableFlowAnalysis readF writeF (Map.fromList defaults) (variableFlow params) diff --git a/ShellCheck/AnalyzerLib.hs b/ShellCheck/AnalyzerLib.hs index 4568fc2..a58111c 100644 --- a/ShellCheck/AnalyzerLib.hs +++ b/ShellCheck/AnalyzerLib.hs @@ -784,8 +784,10 @@ isCountingReference _ = False isQuotedAlternativeReference t = case t of T_DollarBraced _ _ -> - ":+" `isInfixOf` bracedString t + getBracedModifier (bracedString t) `matches` re _ -> False + where + re = mkRegex "(^|\\]):?\\+"