Check attempts to set variables with 'set'
This commit is contained in:
parent
b2d1aa01f7
commit
3423cde931
|
@ -185,6 +185,7 @@ nodeChecks = [
|
||||||
,checkCatastrophicRm
|
,checkCatastrophicRm
|
||||||
,checkInteractiveSu
|
,checkInteractiveSu
|
||||||
,checkStderrPipe
|
,checkStderrPipe
|
||||||
|
,checkSetAssignment
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -2348,3 +2349,28 @@ checkUnpassedInFunctions params root =
|
||||||
warnForDeclaration ((name, _, _):_) =
|
warnForDeclaration ((name, _, _):_) =
|
||||||
warn (getId . fromJust $ Map.lookup name functionMap) 2120 $
|
warn (getId . fromJust $ Map.lookup name functionMap) 2120 $
|
||||||
name ++ " references arguments, but none are ever passed."
|
name ++ " references arguments, but none are ever passed."
|
||||||
|
|
||||||
|
|
||||||
|
prop_checkSetAssignment1 = verify checkSetAssignment "set foo 42"
|
||||||
|
prop_checkSetAssignment2 = verify checkSetAssignment "set foo = 42"
|
||||||
|
prop_checkSetAssignment3 = verify checkSetAssignment "set foo=42"
|
||||||
|
prop_checkSetAssignment4 = verifyNot checkSetAssignment "set -- if=/dev/null"
|
||||||
|
prop_checkSetAssignment5 = verifyNot checkSetAssignment "set 'a=5'"
|
||||||
|
prop_checkSetAssignment6 = verifyNot checkSetAssignment "set"
|
||||||
|
checkSetAssignment params = checkUnqualifiedCommand "set" f
|
||||||
|
where
|
||||||
|
f cmd (var:value:rest) =
|
||||||
|
let str = literal var in
|
||||||
|
when (isVariableName str || isAssignment str) $
|
||||||
|
msg (getId var)
|
||||||
|
f cmd (var:_) =
|
||||||
|
when (isAssignment $ literal var) $
|
||||||
|
msg (getId var)
|
||||||
|
f _ _ = return ()
|
||||||
|
|
||||||
|
msg id = warn id 2121 "To assign a variable, use just 'var=value', no 'set ..'."
|
||||||
|
|
||||||
|
isAssignment str = '=' `elem` str
|
||||||
|
literal (T_NormalWord _ l) = concatMap literal l
|
||||||
|
literal (T_Literal _ str) = str
|
||||||
|
literal _ = "*"
|
||||||
|
|
Loading…
Reference in New Issue