Skip to content

Commit 9da43ee

Browse files
committed
Add TT_LambdaDefinitionLParen and tests
1 parent a5deb99 commit 9da43ee

File tree

3 files changed

+23
-0
lines changed

3 files changed

+23
-0
lines changed

clang/lib/Format/FormatToken.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ namespace format {
102102
TYPE(JsTypeColon) \
103103
TYPE(JsTypeOperator) \
104104
TYPE(JsTypeOptionalQuestion) \
105+
TYPE(LambdaDefinitionLParen) \
105106
TYPE(LambdaLBrace) \
106107
TYPE(LambdaLSquare) \
107108
TYPE(LeadingJavaAnnotation) \

clang/lib/Format/TokenAnnotator.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ static bool canBeObjCSelectorComponent(const FormatToken &Tok) {
6262

6363
/// With `Left` being '(', check if we're at either `[...](` or
6464
/// `[...]<...>(`, where the [ opens a lambda capture list.
65+
// FIXME: this doesn't cover attributes/constraints before the l_paren.
6566
static bool isLambdaParameterList(const FormatToken *Left) {
6667
// Skip <...> if present.
6768
if (Left->Previous && Left->Previous->is(tok::greater) &&
@@ -365,6 +366,7 @@ class AnnotatingParser {
365366
Contexts.back().IsExpression = false;
366367
} else if (isLambdaParameterList(&OpeningParen)) {
367368
// This is a parameter list of a lambda expression.
369+
OpeningParen.setType(TT_LambdaDefinitionLParen);
368370
Contexts.back().IsExpression = false;
369371
} else if (OpeningParen.is(TT_RequiresExpressionLParen)) {
370372
Contexts.back().IsExpression = false;

clang/unittests/Format/TokenAnnotatorTest.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1665,38 +1665,45 @@ TEST_F(TokenAnnotatorTest, UnderstandsLambdas) {
16651665
auto Tokens = annotate("[]() constexpr {}");
16661666
ASSERT_EQ(Tokens.size(), 8u) << Tokens;
16671667
EXPECT_TOKEN(Tokens[0], tok::l_square, TT_LambdaLSquare);
1668+
EXPECT_TOKEN(Tokens[2], tok::l_paren, TT_LambdaDefinitionLParen);
16681669
EXPECT_TOKEN(Tokens[5], tok::l_brace, TT_LambdaLBrace);
16691670

16701671
Tokens = annotate("[]() consteval {}");
16711672
ASSERT_EQ(Tokens.size(), 8u) << Tokens;
16721673
EXPECT_TOKEN(Tokens[0], tok::l_square, TT_LambdaLSquare);
1674+
EXPECT_TOKEN(Tokens[2], tok::l_paren, TT_LambdaDefinitionLParen);
16731675
EXPECT_TOKEN(Tokens[5], tok::l_brace, TT_LambdaLBrace);
16741676

16751677
Tokens = annotate("[]() mutable {}");
16761678
ASSERT_EQ(Tokens.size(), 8u) << Tokens;
16771679
EXPECT_TOKEN(Tokens[0], tok::l_square, TT_LambdaLSquare);
1680+
EXPECT_TOKEN(Tokens[2], tok::l_paren, TT_LambdaDefinitionLParen);
16781681
EXPECT_TOKEN(Tokens[5], tok::l_brace, TT_LambdaLBrace);
16791682

16801683
Tokens = annotate("[]() static {}");
16811684
ASSERT_EQ(Tokens.size(), 8u) << Tokens;
16821685
EXPECT_TOKEN(Tokens[0], tok::l_square, TT_LambdaLSquare);
1686+
EXPECT_TOKEN(Tokens[2], tok::l_paren, TT_LambdaDefinitionLParen);
16831687
EXPECT_TOKEN(Tokens[5], tok::l_brace, TT_LambdaLBrace);
16841688

16851689
Tokens = annotate("[]() -> auto {}");
16861690
ASSERT_EQ(Tokens.size(), 9u) << Tokens;
16871691
EXPECT_TOKEN(Tokens[0], tok::l_square, TT_LambdaLSquare);
1692+
EXPECT_TOKEN(Tokens[2], tok::l_paren, TT_LambdaDefinitionLParen);
16881693
EXPECT_TOKEN(Tokens[4], tok::arrow, TT_TrailingReturnArrow);
16891694
EXPECT_TOKEN(Tokens[6], tok::l_brace, TT_LambdaLBrace);
16901695

16911696
Tokens = annotate("[]() -> auto & {}");
16921697
ASSERT_EQ(Tokens.size(), 10u) << Tokens;
16931698
EXPECT_TOKEN(Tokens[0], tok::l_square, TT_LambdaLSquare);
1699+
EXPECT_TOKEN(Tokens[2], tok::l_paren, TT_LambdaDefinitionLParen);
16941700
EXPECT_TOKEN(Tokens[4], tok::arrow, TT_TrailingReturnArrow);
16951701
EXPECT_TOKEN(Tokens[7], tok::l_brace, TT_LambdaLBrace);
16961702

16971703
Tokens = annotate("[]() -> auto * {}");
16981704
ASSERT_EQ(Tokens.size(), 10u) << Tokens;
16991705
EXPECT_TOKEN(Tokens[0], tok::l_square, TT_LambdaLSquare);
1706+
EXPECT_TOKEN(Tokens[2], tok::l_paren, TT_LambdaDefinitionLParen);
17001707
EXPECT_TOKEN(Tokens[4], tok::arrow, TT_TrailingReturnArrow);
17011708
EXPECT_TOKEN(Tokens[7], tok::l_brace, TT_LambdaLBrace);
17021709

@@ -1725,13 +1732,15 @@ TEST_F(TokenAnnotatorTest, UnderstandsLambdas) {
17251732
Tokens = annotate("foo([&](u32 bar) __attribute__((attr)) -> void {});");
17261733
ASSERT_EQ(Tokens.size(), 22u) << Tokens;
17271734
EXPECT_TOKEN(Tokens[2], tok::l_square, TT_LambdaLSquare);
1735+
EXPECT_TOKEN(Tokens[5], tok::l_paren, TT_LambdaDefinitionLParen);
17281736
EXPECT_TOKEN(Tokens[15], tok::arrow, TT_TrailingReturnArrow);
17291737
EXPECT_TOKEN(Tokens[17], tok::l_brace, TT_LambdaLBrace);
17301738

17311739
Tokens = annotate("[] <typename T> () {}");
17321740
ASSERT_EQ(Tokens.size(), 11u) << Tokens;
17331741
EXPECT_TOKEN(Tokens[0], tok::l_square, TT_LambdaLSquare);
17341742
EXPECT_TOKEN(Tokens[2], tok::less, TT_TemplateOpener);
1743+
EXPECT_TOKEN(Tokens[6], tok::l_paren, TT_LambdaDefinitionLParen);
17351744
EXPECT_TOKEN(Tokens[8], tok::l_brace, TT_LambdaLBrace);
17361745

17371746
Tokens = annotate("[] <typename T> {}");
@@ -1744,6 +1753,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsLambdas) {
17441753
ASSERT_EQ(Tokens.size(), 12u) << Tokens;
17451754
EXPECT_TOKEN(Tokens[0], tok::l_square, TT_LambdaLSquare);
17461755
EXPECT_TOKEN(Tokens[2], tok::less, TT_TemplateOpener);
1756+
EXPECT_TOKEN(Tokens[7], tok::l_paren, TT_LambdaDefinitionLParen);
17471757
EXPECT_TOKEN(Tokens[9], tok::l_brace, TT_LambdaLBrace);
17481758

17491759
Tokens = annotate("[] <typename... T> {}");
@@ -1756,6 +1766,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsLambdas) {
17561766
ASSERT_EQ(Tokens.size(), 12u) << Tokens;
17571767
EXPECT_TOKEN(Tokens[0], tok::l_square, TT_LambdaLSquare);
17581768
EXPECT_TOKEN(Tokens[2], tok::less, TT_TemplateOpener);
1769+
EXPECT_TOKEN(Tokens[7], tok::l_paren, TT_LambdaDefinitionLParen);
17591770
EXPECT_TOKEN(Tokens[9], tok::l_brace, TT_LambdaLBrace);
17601771

17611772
Tokens = annotate("[] <int... T> {}");
@@ -1768,6 +1779,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsLambdas) {
17681779
ASSERT_EQ(Tokens.size(), 12u) << Tokens;
17691780
EXPECT_TOKEN(Tokens[0], tok::l_square, TT_LambdaLSquare);
17701781
EXPECT_TOKEN(Tokens[2], tok::less, TT_TemplateOpener);
1782+
EXPECT_TOKEN(Tokens[7], tok::l_paren, TT_LambdaDefinitionLParen);
17711783
EXPECT_TOKEN(Tokens[9], tok::l_brace, TT_LambdaLBrace);
17721784

17731785
Tokens = annotate("[] <Foo... T> {}");
@@ -1781,6 +1793,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsLambdas) {
17811793
ASSERT_EQ(Tokens.size(), 18u) << Tokens;
17821794
EXPECT_TOKEN(Tokens[0], tok::l_square, TT_LambdaLSquare);
17831795
EXPECT_TOKEN(Tokens[2], tok::less, TT_TemplateOpener);
1796+
EXPECT_TOKEN(Tokens[6], tok::l_paren, TT_LambdaDefinitionLParen);
17841797
EXPECT_TOKEN(Tokens[10], tok::kw_requires, TT_RequiresClause);
17851798
EXPECT_TRUE(Tokens[14]->ClosesRequiresClause);
17861799
EXPECT_TOKEN(Tokens[15], tok::l_brace, TT_LambdaLBrace);
@@ -1789,6 +1802,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsLambdas) {
17891802
ASSERT_EQ(Tokens.size(), 19u) << Tokens;
17901803
EXPECT_TOKEN(Tokens[0], tok::l_square, TT_LambdaLSquare);
17911804
EXPECT_TOKEN(Tokens[2], tok::less, TT_TemplateOpener);
1805+
EXPECT_TOKEN(Tokens[6], tok::l_paren, TT_LambdaDefinitionLParen);
17921806
EXPECT_TOKEN(Tokens[8], tok::ampamp, TT_PointerOrReference);
17931807
EXPECT_TOKEN(Tokens[11], tok::kw_requires, TT_RequiresClause);
17941808
EXPECT_TRUE(Tokens[15]->ClosesRequiresClause);
@@ -1798,6 +1812,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsLambdas) {
17981812
ASSERT_EQ(Tokens.size(), 23u) << Tokens;
17991813
EXPECT_TOKEN(Tokens[0], tok::l_square, TT_LambdaLSquare);
18001814
EXPECT_TOKEN(Tokens[2], tok::less, TT_TemplateOpener);
1815+
EXPECT_TOKEN(Tokens[6], tok::l_paren, TT_LambdaDefinitionLParen);
18011816
EXPECT_TOKEN(Tokens[10], tok::kw_requires, TT_RequiresClause);
18021817
EXPECT_TRUE(Tokens[19]->ClosesRequiresClause);
18031818
EXPECT_TOKEN(Tokens[20], tok::l_brace, TT_LambdaLBrace);
@@ -1806,6 +1821,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsLambdas) {
18061821
ASSERT_EQ(Tokens.size(), 20u) << Tokens;
18071822
EXPECT_TOKEN(Tokens[0], tok::l_square, TT_LambdaLSquare);
18081823
EXPECT_TOKEN(Tokens[2], tok::less, TT_TemplateOpener);
1824+
EXPECT_TOKEN(Tokens[6], tok::l_paren, TT_LambdaDefinitionLParen);
18091825
EXPECT_TOKEN(Tokens[10], tok::arrow, TT_TrailingReturnArrow);
18101826
EXPECT_TOKEN(Tokens[12], tok::kw_requires, TT_RequiresClause);
18111827
EXPECT_TRUE(Tokens[16]->ClosesRequiresClause);
@@ -1885,20 +1901,23 @@ TEST_F(TokenAnnotatorTest, UnderstandsLambdas) {
18851901
EXPECT_TOKEN(Tokens[0], tok::l_square, TT_LambdaLSquare);
18861902
EXPECT_TOKEN(Tokens[2], tok::less, TT_TemplateOpener);
18871903
EXPECT_TOKEN(Tokens[7], tok::greater, TT_TemplateCloser);
1904+
EXPECT_TOKEN(Tokens[8], tok::l_paren, TT_LambdaDefinitionLParen);
18881905
EXPECT_TOKEN(Tokens[12], tok::l_brace, TT_LambdaLBrace);
18891906

18901907
Tokens = annotate("[] <int I = 0> (T t) {}");
18911908
ASSERT_EQ(Tokens.size(), 15u) << Tokens;
18921909
EXPECT_TOKEN(Tokens[0], tok::l_square, TT_LambdaLSquare);
18931910
EXPECT_TOKEN(Tokens[2], tok::less, TT_TemplateOpener);
18941911
EXPECT_TOKEN(Tokens[7], tok::greater, TT_TemplateCloser);
1912+
EXPECT_TOKEN(Tokens[8], tok::l_paren, TT_LambdaDefinitionLParen);
18951913
EXPECT_TOKEN(Tokens[12], tok::l_brace, TT_LambdaLBrace);
18961914

18971915
Tokens = annotate("[] <bool b = false> (T t) {}");
18981916
ASSERT_EQ(Tokens.size(), 15u) << Tokens;
18991917
EXPECT_TOKEN(Tokens[0], tok::l_square, TT_LambdaLSquare);
19001918
EXPECT_TOKEN(Tokens[2], tok::less, TT_TemplateOpener);
19011919
EXPECT_TOKEN(Tokens[7], tok::greater, TT_TemplateCloser);
1920+
EXPECT_TOKEN(Tokens[8], tok::l_paren, TT_LambdaDefinitionLParen);
19021921
EXPECT_TOKEN(Tokens[12], tok::l_brace, TT_LambdaLBrace);
19031922

19041923
Tokens = annotate("[] <bool b = true && false> (T&& t) {}");
@@ -1907,6 +1926,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsLambdas) {
19071926
EXPECT_TOKEN(Tokens[2], tok::less, TT_TemplateOpener);
19081927
EXPECT_TOKEN(Tokens[7], tok::ampamp, TT_BinaryOperator);
19091928
EXPECT_TOKEN(Tokens[9], tok::greater, TT_TemplateCloser);
1929+
EXPECT_TOKEN(Tokens[10], tok::l_paren, TT_LambdaDefinitionLParen);
19101930
EXPECT_TOKEN(Tokens[12], tok::ampamp, TT_PointerOrReference);
19111931
EXPECT_TOKEN(Tokens[15], tok::l_brace, TT_LambdaLBrace);
19121932

0 commit comments

Comments
 (0)