diff --git a/ShellCheck/Parser.hs b/ShellCheck/Parser.hs index 5637eec..31417c5 100644 --- a/ShellCheck/Parser.hs +++ b/ShellCheck/Parser.hs @@ -811,6 +811,9 @@ prop_readNormalWord3 = isOk readNormalWord "foo#" prop_readNormalWord4 = isOk readNormalWord "$\"foo\"$'foo\nbar'" prop_readNormalWord5 = isWarning readNormalWord "${foo}}" prop_readNormalWord6 = isOk readNormalWord "foo/{}" +prop_readNormalWord7 = isOk readNormalWord "foo\\\nbar" +prop_readNormalWord8 = isWarning readSubshell "(foo\\ \nbar)" +prop_readNormalWord9 = isOk readSubshell "(foo\\ ;\nbar)" readNormalWord = readNormalishWord "" readNormalishWord end = do @@ -1090,6 +1093,7 @@ readNormalEscaped = called "escaped char" $ do backslash do next <- quotable <|> oneOf "?*@!+[]{}.,~#" + when (next == ' ') $ checkTrailingSpaces pos <|> return () return $ if next == '\n' then "" else [next] <|> do @@ -1106,6 +1110,11 @@ readNormalEscaped = called "escaped char" $ do escapedChar 'r' = Just "carriage return" escapedChar _ = Nothing + checkTrailingSpaces pos = lookAhead . try $ do + many linewhitespace + void linefeed <|> eof + parseProblemAt pos ErrorC 1101 "Delete trailing spaces after \\ to break line (or use quotes for literal space)." + prop_readExtglob1 = isOk readExtglob "!(*.mp3)" prop_readExtglob2 = isOk readExtglob "!(*.mp3|*.wmv)"