diff --git a/ShellCheck.cabal b/ShellCheck.cabal index 3345e32..ff612ed 100644 --- a/ShellCheck.cabal +++ b/ShellCheck.cabal @@ -80,6 +80,7 @@ library ShellCheck.Formatter.GCC ShellCheck.Formatter.JSON ShellCheck.Formatter.TTY + ShellCheck.Formatter.Quiet ShellCheck.Interface ShellCheck.Parser ShellCheck.Regex diff --git a/shellcheck.1.md b/shellcheck.1.md index 6600613..10f9797 100644 --- a/shellcheck.1.md +++ b/shellcheck.1.md @@ -137,6 +137,12 @@ not warn at all, as `ksh` supports decimals in arithmetic contexts. ... ] +*quiet* + +: Suppress all normal output. Exit with zero if no issues are found, + otherwise exit with one. Stops processing after the first issue. + + # DIRECTIVES ShellCheck directives can be specified as comments in the shell script before a command or block: diff --git a/shellcheck.hs b/shellcheck.hs index 84dee0a..e3487c0 100644 --- a/shellcheck.hs +++ b/shellcheck.hs @@ -27,6 +27,7 @@ import ShellCheck.Formatter.Format import qualified ShellCheck.Formatter.GCC import qualified ShellCheck.Formatter.JSON import qualified ShellCheck.Formatter.TTY +import qualified ShellCheck.Formatter.Quiet import Control.Exception import Control.Monad @@ -125,7 +126,8 @@ formats options = Map.fromList [ ("checkstyle", ShellCheck.Formatter.CheckStyle.format), ("gcc", ShellCheck.Formatter.GCC.format), ("json", ShellCheck.Formatter.JSON.format), - ("tty", ShellCheck.Formatter.TTY.format options) + ("tty", ShellCheck.Formatter.TTY.format options), + ("quiet", ShellCheck.Formatter.Quiet.format options) ] formatList = intercalate ", " names diff --git a/src/ShellCheck/Formatter/Quiet.hs b/src/ShellCheck/Formatter/Quiet.hs new file mode 100644 index 0000000..9ad8b97 --- /dev/null +++ b/src/ShellCheck/Formatter/Quiet.hs @@ -0,0 +1,37 @@ +{- + Copyright 2019 Austin Voecks + + This file is part of ShellCheck. + https://www.shellcheck.net + + ShellCheck is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + ShellCheck is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +-} +module ShellCheck.Formatter.Quiet (format) where + +import ShellCheck.Interface +import ShellCheck.Formatter.Format + +import Control.Monad +import Data.IORef +import System.Exit + +format :: FormatterOptions -> IO Formatter +format options = do + topErrorRef <- newIORef [] + return Formatter { + header = return (), + footer = return (), + onFailure = \ _ _ -> exitFailure, + onResult = \ result _ -> unless (null $ crComments result) exitFailure + }