Improve parsing of line breaks in for statements (#926)
This commit is contained in:
parent
8184ef1e8b
commit
a3c6aff0fb
|
@ -2131,6 +2131,7 @@ prop_readForClause8 = isOk readForClause "for ((;;)) ; do echo $i\ndone"
|
||||||
prop_readForClause9 = isOk readForClause "for i do true; done"
|
prop_readForClause9 = isOk readForClause "for i do true; done"
|
||||||
prop_readForClause10= isOk readForClause "for ((;;)) { true; }"
|
prop_readForClause10= isOk readForClause "for ((;;)) { true; }"
|
||||||
prop_readForClause12= isWarning readForClause "for $a in *; do echo \"$a\"; done"
|
prop_readForClause12= isWarning readForClause "for $a in *; do echo \"$a\"; done"
|
||||||
|
prop_readForClause13= isOk readForClause "for foo\nin\\\n bar\\\n baz\ndo true; done"
|
||||||
readForClause = called "for loop" $ do
|
readForClause = called "for loop" $ do
|
||||||
pos <- getPosition
|
pos <- getPosition
|
||||||
(T_For id) <- g_For
|
(T_For id) <- g_For
|
||||||
|
@ -2158,7 +2159,7 @@ readForClause = called "for loop" $ do
|
||||||
readRegular id pos = do
|
readRegular id pos = do
|
||||||
acceptButWarn (char '$') ErrorC 1086
|
acceptButWarn (char '$') ErrorC 1086
|
||||||
"Don't use $ on the iterator name in for loops."
|
"Don't use $ on the iterator name in for loops."
|
||||||
name <- readVariableName `thenSkip` spacing
|
name <- readVariableName `thenSkip` allspacing
|
||||||
values <- readInClause <|> (optional readSequentialSep >> return [])
|
values <- readInClause <|> (optional readSequentialSep >> return [])
|
||||||
group <- readDoGroup pos
|
group <- readDoGroup pos
|
||||||
return $ T_ForIn id name values group
|
return $ T_ForIn id name values group
|
||||||
|
@ -2532,7 +2533,7 @@ tryParseWordToken keyword t = try $ do
|
||||||
try . lookAhead $ char '#'
|
try . lookAhead $ char '#'
|
||||||
parseProblem ErrorC 1099 "You need a space before the #."
|
parseProblem ErrorC 1099 "You need a space before the #."
|
||||||
|
|
||||||
try $ lookAhead keywordSeparator
|
lookAhead keywordSeparator
|
||||||
when (str /= keyword) $
|
when (str /= keyword) $
|
||||||
parseProblem ErrorC 1081 $
|
parseProblem ErrorC 1081 $
|
||||||
"Scripts are case sensitive. Use '" ++ keyword ++ "', not '" ++ str ++ "'."
|
"Scripts are case sensitive. Use '" ++ keyword ++ "', not '" ++ str ++ "'."
|
||||||
|
@ -2591,7 +2592,7 @@ g_Semi = do
|
||||||
tryToken ";" T_Semi
|
tryToken ";" T_Semi
|
||||||
|
|
||||||
keywordSeparator =
|
keywordSeparator =
|
||||||
eof <|> disregard whitespace <|> disregard (oneOf ";()[<>&|")
|
eof <|> disregard (try allspacingOrFail) <|> disregard (oneOf ";()[<>&|")
|
||||||
|
|
||||||
readKeyword = choice [ g_Then, g_Else, g_Elif, g_Fi, g_Do, g_Done, g_Esac, g_Rbrace, g_Rparen, g_DSEMI ]
|
readKeyword = choice [ g_Then, g_Else, g_Elif, g_Fi, g_Do, g_Done, g_Esac, g_Rbrace, g_Rparen, g_DSEMI ]
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue