mirror of
https://github.com/koalaman/shellcheck.git
synced 2025-08-11 02:02:54 +08:00
Fixed a series of extglob parsing oddities and edge cases
This commit is contained in:
@@ -789,6 +789,9 @@ prop_readExtglob1 = isOk readExtglob "!(*.mp3)"
|
|||||||
prop_readExtglob2 = isOk readExtglob "!(*.mp3|*.wmv)"
|
prop_readExtglob2 = isOk readExtglob "!(*.mp3|*.wmv)"
|
||||||
prop_readExtglob4 = isOk readExtglob "+(foo \\) bar)"
|
prop_readExtglob4 = isOk readExtglob "+(foo \\) bar)"
|
||||||
prop_readExtglob5 = isOk readExtglob "+(!(foo *(bar)))"
|
prop_readExtglob5 = isOk readExtglob "+(!(foo *(bar)))"
|
||||||
|
prop_readExtglob6 = isOk readExtglob "*(((||))|())"
|
||||||
|
prop_readExtglob7 = isOk readExtglob "*(<>)"
|
||||||
|
prop_readExtglob8 = isOk readExtglob "@(|*())"
|
||||||
readExtglob = called "extglob" $ do
|
readExtglob = called "extglob" $ do
|
||||||
id <- getNextId
|
id <- getNextId
|
||||||
c <- try $ do
|
c <- try $ do
|
||||||
@@ -801,8 +804,19 @@ readExtglob = called "extglob" $ do
|
|||||||
|
|
||||||
readExtglobPart = do
|
readExtglobPart = do
|
||||||
id <- getNextId
|
id <- getNextId
|
||||||
x <- many1 (readNormalWordPart "" <|> readSpacePart)
|
x <- many (readExtglobGroup <|> readNormalWordPart "" <|> readSpacePart <|> readExtglobLiteral)
|
||||||
return $ T_NormalWord id x
|
return $ T_NormalWord id x
|
||||||
|
where
|
||||||
|
readExtglobGroup = do
|
||||||
|
id <- getNextId
|
||||||
|
char '('
|
||||||
|
contents <- readExtglobPart `sepBy` (char '|')
|
||||||
|
char ')'
|
||||||
|
return $ T_Extglob id "" contents
|
||||||
|
readExtglobLiteral = do
|
||||||
|
id <- getNextId
|
||||||
|
str <- many1 (oneOf "<>#;&")
|
||||||
|
return $ T_Literal id str
|
||||||
|
|
||||||
|
|
||||||
readSingleEscaped = do
|
readSingleEscaped = do
|
||||||
|
Reference in New Issue
Block a user