Merge branch 'tacerus-config'
This commit is contained in:
commit
f5758e1789
|
@ -71,6 +71,11 @@ not warn at all, as `ksh` supports decimals in arithmetic contexts.
|
||||||
|
|
||||||
: Don't try to look for .shellcheckrc configuration files.
|
: Don't try to look for .shellcheckrc configuration files.
|
||||||
|
|
||||||
|
--rcfile\ RCFILE
|
||||||
|
|
||||||
|
: Prefer the specified configuration file over searching for one
|
||||||
|
in the default locations.
|
||||||
|
|
||||||
**-o**\ *NAME1*[,*NAME2*...],\ **--enable=***NAME1*[,*NAME2*...]
|
**-o**\ *NAME1*[,*NAME2*...],\ **--enable=***NAME1*[,*NAME2*...]
|
||||||
|
|
||||||
: Enable optional checks. The special name *all* enables all of them.
|
: Enable optional checks. The special name *all* enables all of them.
|
||||||
|
|
|
@ -76,7 +76,8 @@ data Options = Options {
|
||||||
externalSources :: Bool,
|
externalSources :: Bool,
|
||||||
sourcePaths :: [FilePath],
|
sourcePaths :: [FilePath],
|
||||||
formatterOptions :: FormatterOptions,
|
formatterOptions :: FormatterOptions,
|
||||||
minSeverity :: Severity
|
minSeverity :: Severity,
|
||||||
|
rcfile :: Maybe FilePath
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultOptions = Options {
|
defaultOptions = Options {
|
||||||
|
@ -86,7 +87,8 @@ defaultOptions = Options {
|
||||||
formatterOptions = newFormatterOptions {
|
formatterOptions = newFormatterOptions {
|
||||||
foColorOption = ColorAuto
|
foColorOption = ColorAuto
|
||||||
},
|
},
|
||||||
minSeverity = StyleC
|
minSeverity = StyleC,
|
||||||
|
rcfile = Nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
usageHeader = "Usage: shellcheck [OPTIONS...] FILES..."
|
usageHeader = "Usage: shellcheck [OPTIONS...] FILES..."
|
||||||
|
@ -107,6 +109,9 @@ options = [
|
||||||
(NoArg $ Flag "list-optional" "true") "List checks disabled by default",
|
(NoArg $ Flag "list-optional" "true") "List checks disabled by default",
|
||||||
Option "" ["norc"]
|
Option "" ["norc"]
|
||||||
(NoArg $ Flag "norc" "true") "Don't look for .shellcheckrc files",
|
(NoArg $ Flag "norc" "true") "Don't look for .shellcheckrc files",
|
||||||
|
Option "" ["rcfile"]
|
||||||
|
(ReqArg (Flag "rcfile") "RCFILE")
|
||||||
|
"Prefer the specified configuration file over searching for one",
|
||||||
Option "o" ["enable"]
|
Option "o" ["enable"]
|
||||||
(ReqArg (Flag "enable") "check1,check2..")
|
(ReqArg (Flag "enable") "check1,check2..")
|
||||||
"List of optional checks to enable (or 'all')",
|
"List of optional checks to enable (or 'all')",
|
||||||
|
@ -367,6 +372,11 @@ parseOption flag options =
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Flag "rcfile" str -> do
|
||||||
|
return options {
|
||||||
|
rcfile = Just str
|
||||||
|
}
|
||||||
|
|
||||||
Flag "enable" value ->
|
Flag "enable" value ->
|
||||||
let cs = checkSpec options in return options {
|
let cs = checkSpec options in return options {
|
||||||
checkSpec = cs {
|
checkSpec = cs {
|
||||||
|
@ -441,18 +451,33 @@ ioInterface options files = do
|
||||||
fallback :: FilePath -> IOException -> IO FilePath
|
fallback :: FilePath -> IOException -> IO FilePath
|
||||||
fallback path _ = return path
|
fallback path _ = return path
|
||||||
|
|
||||||
|
|
||||||
-- Returns the name and contents of .shellcheckrc for the given file
|
-- Returns the name and contents of .shellcheckrc for the given file
|
||||||
getConfig cache filename = do
|
getConfig cache filename =
|
||||||
path <- normalize filename
|
case rcfile options of
|
||||||
let dir = takeDirectory path
|
Just file -> do
|
||||||
(previousPath, result) <- readIORef cache
|
-- We have a specified rcfile. Ignore normal rcfile resolution.
|
||||||
if dir == previousPath
|
(path, result) <- readIORef cache
|
||||||
then return result
|
if path == "/"
|
||||||
else do
|
then return result
|
||||||
paths <- getConfigPaths dir
|
else do
|
||||||
result <- findConfig paths
|
result <- readConfig file
|
||||||
writeIORef cache (dir, result)
|
when (isNothing result) $
|
||||||
return result
|
hPutStrLn stderr $ "Warning: unable to read --rcfile " ++ file
|
||||||
|
writeIORef cache ("/", result)
|
||||||
|
return result
|
||||||
|
|
||||||
|
Nothing -> do
|
||||||
|
path <- normalize filename
|
||||||
|
let dir = takeDirectory path
|
||||||
|
(previousPath, result) <- readIORef cache
|
||||||
|
if dir == previousPath
|
||||||
|
then return result
|
||||||
|
else do
|
||||||
|
paths <- getConfigPaths dir
|
||||||
|
result <- findConfig paths
|
||||||
|
writeIORef cache (dir, result)
|
||||||
|
return result
|
||||||
|
|
||||||
findConfig paths =
|
findConfig paths =
|
||||||
case paths of
|
case paths of
|
||||||
|
@ -490,7 +515,7 @@ ioInterface options files = do
|
||||||
where
|
where
|
||||||
handler :: FilePath -> IOException -> IO (String, Bool)
|
handler :: FilePath -> IOException -> IO (String, Bool)
|
||||||
handler file err = do
|
handler file err = do
|
||||||
putStrLn $ file ++ ": " ++ show err
|
hPutStrLn stderr $ file ++ ": " ++ show err
|
||||||
return ("", True)
|
return ("", True)
|
||||||
|
|
||||||
andM a b arg = do
|
andM a b arg = do
|
||||||
|
|
Loading…
Reference in New Issue