mirror of
https://github.com/koalaman/shellcheck
synced 2025-07-16 10:03:08 -07:00
Check attempts to set variables with 'set'
This commit is contained in:
parent
b2d1aa01f7
commit
3423cde931
1 changed files with 26 additions and 0 deletions
|
@ -185,6 +185,7 @@ nodeChecks = [
|
|||
,checkCatastrophicRm
|
||||
,checkInteractiveSu
|
||||
,checkStderrPipe
|
||||
,checkSetAssignment
|
||||
]
|
||||
|
||||
|
||||
|
@ -2348,3 +2349,28 @@ checkUnpassedInFunctions params root =
|
|||
warnForDeclaration ((name, _, _):_) =
|
||||
warn (getId . fromJust $ Map.lookup name functionMap) 2120 $
|
||||
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…
Add table
Add a link
Reference in a new issue