Don't warn for A&&B||C if C is echo/exit/assignment
This commit is contained in:
parent
4fc518c877
commit
d603ee1e89
|
@ -611,8 +611,16 @@ checkRedirectToSame _ _ = return ()
|
||||||
|
|
||||||
prop_checkShorthandIf = verify checkShorthandIf "[[ ! -z file ]] && scp file host || rm file"
|
prop_checkShorthandIf = verify checkShorthandIf "[[ ! -z file ]] && scp file host || rm file"
|
||||||
prop_checkShorthandIf2 = verifyNot checkShorthandIf "[[ ! -z file ]] && { scp file host || echo 'Eek'; }"
|
prop_checkShorthandIf2 = verifyNot checkShorthandIf "[[ ! -z file ]] && { scp file host || echo 'Eek'; }"
|
||||||
checkShorthandIf (T_AndIf id _ (T_OrIf _ _ _)) =
|
prop_checkShorthandIf3 = verifyNot checkShorthandIf "foo && bar || echo baz"
|
||||||
|
prop_checkShorthandIf4 = verifyNot checkShorthandIf "foo && a=b || a=c"
|
||||||
|
checkShorthandIf (T_AndIf id _ (T_OrIf _ _ (T_Pipeline _ t)))
|
||||||
|
| not $ isOk t =
|
||||||
info id 2015 "Note that A && B || C is not if-then-else. C may run when A is true."
|
info id 2015 "Note that A && B || C is not if-then-else. C may run when A is true."
|
||||||
|
where
|
||||||
|
isOk [t] = isAssignment t || (fromMaybe False $ do
|
||||||
|
name <- getCommandBasename t
|
||||||
|
return $ name `elem` ["echo", "exit"])
|
||||||
|
isOk _ = False
|
||||||
checkShorthandIf _ = return ()
|
checkShorthandIf _ = return ()
|
||||||
|
|
||||||
|
|
||||||
|
@ -987,9 +995,12 @@ getCommandName (T_SimpleCommand _ _ (w:_)) =
|
||||||
getCommandName _ = Nothing
|
getCommandName _ = Nothing
|
||||||
|
|
||||||
getCommandBasename = liftM basename . getCommandName
|
getCommandBasename = liftM basename . getCommandName
|
||||||
|
|
||||||
basename = reverse . (takeWhile (/= '/')) . reverse
|
basename = reverse . (takeWhile (/= '/')) . reverse
|
||||||
|
|
||||||
|
isAssignment (T_Redirecting _ _ w) = isAssignment w
|
||||||
|
isAssignment (T_SimpleCommand _ (w:_) []) = True
|
||||||
|
isAssignment _ = False
|
||||||
|
|
||||||
prop_checkPrintfVar1 = verify checkPrintfVar "printf \"Lol: $s\""
|
prop_checkPrintfVar1 = verify checkPrintfVar "printf \"Lol: $s\""
|
||||||
prop_checkPrintfVar2 = verifyNot checkPrintfVar "printf 'Lol: $s'"
|
prop_checkPrintfVar2 = verifyNot checkPrintfVar "printf 'Lol: $s'"
|
||||||
prop_checkPrintfVar3 = verify checkPrintfVar "printf -v cow $(cmd)"
|
prop_checkPrintfVar3 = verify checkPrintfVar "printf -v cow $(cmd)"
|
||||||
|
|
Loading…
Reference in New Issue