diff --git a/src/ShellCheck/Analytics.hs b/src/ShellCheck/Analytics.hs index a4e2186a4..db2614bf1 100644 --- a/src/ShellCheck/Analytics.hs +++ b/src/ShellCheck/Analytics.hs @@ -269,6 +269,13 @@ optionalTreeChecks = [ cdNegative = "[[ -e /etc/issue ]]" }, checkRequireDoubleBracket) + ,(newCheckDescription { + cdName = "require-double-equals", + cdDescription = "Require == and warn about = in Bash tests", + cdPositive = "[[ \"$x\" = \"$y\" ]]", + cdNegative = "[[ \"$x\" == \"$y\" ]]" + }, checkRequireDoubleEquals) + ,(newCheckDescription { cdName = "check-set-e-suppressed", cdDescription = "Notify when set -e is suppressed during function invocation", @@ -4718,6 +4725,22 @@ checkRequireDoubleBracket params = _ -> False +prop_checkRequireDoubleEquals1 = verifyTree checkRequireDoubleEquals "[[ \"$x\" = \"$y\" ]]" +prop_checkRequireDoubleEquals2 = verifyTree checkRequireDoubleEquals "[ \"$x\" = \"$y\" ]" +prop_checkRequireDoubleEquals3 = verifyNotTree checkRequireDoubleEquals "[[ \"$x\" == \"$y\" ]]" +prop_checkRequireDoubleEquals4 = verifyNotTree checkRequireDoubleEquals "#!/bin/sh\n[ \"$x\" = \"$y\" ]" +prop_checkRequireDoubleEquals5 = verifyNotTree checkRequireDoubleEquals "#!/bin/ksh\n[[ \"$x\" = \"$y\" ]]" +checkRequireDoubleEquals params = + if shellType params == Bash + then nodeChecksToTreeCheck [check] params + else const [] + where + check _ t = case t of + TC_Binary id _ "=" _ _ -> + style id 2337 "Prefer == over = for string comparisons in Bash tests." + _ -> return () + + prop_checkUnquotedParameterExpansionPattern1 = verify checkUnquotedParameterExpansionPattern "echo \"${var#$x}\"" prop_checkUnquotedParameterExpansionPattern2 = verify checkUnquotedParameterExpansionPattern "echo \"${var%%$(x)}\"" prop_checkUnquotedParameterExpansionPattern3 = verifyNot checkUnquotedParameterExpansionPattern "echo \"${var[#$x]}\""