mirror of
https://github.com/koalaman/shellcheck.git
synced 2025-08-07 22:38:50 +08:00
Parse let arguments as arithmetic expressions.
This commit is contained in:
@@ -1195,12 +1195,20 @@ prop_checkArithmeticDeref4 = verifyNot checkArithmeticDeref "(( ! $? ))"
|
||||
prop_checkArithmeticDeref5 = verifyNot checkArithmeticDeref "(($1))"
|
||||
prop_checkArithmeticDeref6 = verify checkArithmeticDeref "(( a[$i] ))"
|
||||
prop_checkArithmeticDeref7 = verifyNot checkArithmeticDeref "(( 10#$n ))"
|
||||
prop_checkArithmeticDeref8 = verifyNot checkArithmeticDeref "let i=$i+1"
|
||||
checkArithmeticDeref params t@(TA_Expansion _ [T_DollarBraced id l]) =
|
||||
unless (excepting $ bracedString l) $
|
||||
unless ((isException $ bracedString l) || (not isNormal)) $
|
||||
style id 2004 "$ on variables in (( )) is unnecessary."
|
||||
where
|
||||
excepting [] = True
|
||||
excepting s = any (`elem` "/.:#%?*@") s || isDigit (head s)
|
||||
isException [] = True
|
||||
isException s = any (`elem` "/.:#%?*@") s || isDigit (head s)
|
||||
isNormal = fromMaybe True $ msum $ map isNormalContext $ (parents params t)
|
||||
isNormalContext t =
|
||||
case t of
|
||||
T_Arithmetic {} -> return True
|
||||
T_DollarArithmetic {} -> return True
|
||||
T_SimpleCommand {} -> return False
|
||||
_ -> fail "Irrelevant"
|
||||
checkArithmeticDeref _ _ = return ()
|
||||
|
||||
prop_checkArithmeticBadOctal1 = verify checkArithmeticBadOctal "(( 0192 ))"
|
||||
@@ -2265,6 +2273,7 @@ prop_checkUnused15= verifyNotTree checkUnusedAssignments "x=(1); n=0; (( x[n] ))
|
||||
prop_checkUnused16= verifyNotTree checkUnusedAssignments "foo=5; declare -x foo"
|
||||
prop_checkUnused17= verifyNotTree checkUnusedAssignments "read -i 'foo' -e -p 'Input: ' bar; $bar;"
|
||||
prop_checkUnused18= verifyNotTree checkUnusedAssignments "a=1; arr=( [$a]=42 ); echo \"${arr[@]}\""
|
||||
prop_checkUnused19= verifyNotTree checkUnusedAssignments "a=1; let b=a+1; echo $b"
|
||||
checkUnusedAssignments params t = snd $ runWriter (mapM_ checkAssignment flow)
|
||||
where
|
||||
flow = variableFlow params
|
||||
|
Reference in New Issue
Block a user