Don't suggest indirection for 'declare var$n=foo'
This commit is contained in:
parent
82c3084438
commit
2688a81526
|
@ -1585,6 +1585,7 @@ prop_checkSpacefulness30= verifyTree checkSpacefulness "file='foo bar'; echo foo
|
||||||
prop_checkSpacefulness31= verifyNotTree checkSpacefulness "echo \"`echo \\\"$1\\\"`\""
|
prop_checkSpacefulness31= verifyNotTree checkSpacefulness "echo \"`echo \\\"$1\\\"`\""
|
||||||
prop_checkSpacefulness32= verifyNotTree checkSpacefulness "var=$1; [ -v var ]"
|
prop_checkSpacefulness32= verifyNotTree checkSpacefulness "var=$1; [ -v var ]"
|
||||||
prop_checkSpacefulness33= verifyTree checkSpacefulness "for file; do echo $file; done"
|
prop_checkSpacefulness33= verifyTree checkSpacefulness "for file; do echo $file; done"
|
||||||
|
prop_checkSpacefulness34= verifyTree checkSpacefulness "declare foo$n=$1"
|
||||||
|
|
||||||
checkSpacefulness params t =
|
checkSpacefulness params t =
|
||||||
doVariableFlowAnalysis readF writeF (Map.fromList defaults) (variableFlow params)
|
doVariableFlowAnalysis readF writeF (Map.fromList defaults) (variableFlow params)
|
||||||
|
|
|
@ -223,10 +223,7 @@ isQuoteFreeNode strict tree t =
|
||||||
TA_Sequence {} -> return True
|
TA_Sequence {} -> return True
|
||||||
T_Arithmetic {} -> return True
|
T_Arithmetic {} -> return True
|
||||||
T_Assignment {} -> return True
|
T_Assignment {} -> return True
|
||||||
T_Redirecting {} -> return $
|
T_Redirecting {} -> return False
|
||||||
if strict then False else
|
|
||||||
-- Not true, just a hack to prevent warning about non-expansion refs
|
|
||||||
any (isCommand t) ["local", "declare", "typeset", "export", "trap", "readonly"]
|
|
||||||
T_DoubleQuoted _ _ -> return True
|
T_DoubleQuoted _ _ -> return True
|
||||||
T_DollarDoubleQuoted _ _ -> return True
|
T_DollarDoubleQuoted _ _ -> return True
|
||||||
T_CaseExpression {} -> return True
|
T_CaseExpression {} -> return True
|
||||||
|
|
|
@ -2328,7 +2328,7 @@ readCompoundListOrEmpty = do
|
||||||
|
|
||||||
readCmdPrefix = many1 (readIoRedirect <|> readAssignmentWord)
|
readCmdPrefix = many1 (readIoRedirect <|> readAssignmentWord)
|
||||||
readCmdSuffix = many1 (readIoRedirect <|> readCmdWord)
|
readCmdSuffix = many1 (readIoRedirect <|> readCmdWord)
|
||||||
readModifierSuffix = many1 (readIoRedirect <|> readAssignmentWord <|> readCmdWord)
|
readModifierSuffix = many1 (readIoRedirect <|> readWellFormedAssignment <|> readCmdWord)
|
||||||
readTimeSuffix = do
|
readTimeSuffix = do
|
||||||
flags <- many readFlag
|
flags <- many readFlag
|
||||||
pipeline <- readPipeline
|
pipeline <- readPipeline
|
||||||
|
@ -2394,12 +2394,16 @@ prop_readAssignmentWord9c= isOk readAssignmentWord "foo= #bar"
|
||||||
prop_readAssignmentWord10= isWarning readAssignmentWord "foo$n=42"
|
prop_readAssignmentWord10= isWarning readAssignmentWord "foo$n=42"
|
||||||
prop_readAssignmentWord11= isOk readAssignmentWord "foo=([a]=b [c] [d]= [e f )"
|
prop_readAssignmentWord11= isOk readAssignmentWord "foo=([a]=b [c] [d]= [e f )"
|
||||||
prop_readAssignmentWord12= isOk readAssignmentWord "a[b <<= 3 + c]='thing'"
|
prop_readAssignmentWord12= isOk readAssignmentWord "a[b <<= 3 + c]='thing'"
|
||||||
readAssignmentWord = try $ do
|
readAssignmentWord = readAssignmentWordExt True
|
||||||
|
readWellFormedAssignment = readAssignmentWordExt False
|
||||||
|
readAssignmentWordExt lenient = try $ do
|
||||||
id <- getNextId
|
id <- getNextId
|
||||||
pos <- getPosition
|
pos <- getPosition
|
||||||
optional (char '$' >> parseNote ErrorC 1066 "Don't use $ on the left side of assignments.")
|
when lenient $
|
||||||
|
optional (char '$' >> parseNote ErrorC 1066 "Don't use $ on the left side of assignments.")
|
||||||
variable <- readVariableName
|
variable <- readVariableName
|
||||||
optional (readNormalDollar >> parseNoteAt pos ErrorC
|
when lenient $
|
||||||
|
optional (readNormalDollar >> parseNoteAt pos ErrorC
|
||||||
1067 "For indirection, use (associative) arrays or 'read \"var$n\" <<< \"value\"'")
|
1067 "For indirection, use (associative) arrays or 'read \"var$n\" <<< \"value\"'")
|
||||||
indices <- many readArrayIndex
|
indices <- many readArrayIndex
|
||||||
hasLeftSpace <- liftM (not . null) spacing
|
hasLeftSpace <- liftM (not . null) spacing
|
||||||
|
|
Loading…
Reference in New Issue