Skip to content

Commit a6cbdae

Browse files
owencatru
authored andcommitted
[clang-format] Correctly annotate keyword operator function name (#66904)
Fixes #66890. (cherry picked from commit 67b99fa)
1 parent 094cfd1 commit a6cbdae

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

clang/lib/Format/TokenAnnotator.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3178,6 +3178,12 @@ static bool isFunctionDeclarationName(bool IsCpp, const FormatToken &Current,
31783178
!Previous->isOneOf(tok::kw_return, tok::kw_co_return)) {
31793179
return true;
31803180
}
3181+
if (Previous->is(tok::r_paren) && Previous->is(TT_TypeDeclarationParen)) {
3182+
assert(Previous->MatchingParen);
3183+
assert(Previous->MatchingParen->is(tok::l_paren));
3184+
assert(Previous->MatchingParen->is(TT_TypeDeclarationParen));
3185+
return true;
3186+
}
31813187
if (!Previous->isOneOf(tok::star, tok::amp, tok::ampamp, TT_TemplateCloser))
31823188
return false;
31833189
Next = skipOperatorName(Next);

clang/unittests/Format/TokenAnnotatorTest.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -740,6 +740,16 @@ TEST_F(TokenAnnotatorTest, UnderstandsOverloadedOperators) {
740740
EXPECT_TOKEN(Tokens[8], tok::r_paren, TT_OverloadedOperator);
741741
EXPECT_TOKEN(Tokens[9], tok::l_paren, TT_OverloadedOperatorLParen);
742742
EXPECT_TOKEN(Tokens[11], tok::amp, TT_PointerOrReference);
743+
744+
Tokens = annotate("decltype(auto) operator()(T &x);");
745+
ASSERT_EQ(Tokens.size(), 14u) << Tokens;
746+
EXPECT_TOKEN(Tokens[1], tok::l_paren, TT_TypeDeclarationParen);
747+
EXPECT_TOKEN(Tokens[3], tok::r_paren, TT_TypeDeclarationParen);
748+
EXPECT_TOKEN(Tokens[4], tok::kw_operator, TT_FunctionDeclarationName);
749+
EXPECT_TOKEN(Tokens[5], tok::l_paren, TT_OverloadedOperator);
750+
EXPECT_TOKEN(Tokens[6], tok::r_paren, TT_OverloadedOperator);
751+
EXPECT_TOKEN(Tokens[7], tok::l_paren, TT_OverloadedOperatorLParen);
752+
EXPECT_TOKEN(Tokens[9], tok::amp, TT_PointerOrReference);
743753
}
744754

745755
TEST_F(TokenAnnotatorTest, OverloadedOperatorInTemplate) {

0 commit comments

Comments
 (0)