Implement rcfile option
This introduces the "--rcfile" argument which allows a specific shellcheckrc file to be passed. If specified and the given file exists, the default locations will not be searched and the specified file will be used. Signed-off-by: Georg Pfuetzenreuter <mail@georg-pfuetzenreuter.net>
This commit is contained in:
parent
ba86c6363c
commit
1bce426fcf
|
@ -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 :: FilePath
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultOptions = Options {
|
defaultOptions = Options {
|
||||||
|
@ -86,7 +87,8 @@ defaultOptions = Options {
|
||||||
formatterOptions = newFormatterOptions {
|
formatterOptions = newFormatterOptions {
|
||||||
foColorOption = ColorAuto
|
foColorOption = ColorAuto
|
||||||
},
|
},
|
||||||
minSeverity = StyleC
|
minSeverity = StyleC,
|
||||||
|
rcfile = []
|
||||||
}
|
}
|
||||||
|
|
||||||
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 = 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,8 +451,12 @@ 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 = do
|
||||||
|
contents <- readConfig (rcfile options)
|
||||||
|
if isNothing contents
|
||||||
|
then do
|
||||||
path <- normalize filename
|
path <- normalize filename
|
||||||
let dir = takeDirectory path
|
let dir = takeDirectory path
|
||||||
(previousPath, result) <- readIORef cache
|
(previousPath, result) <- readIORef cache
|
||||||
|
@ -453,6 +467,7 @@ ioInterface options files = do
|
||||||
result <- findConfig paths
|
result <- findConfig paths
|
||||||
writeIORef cache (dir, result)
|
writeIORef cache (dir, result)
|
||||||
return result
|
return result
|
||||||
|
else return contents
|
||||||
|
|
||||||
findConfig paths =
|
findConfig paths =
|
||||||
case paths of
|
case paths of
|
||||||
|
|
Loading…
Reference in New Issue