summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVidar Holen <vidar@vidarholen.net>2023-04-30 14:37:37 -0700
committerVidar Holen <vidar@vidarholen.net>2023-04-30 14:49:10 -0700
commit46b678fca8f8aac035d04e676f77f1a92f6742f4 (patch)
tree3e003729f65a33eaaf93e300d7626c3fb05f1998
parent3342902d9a354c71ba72a939af82d535f043d079 (diff)
Minor fixes to POSIX read without variable check
-rw-r--r--src/ShellCheck/Checks/ShellSupport.hs11
1 files changed, 4 insertions, 7 deletions
diff --git a/src/ShellCheck/Checks/ShellSupport.hs b/src/ShellCheck/Checks/ShellSupport.hs
index eda6882..cf8acc9 100644
--- a/src/ShellCheck/Checks/ShellSupport.hs
+++ b/src/ShellCheck/Checks/ShellSupport.hs
@@ -188,6 +188,7 @@ prop_checkBashisms100 = verify checkBashisms "read -r"
prop_checkBashisms101 = verify checkBashisms "read"
prop_checkBashisms102 = verifyNot checkBashisms "read -r foo"
prop_checkBashisms103 = verifyNot checkBashisms "read foo"
+prop_checkBashisms104 = verifyNot checkBashisms "read ''"
checkBashisms = ForShell [Sh, Dash] $ \t -> do
params <- ask
kludge params t
@@ -288,13 +289,6 @@ checkBashisms = ForShell [Sh, Dash] $ \t -> do
argString = concat $ oversimplify arg
flagRegex = mkRegex "^-[eEsn]+$"
- bashism t@(T_SimpleCommand _ _ (cmd:args))
- | t `isCommand` "read" && length (onlyNames args) == 0 =
- warnMsg (getId cmd) 3061 "read without a variable is"
- where
- notFlag arg = head (concat $ oversimplify arg) /= '-'
- onlyNames = filter (notFlag)
-
bashism t@(T_SimpleCommand _ _ (cmd:arg:_))
| getLiteralString cmd == Just "exec" && "-" `isPrefixOf` concat (oversimplify arg) =
warnMsg (getId arg) 3038 "exec flags are"
@@ -390,6 +384,9 @@ checkBashisms = ForShell [Sh, Dash] $ \t -> do
let literal = onlyLiteralString format
guard $ "%q" `isInfixOf` literal
return $ warnMsg (getId format) 3050 "printf %q is"
+
+ when (name == "read" && all isFlag rest) $
+ warnMsg (getId cmd) 3061 "read without a variable is"
where
unsupportedCommands = [
"let", "caller", "builtin", "complete", "compgen", "declare", "dirs", "disown",