Warn about unicode quotes
This commit is contained in:
parent
34e69556b1
commit
702d57b655
|
@ -38,16 +38,16 @@ import GHC.Exts (sortWith)
|
||||||
|
|
||||||
backslash = char '\\'
|
backslash = char '\\'
|
||||||
linefeed = (optional carriageReturn) >> char '\n'
|
linefeed = (optional carriageReturn) >> char '\n'
|
||||||
singleQuote = char '\''
|
singleQuote = char '\'' <|> unicodeSingleQuote
|
||||||
doubleQuote = char '"'
|
doubleQuote = char '"' <|> unicodeDoubleQuote
|
||||||
variableStart = upper <|> lower <|> oneOf "_"
|
variableStart = upper <|> lower <|> oneOf "_"
|
||||||
variableChars = upper <|> lower <|> digit <|> oneOf "_"
|
variableChars = upper <|> lower <|> digit <|> oneOf "_"
|
||||||
functionChars = variableChars <|> oneOf ":+-"
|
functionChars = variableChars <|> oneOf ":+-"
|
||||||
specialVariable = oneOf "@*#?-$!"
|
specialVariable = oneOf "@*#?-$!"
|
||||||
tokenDelimiter = oneOf "&|;<> \t\n\r" <|> nbsp
|
tokenDelimiter = oneOf "&|;<> \t\n\r" <|> nbsp
|
||||||
quotable = oneOf "|&;<>()$`\\ \"'\t\n\r" <|> nbsp
|
quotable = oneOf "|&;<>()$`\\ \"'\t\n\r" <|> nbsp <|> unicodeDoubleQuote
|
||||||
bracedQuotable = oneOf "}\"$`'"
|
bracedQuotable = oneOf "}\"$`'"
|
||||||
doubleQuotable = oneOf "\"$`"
|
doubleQuotable = oneOf "\"$`" <|> unicodeDoubleQuote
|
||||||
whitespace = oneOf " \t\n" <|> carriageReturn <|> nbsp
|
whitespace = oneOf " \t\n" <|> carriageReturn <|> nbsp
|
||||||
linewhitespace = oneOf " \t" <|> nbsp
|
linewhitespace = oneOf " \t" <|> nbsp
|
||||||
extglobStart = oneOf "?*@!+"
|
extglobStart = oneOf "?*@!+"
|
||||||
|
@ -74,6 +74,18 @@ allspacingOrFail = do
|
||||||
s <- allspacing
|
s <- allspacing
|
||||||
when (null s) $ fail "Expected spaces"
|
when (null s) $ fail "Expected spaces"
|
||||||
|
|
||||||
|
unicodeDoubleQuote = do
|
||||||
|
pos <- getPosition
|
||||||
|
char '\x201C' <|> char '\x201D'
|
||||||
|
parseProblemAt pos WarningC "This is a unicode double quote. Delete and retype it."
|
||||||
|
return '"'
|
||||||
|
|
||||||
|
unicodeSingleQuote = do
|
||||||
|
pos <- getPosition
|
||||||
|
char '\x2018' <|> char '\x2019'
|
||||||
|
parseProblemAt pos WarningC "This is a unicode single quote. Delete and retype it."
|
||||||
|
return '"'
|
||||||
|
|
||||||
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'
|
||||||
|
@ -652,6 +664,7 @@ readProcSub = called "process substitution" $ do
|
||||||
|
|
||||||
prop_readSingleQuoted = isOk readSingleQuoted "'foo bar'"
|
prop_readSingleQuoted = isOk readSingleQuoted "'foo bar'"
|
||||||
prop_readSingleQuoted2 = isWarning readSingleQuoted "'foo bar\\'"
|
prop_readSingleQuoted2 = isWarning readSingleQuoted "'foo bar\\'"
|
||||||
|
prop_readsingleQuoted3 = isWarning readSingleQuoted "\x2018hello\x2019"
|
||||||
readSingleQuoted = called "single quoted string" $ do
|
readSingleQuoted = called "single quoted string" $ do
|
||||||
id <- getNextId
|
id <- getNextId
|
||||||
singleQuote
|
singleQuote
|
||||||
|
@ -703,6 +716,7 @@ subParse pos parser input = do
|
||||||
|
|
||||||
prop_readDoubleQuoted = isOk readDoubleQuoted "\"Hello $FOO\""
|
prop_readDoubleQuoted = isOk readDoubleQuoted "\"Hello $FOO\""
|
||||||
prop_readDoubleQuoted2 = isOk readDoubleQuoted "\"$'\""
|
prop_readDoubleQuoted2 = isOk readDoubleQuoted "\"$'\""
|
||||||
|
prop_readDoubleQuoted3 = isWarning readDoubleQuoted "\x201Chello\x201D"
|
||||||
readDoubleQuoted = called "double quoted string" $ do
|
readDoubleQuoted = called "double quoted string" $ do
|
||||||
id <- getNextId
|
id <- getNextId
|
||||||
doubleQuote
|
doubleQuote
|
||||||
|
|
Loading…
Reference in New Issue