Fixed up warnings for \r, and added warnings for  

This commit is contained in:
Vidar Holen 2013-06-21 01:22:11 -07:00
parent 5794f3d390
commit 438c4ec572
1 changed files with 14 additions and 6 deletions

View File

@ -36,18 +36,18 @@ import GHC.Exts (sortWith)
backslash = char '\\' backslash = char '\\'
linefeed = char '\n' linefeed = (optional carriageReturn) >> char '\n'
singleQuote = char '\'' singleQuote = char '\''
doubleQuote = char '"' doubleQuote = char '"'
variableStart = upper <|> lower <|> oneOf "_" variableStart = upper <|> lower <|> oneOf "_"
variableChars = upper <|> lower <|> digit <|> oneOf "_" variableChars = upper <|> lower <|> digit <|> oneOf "_"
specialVariable = oneOf "@*#?-$!" specialVariable = oneOf "@*#?-$!"
tokenDelimiter = oneOf "&|;<> \t\n" tokenDelimiter = oneOf "&|;<> \t\n\r" <|> nbsp
quotable = oneOf "|&;<>()$`\\ \"'\t\n" quotable = oneOf "|&;<>()$`\\ \"'\t\n\r" <|> nbsp
bracedQuotable = oneOf "}\"$`'" bracedQuotable = oneOf "}\"$`'"
doubleQuotable = oneOf "\"$`" doubleQuotable = oneOf "\"$`"
whitespace = oneOf " \t\n" whitespace = oneOf " \t\n" <|> carriageReturn <|> nbsp
linewhitespace = oneOf " \t" linewhitespace = oneOf " \t" <|> nbsp
extglobStart = oneOf "?*@!+" extglobStart = oneOf "?*@!+"
prop_spacing = isOk spacing " \\\n # Comment" prop_spacing = isOk spacing " \\\n # Comment"
@ -61,13 +61,18 @@ prop_allspacing2 = isOk allspacing " #foo\n # bar\n#baz\n"
prop_allspacing3 = isOk allspacing "#foo\n#bar\n#baz\n" prop_allspacing3 = isOk allspacing "#foo\n#bar\n#baz\n"
allspacing = do allspacing = do
spacing spacing
x <- option False ((linefeed <|> carriageReturn) >> return True) x <- option False (linefeed >> return True)
when x allspacing when x allspacing
carriageReturn = do carriageReturn = do
parseNote ErrorC "Literal carriage return. Run script through tr -d '\\r' ." parseNote ErrorC "Literal carriage return. Run script through tr -d '\\r' ."
char '\r' char '\r'
nbsp = do
parseNote ErrorC "This is a &nbsp;. Delete it and retype as space."
char '\xA0'
return ' '
--------- Message/position annotation on top of user state --------- Message/position annotation on top of user state
data Note = Note Severity String deriving (Show, Eq) data Note = Note Severity String deriving (Show, Eq)
data ParseNote = ParseNote SourcePos Severity String deriving (Show, Eq) data ParseNote = ParseNote SourcePos Severity String deriving (Show, Eq)
@ -1509,6 +1514,9 @@ readShebang = do
optional linefeed optional linefeed
return str return str
prop_readScript1 = isOk readScript "#!/bin/bash\necho hello world\n"
prop_readScript2 = isWarning readScript "#!/bin/bash\r\necho hello world\n"
prop_readScript3 = isWarning readScript "#!/bin/bash\necho hello\xA0world"
readScript = do readScript = do
id <- getNextId id <- getNextId
sb <- option "" readShebang sb <- option "" readShebang