mirror of
https://github.com/koalaman/shellcheck.git
synced 2025-08-08 11:14:25 +08:00
SC2249: When verbose, warn about missing default case (fixes #997)
This commit is contained in:
@@ -172,6 +172,7 @@ nodeChecks = [
|
||||
,checkRedirectionToCommand
|
||||
,checkNullaryExpansionTest
|
||||
,checkDollarQuoteParen
|
||||
,checkDefaultCase
|
||||
]
|
||||
|
||||
|
||||
@@ -3202,5 +3203,22 @@ checkDollarQuoteParen params t =
|
||||
where
|
||||
fix id = fixWith [replaceStart id params 2 "\"$"]
|
||||
|
||||
prop_checkDefaultCase1 = verify checkDefaultCase "case $1 in a) true ;; esac"
|
||||
prop_checkDefaultCase2 = verify checkDefaultCase "case $1 in ?*?) true ;; *? ) true ;; esac"
|
||||
prop_checkDefaultCase3 = verifyNot checkDefaultCase "case $1 in x|*) true ;; esac"
|
||||
prop_checkDefaultCase4 = verifyNot checkDefaultCase "case $1 in **) true ;; esac"
|
||||
checkDefaultCase _ t =
|
||||
case t of
|
||||
T_CaseExpression id _ list ->
|
||||
unless (any canMatchAny list) $
|
||||
verbose id 2249 "Consider adding a default *) case, even if it just exits with error."
|
||||
_ -> return ()
|
||||
where
|
||||
canMatchAny (_, list, _) = any canMatchAny' list
|
||||
-- hlint objects to 'pattern' as a variable name
|
||||
canMatchAny' pat = fromMaybe False $ do
|
||||
pg <- wordToExactPseudoGlob pat
|
||||
return $ pseudoGlobIsSuperSetof pg [PGMany]
|
||||
|
||||
return []
|
||||
runTests = $( [| $(forAllProperties) (quickCheckWithResult (stdArgs { maxSuccess = 1 }) ) |])
|
||||
|
@@ -154,6 +154,7 @@ warn id code str = addComment $ makeComment WarningC id code str
|
||||
err id code str = addComment $ makeComment ErrorC id code str
|
||||
info id code str = addComment $ makeComment InfoC id code str
|
||||
style id code str = addComment $ makeComment StyleC id code str
|
||||
verbose id code str = addComment $ makeComment VerboseC id code str
|
||||
|
||||
warnWithFix :: MonadWriter [TokenComment] m => Id -> Code -> String -> Fix -> m ()
|
||||
warnWithFix = addCommentWithFix WarningC
|
||||
|
Reference in New Issue
Block a user