Skip to content

Commit b5f6689

Browse files
authored
[clang-format] Annotate ::operator as FunctionDeclarationName (#111115)
Fixes #111011.
1 parent e5b05a5 commit b5f6689

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

clang/lib/Format/TokenAnnotator.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3738,6 +3738,13 @@ static bool isFunctionDeclarationName(const LangOptions &LangOpts,
37383738

37393739
const auto *Prev = Current.getPreviousNonComment();
37403740
assert(Prev);
3741+
3742+
if (Prev->is(tok::coloncolon))
3743+
Prev = Prev->Previous;
3744+
3745+
if (!Prev)
3746+
return false;
3747+
37413748
const auto &Previous = *Prev;
37423749

37433750
if (const auto *PrevPrev = Previous.getPreviousNonComment();

clang/unittests/Format/TokenAnnotatorTest.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1007,6 +1007,14 @@ TEST_F(TokenAnnotatorTest, UnderstandsOverloadedOperators) {
10071007
EXPECT_TOKEN(Tokens[6], tok::r_paren, TT_OverloadedOperator);
10081008
EXPECT_TOKEN(Tokens[7], tok::l_paren, TT_OverloadedOperatorLParen);
10091009
EXPECT_TOKEN(Tokens[9], tok::amp, TT_PointerOrReference);
1010+
1011+
Tokens = annotate("friend ostream& ::operator<<(ostream& lhs, foo& rhs);");
1012+
ASSERT_EQ(Tokens.size(), 17u) << Tokens;
1013+
EXPECT_TOKEN(Tokens[4], tok::kw_operator, TT_FunctionDeclarationName);
1014+
EXPECT_TOKEN(Tokens[5], tok::lessless, TT_OverloadedOperator);
1015+
EXPECT_TOKEN(Tokens[6], tok::l_paren, TT_OverloadedOperatorLParen);
1016+
EXPECT_TOKEN(Tokens[8], tok::amp, TT_PointerOrReference);
1017+
EXPECT_TOKEN(Tokens[12], tok::amp, TT_PointerOrReference);
10101018
}
10111019

10121020
TEST_F(TokenAnnotatorTest, OverloadedOperatorInTemplate) {

0 commit comments

Comments
 (0)