diff --git a/ShellCheck/ASTLib.hs b/ShellCheck/ASTLib.hs index 8e5b8f6..702a98b 100644 --- a/ShellCheck/ASTLib.hs +++ b/ShellCheck/ASTLib.hs @@ -119,6 +119,11 @@ getLeadingFlags = getFlagsUntil (\x -> x == "--" || (not $ "-" `isPrefixOf` x)) -- Check if a command has a flag. hasFlag cmd str = str `elem` (map snd $ getAllFlags cmd) +-- Is this token a word that starts with a dash? +isFlag token = + case getWordParts token of + T_Literal _ ('-':_) : _ -> True + _ -> False -- Given a T_DollarBraced, return a simplified version of the string contents. bracedString (T_DollarBraced _ l) = concat $ oversimplify l diff --git a/ShellCheck/Checks/Commands.hs b/ShellCheck/Checks/Commands.hs index 80ffed9..ead8efa 100644 --- a/ShellCheck/Checks/Commands.hs +++ b/ShellCheck/Checks/Commands.hs @@ -415,9 +415,13 @@ prop_checkNonportableSignals3 = verifyNot checkNonportableSignals "trap f 14" prop_checkNonportableSignals4 = verify checkNonportableSignals "trap f SIGKILL" prop_checkNonportableSignals5 = verify checkNonportableSignals "trap f 9" prop_checkNonportableSignals6 = verify checkNonportableSignals "trap f stop" +prop_checkNonportableSignals7 = verifyNot checkNonportableSignals "trap 'stop' int" checkNonportableSignals = CommandCheck (Exactly "trap") (f . arguments) where - f = mapM_ check + f args = case args of + first:rest -> unless (isFlag first) $ mapM_ check rest + _ -> return () + check param = potentially $ do str <- getLiteralString param let id = getId param