fix(SC3013): check POSIX-compliant unary operators for test and [

fix #2125
This commit is contained in:
Eisuke Kawashima 2025-03-25 01:31:06 +09:00
parent d3001f337a
commit d037b9fc7e
No known key found for this signature in database
GPG Key ID: AE0456361ACA5F4B
1 changed files with 15 additions and 0 deletions

View File

@ -218,6 +218,9 @@ prop_checkBashisms124 = verify checkBashisms "#!/bin/dash\ntype -p test"
prop_checkBashisms125 = verifyNot checkBashisms "#!/bin/busybox sh\ntype -p test"
prop_checkBashisms126 = verifyNot checkBashisms "#!/bin/busybox sh\nread -p foo -r bar"
prop_checkBashisms127 = verifyNot checkBashisms "#!/bin/busybox sh\necho -ne foo"
prop_checkBashisms128 = verify checkBashisms "#!/bin/sh\n[ -k /tmp ]"
prop_checkBashisms129 = verifyNot checkBashisms "#!/bin/dash\ntest -k /tmp"
prop_checkBashisms130 = verify checkBashisms "#!/bin/sh\n[ -o errexit ]"
checkBashisms = ForShell [Sh, Dash, BusyboxSh] $ \t -> do
params <- ask
kludge params t
@ -252,6 +255,18 @@ checkBashisms = ForShell [Sh, Dash, BusyboxSh] $ \t -> do
bashism (T_SimpleCommand id _ [asStr -> Just "test", lhs, asStr -> Just op, rhs])
| op `elem` [ "<", ">", "\\<", "\\>", "<=", ">=", "\\<=", "\\>="] =
unless isDash $ warnMsg id 3012 $ "lexicographical " ++ op ++ " is"
bashism (TC_Unary id _ op _)
| op `elem` [ "-k", "-G", "-O" ] =
unless isDash $ warnMsg id 3013 $ op ++ " is"
bashism (T_SimpleCommand id _ [asStr -> Just "test", asStr -> Just op, _])
| op `elem` [ "-k", "-G", "-O" ] =
unless isDash $ warnMsg id 3013 $ op ++ " is"
bashism (TC_Unary id _ op _)
| op `elem` [ "-N", "-o", "-R" ] =
warnMsg id 3013 $ op ++ " is"
bashism (T_SimpleCommand id _ [asStr -> Just "test", asStr -> Just op, _])
| op `elem` [ "-N", "-o", "-R" ] =
warnMsg id 3013 $ op ++ " is"
bashism (TC_Binary id SingleBracket op _ _)
| op `elem` [ "-ot", "-nt", "-ef" ] =
unless isDash $ warnMsg id 3013 $ op ++ " is"