From 8db220ae43280860f8ec920eea1e66608803d0f9 Mon Sep 17 00:00:00 2001 From: Vidar Holen Date: Sat, 6 Nov 2021 15:37:59 -0700 Subject: [PATCH] Include `local -r` in check-extra-masked-returns (fixes #2362) --- src/ShellCheck/Analytics.hs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/ShellCheck/Analytics.hs b/src/ShellCheck/Analytics.hs index 64ba8a8..244236f 100644 --- a/src/ShellCheck/Analytics.hs +++ b/src/ShellCheck/Analytics.hs @@ -4782,6 +4782,8 @@ prop_checkExtraMaskedReturns31 = verifyNotTree checkExtraMaskedReturns "false < prop_checkExtraMaskedReturns32 = verifyNotTree checkExtraMaskedReturns "false < <(basename \"${BASH_SOURCE[0]}\")" prop_checkExtraMaskedReturns33 = verifyNotTree checkExtraMaskedReturns "{ false || true; } | true" prop_checkExtraMaskedReturns34 = verifyNotTree checkExtraMaskedReturns "{ false || :; } | true" +prop_checkExtraMaskedReturns35 = verifyTree checkExtraMaskedReturns "f() { local -r x=$(false); }" + checkExtraMaskedReturns params t = runNodeAnalysis findMaskingNodes params t where findMaskingNodes _ (T_Arithmetic _ list) = findMaskedNodesInList [list] @@ -4828,8 +4830,13 @@ checkExtraMaskedReturns params t = runNodeAnalysis findMaskingNodes params t isCheckedElsewhere t = hasParent isDeclaringCommand t where isDeclaringCommand t _ = fromMaybe False $ do - basename <- getCommandBasename t - return $ basename `elem` declaringCommands + cmd <- getCommand t + basename <- getCommandBasename cmd + return $ + case basename of + -- local -r x=$(false) is intentionally ignored for SC2155 + "local" | "r" `elem` (map snd $ getAllFlags cmd) -> False + _ -> basename `elem` declaringCommands isHarmlessCommand t = fromMaybe False $ do basename <- getCommandBasename t