[Parse] Disallow space between attribute name and '(' in Swift 6 mode

This allows us to resolve disambiguities of whether a parenthesis belong to an argument to the attribute or if it is eg. the start of a tuple.
This commit is contained in:
Alex Hoppen
2024-01-29 22:56:25 -08:00
parent cc5e79b521
commit c6e425a559
6 changed files with 108 additions and 42 deletions

View File

@@ -576,6 +576,23 @@ SourceLoc Parser::getEndOfPreviousLoc() const {
return Lexer::getLocForEndOfToken(SourceMgr, PreviousLoc);
}
SourceLoc Parser::consumeAttributeLParen() {
SourceLoc LastTokenEndLoc = getEndOfPreviousLoc();
if (LastTokenEndLoc != Tok.getLoc() && !isInSILMode()) {
diagnose(LastTokenEndLoc, diag::attr_extra_whitespace_before_lparen)
.warnUntilSwiftVersion(6);
}
return consumeToken(tok::l_paren);
}
bool Parser::consumeIfAttributeLParen() {
if (!Tok.isFollowingLParen()) {
return false;
}
consumeAttributeLParen();
return true;
}
SourceLoc Parser::consumeStartingCharacterOfCurrentToken(tok Kind, size_t Len) {
// Consumes prefix of token and returns its location.
// (like '?', '<', '>' or '!' immediately followed by '<')