Skip to content

Commit 67b99fa

Browse files
authored
[clang-format] Correctly annotate keyword operator function name (#66904)
Fixes #66890.
1 parent 7afc442 commit 67b99fa

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
@@ -3302,6 +3302,12 @@ static bool isFunctionDeclarationName(bool IsCpp, const FormatToken &Current,
33023302
!Previous->isOneOf(tok::kw_return, tok::kw_co_return)) {
33033303
return true;
33043304
}
3305+
if (Previous->is(tok::r_paren) && Previous->is(TT_TypeDeclarationParen)) {
3306+
assert(Previous->MatchingParen);
3307+
assert(Previous->MatchingParen->is(tok::l_paren));
3308+
assert(Previous->MatchingParen->is(TT_TypeDeclarationParen));
3309+
return true;
3310+
}
33053311
if (!Previous->isOneOf(tok::star, tok::amp, tok::ampamp, TT_TemplateCloser))
33063312
return false;
33073313
Next = skipOperatorName(Next);

clang/unittests/Format/TokenAnnotatorTest.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -753,6 +753,16 @@ TEST_F(TokenAnnotatorTest, UnderstandsOverloadedOperators) {
753753
EXPECT_TOKEN(Tokens[8], tok::r_paren, TT_OverloadedOperator);
754754
EXPECT_TOKEN(Tokens[9], tok::l_paren, TT_OverloadedOperatorLParen);
755755
EXPECT_TOKEN(Tokens[11], tok::amp, TT_PointerOrReference);
756+
757+
Tokens = annotate("decltype(auto) operator()(T &x);");
758+
ASSERT_EQ(Tokens.size(), 14u) << Tokens;
759+
EXPECT_TOKEN(Tokens[1], tok::l_paren, TT_TypeDeclarationParen);
760+
EXPECT_TOKEN(Tokens[3], tok::r_paren, TT_TypeDeclarationParen);
761+
EXPECT_TOKEN(Tokens[4], tok::kw_operator, TT_FunctionDeclarationName);
762+
EXPECT_TOKEN(Tokens[5], tok::l_paren, TT_OverloadedOperator);
763+
EXPECT_TOKEN(Tokens[6], tok::r_paren, TT_OverloadedOperator);
764+
EXPECT_TOKEN(Tokens[7], tok::l_paren, TT_OverloadedOperatorLParen);
765+
EXPECT_TOKEN(Tokens[9], tok::amp, TT_PointerOrReference);
756766
}
757767

758768
TEST_F(TokenAnnotatorTest, OverloadedOperatorInTemplate) {

0 commit comments

Comments
 (0)