Don't warn about variables guarded with :+ (fixes #2296)
This commit is contained in:
parent
8c0bf8d41f
commit
c61fc7546e
|
@ -2379,6 +2379,8 @@ prop_checkUnassignedReferences_minusNBraced = verifyNotTree checkUnassignedRefe
|
||||||
prop_checkUnassignedReferences_minusZBraced = verifyNotTree checkUnassignedReferences "if [ -z \"${x}\" ]; then echo \"\"; fi"
|
prop_checkUnassignedReferences_minusZBraced = verifyNotTree checkUnassignedReferences "if [ -z \"${x}\" ]; then echo \"\"; fi"
|
||||||
prop_checkUnassignedReferences_minusNDefault = verifyNotTree checkUnassignedReferences "if [ -n \"${x:-}\" ]; then echo $x; fi"
|
prop_checkUnassignedReferences_minusNDefault = verifyNotTree checkUnassignedReferences "if [ -n \"${x:-}\" ]; then echo $x; fi"
|
||||||
prop_checkUnassignedReferences_minusZDefault = verifyNotTree checkUnassignedReferences "if [ -z \"${x:-}\" ]; then echo \"\"; fi"
|
prop_checkUnassignedReferences_minusZDefault = verifyNotTree checkUnassignedReferences "if [ -z \"${x:-}\" ]; then echo \"\"; fi"
|
||||||
|
prop_checkUnassignedReferences50 = verifyNotTree checkUnassignedReferences "echo ${foo:+bar}"
|
||||||
|
prop_checkUnassignedReferences51 = verifyNotTree checkUnassignedReferences "echo ${foo:+$foo}"
|
||||||
|
|
||||||
checkUnassignedReferences = checkUnassignedReferences' False
|
checkUnassignedReferences = checkUnassignedReferences' False
|
||||||
checkUnassignedReferences' includeGlobals params t = warnings
|
checkUnassignedReferences' includeGlobals params t = warnings
|
||||||
|
@ -2411,8 +2413,8 @@ checkUnassignedReferences' includeGlobals params t = warnings
|
||||||
|
|
||||||
warningForGlobals var place = do
|
warningForGlobals var place = do
|
||||||
match <- getBestMatch var
|
match <- getBestMatch var
|
||||||
return $ warn (getId place) 2153 $
|
return $ info (getId place) 2153 $
|
||||||
"Possible misspelling: " ++ var ++ " may not be assigned, but " ++ match ++ " is."
|
"Possible misspelling: " ++ var ++ " may not be assigned. Did you mean " ++ match ++ "?"
|
||||||
|
|
||||||
warningForLocals var place =
|
warningForLocals var place =
|
||||||
return $ warn (getId place) 2154 $
|
return $ warn (getId place) 2154 $
|
||||||
|
@ -2427,7 +2429,7 @@ checkUnassignedReferences' includeGlobals params t = warnings
|
||||||
|
|
||||||
warningFor (var, place) = do
|
warningFor (var, place) = do
|
||||||
guard $ isVariableName var
|
guard $ isVariableName var
|
||||||
guard . not $ isInArray var place || isGuarded place
|
guard . not $ isException var place || isGuarded place
|
||||||
(if includeGlobals || isLocal var
|
(if includeGlobals || isLocal var
|
||||||
then warningForLocals
|
then warningForLocals
|
||||||
else warningForGlobals) var place
|
else warningForGlobals) var place
|
||||||
|
@ -2436,11 +2438,22 @@ checkUnassignedReferences' includeGlobals params t = warnings
|
||||||
|
|
||||||
-- Due to parsing, foo=( [bar]=baz ) parses 'bar' as a reference even for assoc arrays.
|
-- Due to parsing, foo=( [bar]=baz ) parses 'bar' as a reference even for assoc arrays.
|
||||||
-- Similarly, ${foo[bar baz]} may not be referencing bar/baz. Just skip these.
|
-- Similarly, ${foo[bar baz]} may not be referencing bar/baz. Just skip these.
|
||||||
isInArray var t = any isArray $ getPath (parentMap params) t
|
-- We can also have ${foo:+$foo} should be treated like [[ -n $foo ]] && echo $foo
|
||||||
|
isException var t = any shouldExclude $ getPath (parentMap params) t
|
||||||
where
|
where
|
||||||
isArray T_Array {} = True
|
shouldExclude t =
|
||||||
isArray (T_DollarBraced _ _ l) | var /= getBracedReference (concat $ oversimplify l) = True
|
case t of
|
||||||
isArray _ = False
|
T_Array {} -> True
|
||||||
|
(T_DollarBraced _ _ l) ->
|
||||||
|
let str = concat $ oversimplify l
|
||||||
|
ref = getBracedReference str
|
||||||
|
mod = getBracedModifier str
|
||||||
|
in
|
||||||
|
-- Either we're used as an array index like ${arr[here]}
|
||||||
|
ref /= var ||
|
||||||
|
-- or the reference is guarded by a parent, ${here:+foo$here}
|
||||||
|
"+" `isPrefixOf` mod || ":+" `isPrefixOf` mod
|
||||||
|
_ -> False
|
||||||
|
|
||||||
isGuarded (T_DollarBraced _ _ v) =
|
isGuarded (T_DollarBraced _ _ v) =
|
||||||
rest `matches` guardRegex
|
rest `matches` guardRegex
|
||||||
|
|
Loading…
Reference in New Issue