From 089537afedded1c17f188ac13ba40310ae41f9c2 Mon Sep 17 00:00:00 2001 From: Vidar Holen Date: Wed, 28 Nov 2012 20:56:27 -0800 Subject: [PATCH] Added parsing support for $'..', which also fixed bug in `\`` --- ShellCheck/Parser.hs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/ShellCheck/Parser.hs b/ShellCheck/Parser.hs index f134419..3f933b2 100644 --- a/ShellCheck/Parser.hs +++ b/ShellCheck/Parser.hs @@ -634,11 +634,11 @@ readBraceEscaped = do readGenericLiteral endExp = do - strings <- many (readGenericEscaped <|> anyChar `reluctantlyTill1` endExp) + strings <- (readGenericEscaped <|> (anyChar >>= \x -> return [x])) `reluctantlyTill` endExp return $ concat strings readGenericLiteral1 endExp = do - strings <- many1 (readGenericEscaped <|> anyChar `reluctantlyTill1` endExp) + strings <- (readGenericEscaped <|> (anyChar >>= \x -> return [x])) `reluctantlyTill1` endExp return $ concat strings readGenericEscaped = do @@ -656,8 +656,15 @@ readBraced = try $ do char '}' return $ T_BraceExpansion id $ concat str -readDollar = readDollarArithmetic <|> readDollarBraced <|> readDollarExpansion <|> readDollarVariable <|> readDollarLonely +readDollar = readDollarArithmetic <|> readDollarBraced <|> readDollarExpansion <|> readDollarVariable <|> readDollarSingleQuote <|> readDollarLonely +prop_readDollarSingleQuote = isOk readDollarSingleQuote "$'foo\\\'lol'" +readDollarSingleQuote = do + id <- getNextId + try $ string "$'" + str <- readGenericLiteral (char '\'') + char '\'' + return $ T_Literal id str readParenLiteralHack = do strs <- (readParenHack <|> (anyChar >>= \x -> return [x])) `reluctantlyTill1` (string "))")