Suppress SC2216 for du --files0-from or --exclude-from (fixes #1286)

This commit is contained in:
Vidar Holen 2020-08-07 14:59:34 -07:00
parent 10c2d827fa
commit 3e50a2fce8
1 changed files with 8 additions and 0 deletions

View File

@ -3305,6 +3305,8 @@ prop_checkPipeToNowhere15 = verifyNot checkPipeToNowhere "ls > foo 2> bar |& gre
prop_checkPipeToNowhere16 = verifyNot checkPipeToNowhere "echo World | cat << EOF\nhello $(cat)\nEOF\n"
prop_checkPipeToNowhere17 = verify checkPipeToNowhere "echo World | cat << 'EOF'\nhello $(cat)\nEOF\n"
prop_checkPipeToNowhere18 = verifyNot checkPipeToNowhere "ls 1>&3 3>&1 3>&- | wc -l"
prop_checkPipeToNowhere19 = verifyNot checkPipeToNowhere "find . -print0 | du --files0-from=/dev/stdin"
prop_checkPipeToNowhere20 = verifyNot checkPipeToNowhere "find . | du --exclude-from=/dev/fd/0"
data PipeType = StdoutPipe | StdoutStderrPipe | NoPipe deriving (Eq)
checkPipeToNowhere :: Parameters -> Token -> WriterT [TokenComment] Identity ()
@ -3324,6 +3326,7 @@ checkPipeToNowhere params t =
name <- getCommandBasename cmd
guard $ name `elem` nonReadingCommands
guard $ not hasConsumers && input /= NoPipe
guard . not $ commandSpecificException name cmd
-- Confusing echo for cat is so common that it's worth a special case
let suggestion =
@ -3366,6 +3369,11 @@ checkPipeToNowhere params t =
outputWarning
mapM_ warnAboutDupes $ Map.assocs fdMap
commandSpecificException name cmd =
case name of
"du" -> any (`elem` ["exclude-from", "files0-from"]) $ lt $ map snd $ getAllFlags cmd
_ -> False
warnAboutDupes (n, list@(_:_:_)) =
forM_ list $ \c -> err (getOpId c) 2261 $
"Multiple redirections compete for " ++ str n ++ ". Use cat, tee, or pass filenames instead."