Fix pattern matching error in z=$(echo)

This commit is contained in:
Vidar Holen 2015-01-02 18:06:10 -08:00
parent 7b70500d41
commit c9aa133282
1 changed files with 8 additions and 4 deletions

View File

@ -1520,6 +1520,7 @@ prop_checkUuoeVar4 = verifyNot checkUuoeVar "echo $tmp"
prop_checkUuoeVar5 = verify checkUuoeVar "foo \"$(echo \"$(date) value:\" $value)\"" prop_checkUuoeVar5 = verify checkUuoeVar "foo \"$(echo \"$(date) value:\" $value)\""
prop_checkUuoeVar6 = verifyNot checkUuoeVar "foo \"$(echo files: *.png)\"" prop_checkUuoeVar6 = verifyNot checkUuoeVar "foo \"$(echo files: *.png)\""
prop_checkUuoeVar7 = verifyNot checkUuoeVar "foo $(echo $(bar))" -- covered by 2005 prop_checkUuoeVar7 = verifyNot checkUuoeVar "foo $(echo $(bar))" -- covered by 2005
prop_checkUuoeVar8 = verifyNot checkUuoeVar "#!/bin/sh\nz=$(echo)"
checkUuoeVar _ p = checkUuoeVar _ p =
case p of case p of
T_Backticked id [cmd] -> check id cmd T_Backticked id [cmd] -> check id cmd
@ -1537,10 +1538,13 @@ checkUuoeVar _ p =
check id (T_Pipeline _ _ [T_Redirecting _ _ c]) = warnForEcho id c check id (T_Pipeline _ _ [T_Redirecting _ _ c]) = warnForEcho id c
check _ _ = return () check _ _ = return ()
isCovered first rest = null rest && tokenIsJustCommandOutput first isCovered first rest = null rest && tokenIsJustCommandOutput first
warnForEcho id = checkUnqualifiedCommand "echo" $ \_ vars@(first:rest) -> warnForEcho id = checkUnqualifiedCommand "echo" $ \_ vars ->
unless (isCovered first rest || "-" `isPrefixOf` onlyLiteralString first) $ case vars of
when (all couldBeOptimized vars) $ style id 2116 (first:rest) ->
"Useless echo? Instead of 'cmd $(echo foo)', just use 'cmd foo'." unless (isCovered first rest || "-" `isPrefixOf` onlyLiteralString first) $
when (all couldBeOptimized vars) $ style id 2116
"Useless echo? Instead of 'cmd $(echo foo)', just use 'cmd foo'."
otherwise -> return ()
prop_checkTr1 = verify checkTr "tr [a-f] [A-F]" prop_checkTr1 = verify checkTr "tr [a-f] [A-F]"
prop_checkTr2 = verify checkTr "tr 'a-z' 'A-Z'" prop_checkTr2 = verify checkTr "tr 'a-z' 'A-Z'"