Skip to content

Commit fb30aec

Browse files
owencaaaryanshukla
authored andcommitted
[clang-format][NFC] Annotate function/ctor/dtor declaration l_paren (llvm#97938)
1 parent ab1afa0 commit fb30aec

File tree

3 files changed

+51
-6
lines changed

3 files changed

+51
-6
lines changed

clang/lib/Format/FormatToken.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ namespace format {
7777
TYPE(ForEachMacro) \
7878
TYPE(FunctionAnnotationRParen) \
7979
TYPE(FunctionDeclarationName) \
80+
TYPE(FunctionDeclarationLParen) \
8081
TYPE(FunctionLBrace) \
8182
TYPE(FunctionLikeOrFreestandingMacro) \
8283
TYPE(FunctionTypeLParen) \

clang/lib/Format/TokenAnnotator.cpp

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3539,7 +3539,8 @@ static unsigned maxNestingDepth(const AnnotatedLine &Line) {
35393539

35403540
// Returns the name of a function with no return type, e.g. a constructor or
35413541
// destructor.
3542-
static FormatToken *getFunctionName(const AnnotatedLine &Line) {
3542+
static FormatToken *getFunctionName(const AnnotatedLine &Line,
3543+
FormatToken *&OpeningParen) {
35433544
for (FormatToken *Tok = Line.getFirstNonComment(), *Name = nullptr; Tok;
35443545
Tok = Tok->getNextNonComment()) {
35453546
// Skip C++11 attributes both before and after the function name.
@@ -3552,10 +3553,12 @@ static FormatToken *getFunctionName(const AnnotatedLine &Line) {
35523553

35533554
// Make sure the name is followed by a pair of parentheses.
35543555
if (Name) {
3555-
return Tok->is(tok::l_paren) && Tok->isNot(TT_FunctionTypeLParen) &&
3556-
Tok->MatchingParen
3557-
? Name
3558-
: nullptr;
3556+
if (Tok->is(tok::l_paren) && Tok->isNot(TT_FunctionTypeLParen) &&
3557+
Tok->MatchingParen) {
3558+
OpeningParen = Tok;
3559+
return Name;
3560+
}
3561+
return nullptr;
35593562
}
35603563

35613564
// Skip keywords that may precede the constructor/destructor name.
@@ -3632,10 +3635,13 @@ void TokenAnnotator::annotate(AnnotatedLine &Line) {
36323635
ExprParser.parse();
36333636

36343637
if (IsCpp) {
3635-
auto *Tok = getFunctionName(Line);
3638+
FormatToken *OpeningParen = nullptr;
3639+
auto *Tok = getFunctionName(Line, OpeningParen);
36363640
if (Tok && ((!Scopes.empty() && Scopes.back() == ST_Class) ||
36373641
Line.endsWith(TT_FunctionLBrace) || isCtorOrDtorName(Tok))) {
36383642
Tok->setFinalizedType(TT_CtorDtorDeclName);
3643+
assert(OpeningParen);
3644+
OpeningParen->setFinalizedType(TT_FunctionDeclarationLParen);
36393645
}
36403646
}
36413647

@@ -3864,6 +3870,12 @@ void TokenAnnotator::calculateFormattingInformation(AnnotatedLine &Line) const {
38643870
Tok->setFinalizedType(TT_FunctionDeclarationName);
38653871
LineIsFunctionDeclaration = true;
38663872
SeenName = true;
3873+
if (ClosingParen) {
3874+
auto *OpeningParen = ClosingParen->MatchingParen;
3875+
assert(OpeningParen);
3876+
if (OpeningParen->is(TT_Unknown))
3877+
OpeningParen->setType(TT_FunctionDeclarationLParen);
3878+
}
38673879
break;
38683880
}
38693881
}

clang/unittests/Format/TokenAnnotatorTest.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1037,6 +1037,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsRequiresClausesAndConcepts) {
10371037
EXPECT_TOKEN(Tokens[5], tok::kw_requires, TT_RequiresClause);
10381038
EXPECT_TRUE(Tokens[9]->ClosesRequiresClause);
10391039
EXPECT_TOKEN(Tokens[11], tok::identifier, TT_FunctionDeclarationName);
1040+
EXPECT_TOKEN(Tokens[12], tok::l_paren, TT_FunctionDeclarationLParen);
10401041

10411042
Tokens = annotate("template <typename T>\n"
10421043
"requires Bar<T>\n"
@@ -1045,6 +1046,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsRequiresClausesAndConcepts) {
10451046
EXPECT_TOKEN(Tokens[5], tok::kw_requires, TT_RequiresClause);
10461047
EXPECT_TRUE(Tokens[9]->ClosesRequiresClause);
10471048
EXPECT_TOKEN(Tokens[14], tok::identifier, TT_FunctionDeclarationName);
1049+
EXPECT_TOKEN(Tokens[15], tok::l_paren, TT_FunctionDeclarationLParen);
10481050

10491051
Tokens = annotate("template <typename T>\n"
10501052
"struct S {\n"
@@ -1914,15 +1916,18 @@ TEST_F(TokenAnnotatorTest, UnderstandsFunctionDeclarationNames) {
19141916
auto Tokens = annotate("void f [[noreturn]] ();");
19151917
ASSERT_EQ(Tokens.size(), 11u) << Tokens;
19161918
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_FunctionDeclarationName);
1919+
EXPECT_TOKEN(Tokens[7], tok::l_paren, TT_FunctionDeclarationLParen);
19171920

19181921
Tokens = annotate("void f [[noreturn]] () {}");
19191922
ASSERT_EQ(Tokens.size(), 12u) << Tokens;
19201923
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_FunctionDeclarationName);
1924+
EXPECT_TOKEN(Tokens[7], tok::l_paren, TT_FunctionDeclarationLParen);
19211925

19221926
Tokens = annotate("#define FOO Foo::\n"
19231927
"FOO Foo();");
19241928
ASSERT_EQ(Tokens.size(), 11u) << Tokens;
19251929
EXPECT_TOKEN(Tokens[6], tok::identifier, TT_FunctionDeclarationName);
1930+
EXPECT_TOKEN(Tokens[7], tok::l_paren, TT_FunctionDeclarationLParen);
19261931

19271932
Tokens = annotate("struct Foo {\n"
19281933
" Bar (*func)();\n"
@@ -1934,66 +1939,79 @@ TEST_F(TokenAnnotatorTest, UnderstandsFunctionDeclarationNames) {
19341939
Tokens = annotate("void instanceof();");
19351940
ASSERT_EQ(Tokens.size(), 6u);
19361941
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_FunctionDeclarationName);
1942+
EXPECT_TOKEN(Tokens[2], tok::l_paren, TT_FunctionDeclarationLParen);
19371943

19381944
Tokens = annotate("int iso_time(time_t);");
19391945
ASSERT_EQ(Tokens.size(), 7u) << Tokens;
19401946
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_FunctionDeclarationName);
1947+
EXPECT_TOKEN(Tokens[2], tok::l_paren, TT_FunctionDeclarationLParen);
19411948

19421949
auto Style = getLLVMStyle();
19431950
Style.TypeNames.push_back("MyType");
19441951
Tokens = annotate("int iso_time(MyType);", Style);
19451952
ASSERT_EQ(Tokens.size(), 7u) << Tokens;
19461953
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_FunctionDeclarationName);
1954+
EXPECT_TOKEN(Tokens[2], tok::l_paren, TT_FunctionDeclarationLParen);
19471955
EXPECT_TOKEN(Tokens[3], tok::identifier, TT_TypeName);
19481956
}
19491957

19501958
TEST_F(TokenAnnotatorTest, UnderstandsCtorAndDtorDeclNames) {
19511959
auto Tokens = annotate("class Foo { public: Foo(); };");
19521960
ASSERT_EQ(Tokens.size(), 12u) << Tokens;
19531961
EXPECT_TOKEN(Tokens[5], tok::identifier, TT_CtorDtorDeclName);
1962+
EXPECT_TOKEN(Tokens[6], tok::l_paren, TT_FunctionDeclarationLParen);
19541963

19551964
Tokens = annotate("class Foo { public: ~Foo(); };");
19561965
ASSERT_EQ(Tokens.size(), 13u) << Tokens;
19571966
EXPECT_TOKEN(Tokens[6], tok::identifier, TT_CtorDtorDeclName);
1967+
EXPECT_TOKEN(Tokens[7], tok::l_paren, TT_FunctionDeclarationLParen);
19581968

19591969
Tokens = annotate("struct Foo { [[deprecated]] Foo() {} };");
19601970
ASSERT_EQ(Tokens.size(), 16u) << Tokens;
19611971
EXPECT_TOKEN(Tokens[8], tok::identifier, TT_CtorDtorDeclName);
1972+
EXPECT_TOKEN(Tokens[9], tok::l_paren, TT_FunctionDeclarationLParen);
19621973
EXPECT_TOKEN(Tokens[11], tok::l_brace, TT_FunctionLBrace);
19631974

19641975
Tokens = annotate("struct Foo { [[deprecated]] ~Foo() {} };");
19651976
ASSERT_EQ(Tokens.size(), 17u) << Tokens;
19661977
EXPECT_TOKEN(Tokens[9], tok::identifier, TT_CtorDtorDeclName);
1978+
EXPECT_TOKEN(Tokens[10], tok::l_paren, TT_FunctionDeclarationLParen);
19671979
EXPECT_TOKEN(Tokens[12], tok::l_brace, TT_FunctionLBrace);
19681980

19691981
Tokens = annotate("struct Foo { Foo() [[deprecated]] {} };");
19701982
ASSERT_EQ(Tokens.size(), 16u) << Tokens;
19711983
EXPECT_TOKEN(Tokens[3], tok::identifier, TT_CtorDtorDeclName);
1984+
EXPECT_TOKEN(Tokens[4], tok::l_paren, TT_FunctionDeclarationLParen);
19721985
EXPECT_TOKEN(Tokens[11], tok::l_brace, TT_FunctionLBrace);
19731986

19741987
Tokens = annotate("struct Foo { ~Foo() [[deprecated]] {} };");
19751988
ASSERT_EQ(Tokens.size(), 17u) << Tokens;
19761989
EXPECT_TOKEN(Tokens[4], tok::identifier, TT_CtorDtorDeclName);
1990+
EXPECT_TOKEN(Tokens[5], tok::l_paren, TT_FunctionDeclarationLParen);
19771991
EXPECT_TOKEN(Tokens[12], tok::l_brace, TT_FunctionLBrace);
19781992

19791993
Tokens = annotate("struct Foo { [[deprecated]] explicit Foo() {} };");
19801994
ASSERT_EQ(Tokens.size(), 17u) << Tokens;
19811995
EXPECT_TOKEN(Tokens[9], tok::identifier, TT_CtorDtorDeclName);
1996+
EXPECT_TOKEN(Tokens[10], tok::l_paren, TT_FunctionDeclarationLParen);
19821997
EXPECT_TOKEN(Tokens[12], tok::l_brace, TT_FunctionLBrace);
19831998

19841999
Tokens = annotate("struct Foo { virtual [[deprecated]] ~Foo() {} };");
19852000
ASSERT_EQ(Tokens.size(), 18u) << Tokens;
19862001
EXPECT_TOKEN(Tokens[10], tok::identifier, TT_CtorDtorDeclName);
2002+
EXPECT_TOKEN(Tokens[11], tok::l_paren, TT_FunctionDeclarationLParen);
19872003
EXPECT_TOKEN(Tokens[13], tok::l_brace, TT_FunctionLBrace);
19882004

19892005
Tokens = annotate("Foo::Foo() {}");
19902006
ASSERT_EQ(Tokens.size(), 8u) << Tokens;
19912007
EXPECT_TOKEN(Tokens[2], tok::identifier, TT_CtorDtorDeclName);
2008+
EXPECT_TOKEN(Tokens[3], tok::l_paren, TT_FunctionDeclarationLParen);
19922009
EXPECT_TOKEN(Tokens[5], tok::l_brace, TT_FunctionLBrace);
19932010

19942011
Tokens = annotate("Foo::~Foo() {}");
19952012
ASSERT_EQ(Tokens.size(), 9u) << Tokens;
19962013
EXPECT_TOKEN(Tokens[3], tok::identifier, TT_CtorDtorDeclName);
2014+
EXPECT_TOKEN(Tokens[4], tok::l_paren, TT_FunctionDeclarationLParen);
19972015
EXPECT_TOKEN(Tokens[6], tok::l_brace, TT_FunctionLBrace);
19982016

19992017
Tokens = annotate("struct Test {\n"
@@ -2004,6 +2022,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsCtorAndDtorDeclNames) {
20042022
"};");
20052023
ASSERT_EQ(Tokens.size(), 25u) << Tokens;
20062024
EXPECT_TOKEN(Tokens[3], tok::identifier, TT_CtorDtorDeclName);
2025+
EXPECT_TOKEN(Tokens[4], tok::l_paren, TT_FunctionDeclarationLParen);
20072026
EXPECT_TOKEN(Tokens[14], tok::identifier, TT_Unknown);
20082027
}
20092028

@@ -2836,6 +2855,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsAttributes) {
28362855
EXPECT_TOKEN(Tokens[5], tok::r_paren, TT_Unknown);
28372856
EXPECT_TOKEN(Tokens[6], tok::r_paren, TT_AttributeRParen);
28382857
EXPECT_TOKEN(Tokens[7], tok::identifier, TT_FunctionDeclarationName);
2858+
EXPECT_TOKEN(Tokens[8], tok::l_paren, TT_FunctionDeclarationLParen);
28392859

28402860
FormatStyle Style = getLLVMStyle();
28412861
Style.AttributeMacros.push_back("FOO");
@@ -2916,48 +2936,55 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
29162936
auto Tokens = annotate("void f() {};");
29172937
ASSERT_EQ(Tokens.size(), 8u) << Tokens;
29182938
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_FunctionDeclarationName);
2939+
EXPECT_TOKEN(Tokens[2], tok::l_paren, TT_FunctionDeclarationLParen);
29192940
EXPECT_TOKEN(Tokens[4], tok::l_brace, TT_FunctionLBrace);
29202941
EXPECT_BRACE_KIND(Tokens[4], BK_Block);
29212942
EXPECT_BRACE_KIND(Tokens[5], BK_Block);
29222943

29232944
Tokens = annotate("class Foo<int> f() {}");
29242945
ASSERT_EQ(Tokens.size(), 11u) << Tokens;
29252946
EXPECT_TOKEN(Tokens[5], tok::identifier, TT_FunctionDeclarationName);
2947+
EXPECT_TOKEN(Tokens[6], tok::l_paren, TT_FunctionDeclarationLParen);
29262948
EXPECT_TOKEN(Tokens[8], tok::l_brace, TT_FunctionLBrace);
29272949
EXPECT_BRACE_KIND(Tokens[8], BK_Block);
29282950
EXPECT_BRACE_KIND(Tokens[9], BK_Block);
29292951

29302952
Tokens = annotate("template <typename T> class Foo<T> f() {}");
29312953
ASSERT_EQ(Tokens.size(), 16u) << Tokens;
29322954
EXPECT_TOKEN(Tokens[10], tok::identifier, TT_FunctionDeclarationName);
2955+
EXPECT_TOKEN(Tokens[11], tok::l_paren, TT_FunctionDeclarationLParen);
29332956
EXPECT_TOKEN(Tokens[13], tok::l_brace, TT_FunctionLBrace);
29342957
EXPECT_BRACE_KIND(Tokens[13], BK_Block);
29352958
EXPECT_BRACE_KIND(Tokens[14], BK_Block);
29362959

29372960
Tokens = annotate("void f() override {};");
29382961
ASSERT_EQ(Tokens.size(), 9u) << Tokens;
29392962
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_FunctionDeclarationName);
2963+
EXPECT_TOKEN(Tokens[2], tok::l_paren, TT_FunctionDeclarationLParen);
29402964
EXPECT_TOKEN(Tokens[5], tok::l_brace, TT_FunctionLBrace);
29412965
EXPECT_BRACE_KIND(Tokens[5], BK_Block);
29422966
EXPECT_BRACE_KIND(Tokens[6], BK_Block);
29432967

29442968
Tokens = annotate("void f() noexcept(false) {};");
29452969
ASSERT_EQ(Tokens.size(), 12u) << Tokens;
29462970
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_FunctionDeclarationName);
2971+
EXPECT_TOKEN(Tokens[2], tok::l_paren, TT_FunctionDeclarationLParen);
29472972
EXPECT_TOKEN(Tokens[8], tok::l_brace, TT_FunctionLBrace);
29482973
EXPECT_BRACE_KIND(Tokens[8], BK_Block);
29492974
EXPECT_BRACE_KIND(Tokens[9], BK_Block);
29502975

29512976
Tokens = annotate("auto f() -> void {};");
29522977
ASSERT_EQ(Tokens.size(), 10u) << Tokens;
29532978
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_FunctionDeclarationName);
2979+
EXPECT_TOKEN(Tokens[2], tok::l_paren, TT_FunctionDeclarationLParen);
29542980
EXPECT_TOKEN(Tokens[6], tok::l_brace, TT_FunctionLBrace);
29552981
EXPECT_BRACE_KIND(Tokens[6], BK_Block);
29562982
EXPECT_BRACE_KIND(Tokens[7], BK_Block);
29572983

29582984
Tokens = annotate("void f() { /**/ };");
29592985
ASSERT_EQ(Tokens.size(), 9u) << Tokens;
29602986
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_FunctionDeclarationName);
2987+
EXPECT_TOKEN(Tokens[2], tok::l_paren, TT_FunctionDeclarationLParen);
29612988
EXPECT_TOKEN(Tokens[4], tok::l_brace, TT_FunctionLBrace);
29622989
EXPECT_BRACE_KIND(Tokens[4], BK_Block);
29632990
EXPECT_BRACE_KIND(Tokens[6], BK_Block);
@@ -2966,6 +2993,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
29662993
"};");
29672994
ASSERT_EQ(Tokens.size(), 9u) << Tokens;
29682995
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_FunctionDeclarationName);
2996+
EXPECT_TOKEN(Tokens[2], tok::l_paren, TT_FunctionDeclarationLParen);
29692997
EXPECT_TOKEN(Tokens[4], tok::l_brace, TT_FunctionLBrace);
29702998
EXPECT_BRACE_KIND(Tokens[4], BK_Block);
29712999
EXPECT_BRACE_KIND(Tokens[6], BK_Block);
@@ -2975,6 +3003,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
29753003
"};");
29763004
ASSERT_EQ(Tokens.size(), 9u) << Tokens;
29773005
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_FunctionDeclarationName);
3006+
EXPECT_TOKEN(Tokens[2], tok::l_paren, TT_FunctionDeclarationLParen);
29783007
EXPECT_TOKEN(Tokens[4], tok::l_brace, TT_FunctionLBrace);
29793008
EXPECT_BRACE_KIND(Tokens[4], BK_Block);
29803009
EXPECT_BRACE_KIND(Tokens[6], BK_Block);
@@ -2985,10 +3014,12 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
29853014
"};");
29863015
ASSERT_EQ(Tokens.size(), 19u) << Tokens;
29873016
EXPECT_TOKEN(Tokens[3], tok::identifier, TT_CtorDtorDeclName);
3017+
EXPECT_TOKEN(Tokens[4], tok::l_paren, TT_FunctionDeclarationLParen);
29883018
EXPECT_TOKEN(Tokens[6], tok::l_brace, TT_FunctionLBrace);
29893019
EXPECT_BRACE_KIND(Tokens[6], BK_Block);
29903020
EXPECT_BRACE_KIND(Tokens[7], BK_Block);
29913021
EXPECT_TOKEN(Tokens[10], tok::identifier, TT_CtorDtorDeclName);
3022+
EXPECT_TOKEN(Tokens[11], tok::l_paren, TT_FunctionDeclarationLParen);
29923023
EXPECT_TOKEN(Tokens[13], tok::l_brace, TT_FunctionLBrace);
29933024
EXPECT_BRACE_KIND(Tokens[13], BK_Block);
29943025
EXPECT_BRACE_KIND(Tokens[14], BK_Block);
@@ -3211,6 +3242,7 @@ TEST_F(TokenAnnotatorTest, FunctionTryBlock) {
32113242
"}");
32123243
ASSERT_EQ(Tokens.size(), 45u);
32133244
EXPECT_TOKEN(Tokens[2], tok::identifier, TT_CtorDtorDeclName);
3245+
EXPECT_TOKEN(Tokens[3], tok::l_paren, TT_FunctionDeclarationLParen);
32143246
EXPECT_TOKEN(Tokens[11], tok::colon, TT_CtorInitializerColon);
32153247
EXPECT_TOKEN(Tokens[14], tok::l_square, TT_LambdaLSquare);
32163248
EXPECT_TOKEN(Tokens[16], tok::arrow, TT_TrailingReturnArrow);

0 commit comments

Comments
 (0)