From 5d72432046917bfeecaa7172197ba1674bbdc21d Mon Sep 17 00:00:00 2001 From: Vidar Holen Date: Sat, 14 Dec 2013 15:27:11 -0800 Subject: [PATCH] If printf string contains %, don't warn about using vars --- ShellCheck/Analytics.hs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/ShellCheck/Analytics.hs b/ShellCheck/Analytics.hs index 864cc74..4c73fa6 100644 --- a/ShellCheck/Analytics.hs +++ b/ShellCheck/Analytics.hs @@ -1005,14 +1005,16 @@ isAssignment _ = False prop_checkPrintfVar1 = verify checkPrintfVar "printf \"Lol: $s\"" prop_checkPrintfVar2 = verifyNot checkPrintfVar "printf 'Lol: $s'" prop_checkPrintfVar3 = verify checkPrintfVar "printf -v cow $(cmd)" +prop_checkPrintfVar4 = verifyNot checkPrintfVar "printf \"%${count}s\" var" checkPrintfVar = checkUnqualifiedCommand "printf" f where f (dashv:var:rest) | getLiteralString dashv == (Just "-v") = f rest f (format:params) = check format f _ = return () check format = - if not $ isLiteral format - then warn (getId format) 2059 $ "Don't use variables in the printf format string. Use printf \"..%s..\" \"$foo\"." - else return () + if '%' `elem` (concat $ deadSimple format) || isLiteral format + then return () + else warn (getId format) 2059 $ + "Don't use variables in the printf format string. Use printf \"..%s..\" \"$foo\"." prop_checkUuoe1 = verify checkUuoe "echo $(date)" prop_checkUuoe1a= verify checkUuoe "echo `date`"