https://github.com/owenca updated https://github.com/llvm/llvm-project/pull/138440
>From 90803c382ecb040e016034d5798d739739ece03a Mon Sep 17 00:00:00 2001 From: Owen Pan <owenpi...@gmail.com> Date: Sat, 3 May 2025 23:38:18 -0700 Subject: [PATCH 1/4] [clang-format] Don't annotate enum colon as InheritanceColon Fix #61156 --- clang/lib/Format/TokenAnnotator.cpp | 2 +- clang/unittests/Format/TokenAnnotatorTest.cpp | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index caf386cffd25b..e549c98179d3e 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -1423,7 +1423,7 @@ class AnnotatingParser { Tok->setType(TT_BitFieldColon); } else if (Contexts.size() == 1 && !Line.First->isOneOf(tok::kw_enum, tok::kw_case, - tok::kw_default)) { + tok::kw_default, tok::kw_typedef)) { FormatToken *Prev = Tok->getPreviousNonComment(); if (!Prev) break; diff --git a/clang/unittests/Format/TokenAnnotatorTest.cpp b/clang/unittests/Format/TokenAnnotatorTest.cpp index 0fb64ceec5c97..af54716783f54 100644 --- a/clang/unittests/Format/TokenAnnotatorTest.cpp +++ b/clang/unittests/Format/TokenAnnotatorTest.cpp @@ -3666,7 +3666,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) { getGoogleStyle(FormatStyle::LK_JavaScript)); ASSERT_EQ(Tokens.size(), 12u) << Tokens; EXPECT_TOKEN(Tokens[3], tok::identifier, TT_ClassHeadName); - EXPECT_TOKEN(Tokens[4], tok::identifier, TT_Unknown); // Not TT_StartOfName + EXPECT_TOKEN(Tokens[4], tok::identifier, TT_Unknown); // Not TT_StartOfName. EXPECT_TOKEN(Tokens[8], tok::l_brace, TT_ClassLBrace); EXPECT_BRACE_KIND(Tokens[8], BK_Block); EXPECT_TOKEN(Tokens[9], tok::r_brace, TT_ClassRBrace); @@ -3833,7 +3833,7 @@ TEST_F(TokenAnnotatorTest, CppOnlyKeywordInC) { ASSERT_EQ(Tokens.size(), 8u) << Tokens; EXPECT_TOKEN(Tokens[3], tok::identifier, TT_Unknown); // Not tok::kw_new EXPECT_TOKEN(Tokens[4], tok::amp, TT_BinaryOperator); - EXPECT_TOKEN(Tokens[3], tok::identifier, TT_Unknown); // Not TT_StartOfName + EXPECT_TOKEN(Tokens[3], tok::identifier, TT_Unknown); // Not TT_StartOfName. } TEST_F(TokenAnnotatorTest, FunctionTryBlock) { @@ -3947,7 +3947,7 @@ TEST_F(TokenAnnotatorTest, VariableTemplate) { EXPECT_TOKEN(Tokens[4], tok::identifier, TT_VariableTemplate); EXPECT_TOKEN(Tokens[5], tok::less, TT_TemplateOpener); EXPECT_TOKEN(Tokens[7], tok::greater, TT_TemplateCloser); - EXPECT_TOKEN(Tokens[8], tok::r_paren, TT_Unknown); // Not TT_CastRParen + EXPECT_TOKEN(Tokens[8], tok::r_paren, TT_Unknown); // Not TT_CastRParen. EXPECT_TOKEN(Tokens[9], tok::plus, TT_BinaryOperator); } @@ -4033,6 +4033,12 @@ TEST_F(TokenAnnotatorTest, UserDefinedLiteral) { EXPECT_EQ(Tokens[3]->TokenText, "2_$"); } +TEST_F(TokenAnnotatorTest, EnumColonInTypedef) { + auto Tokens = annotate("typedef enum : int {} foo;"); + ASSERT_EQ(Tokens.size(), 9u) << Tokens; + EXPECT_TOKEN(Tokens[2], tok::colon, TT_Unknown); // Not TT_InheritanceColon. +} + } // namespace } // namespace format } // namespace clang >From a756b28be40457c07294df1af9808b193aa4e570 Mon Sep 17 00:00:00 2001 From: Owen Pan <owenpi...@gmail.com> Date: Mon, 5 May 2025 01:54:13 -0700 Subject: [PATCH 2/4] Use a more narrow fix instead --- clang/lib/Format/TokenAnnotator.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index e549c98179d3e..23ac62d7aaa81 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -1423,7 +1423,7 @@ class AnnotatingParser { Tok->setType(TT_BitFieldColon); } else if (Contexts.size() == 1 && !Line.First->isOneOf(tok::kw_enum, tok::kw_case, - tok::kw_default, tok::kw_typedef)) { + tok::kw_default)) { FormatToken *Prev = Tok->getPreviousNonComment(); if (!Prev) break; @@ -1437,7 +1437,7 @@ class AnnotatingParser { break; if (PrevPrev && PrevPrev->isOneOf(tok::r_paren, tok::kw_noexcept)) Tok->setType(TT_CtorInitializerColon); - } else { + } else if (!Prev->endsSequence(tok::kw_enum, tok::kw_typedef)) { Tok->setType(TT_InheritanceColon); if (Prev->isAccessSpecifierKeyword()) Line.Type = LT_AccessModifier; >From dbf04484bda3c0f29d3a9890cdc16e72b536f1ab Mon Sep 17 00:00:00 2001 From: Owen Pan <owenpi...@gmail.com> Date: Mon, 5 May 2025 23:23:27 -0700 Subject: [PATCH 3/4] Handle `typedef enum` not immediately followed by colon --- clang/lib/Format/TokenAnnotator.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index 23ac62d7aaa81..ecb4bda276402 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -1422,8 +1422,9 @@ class AnnotatingParser { } else if (CurrentToken && CurrentToken->is(tok::numeric_constant)) { Tok->setType(TT_BitFieldColon); } else if (Contexts.size() == 1 && - !Line.First->isOneOf(tok::kw_enum, tok::kw_case, - tok::kw_default)) { + !Line.getFirstNonComment()->isOneOf(tok::kw_enum, tok::kw_case, + tok::kw_default) && + !Line.startsWith(tok::kw_typedef, tok::kw_enum)) { FormatToken *Prev = Tok->getPreviousNonComment(); if (!Prev) break; @@ -1437,7 +1438,7 @@ class AnnotatingParser { break; if (PrevPrev && PrevPrev->isOneOf(tok::r_paren, tok::kw_noexcept)) Tok->setType(TT_CtorInitializerColon); - } else if (!Prev->endsSequence(tok::kw_enum, tok::kw_typedef)) { + } else { Tok->setType(TT_InheritanceColon); if (Prev->isAccessSpecifierKeyword()) Line.Type = LT_AccessModifier; >From d2ce91e98cfec077d96c466b50ed4231d815e987 Mon Sep 17 00:00:00 2001 From: Owen Pan <owenpi...@gmail.com> Date: Mon, 5 May 2025 23:34:35 -0700 Subject: [PATCH 4/4] Delete unrelated changes --- clang/unittests/Format/TokenAnnotatorTest.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/clang/unittests/Format/TokenAnnotatorTest.cpp b/clang/unittests/Format/TokenAnnotatorTest.cpp index af54716783f54..9a7a4307c010f 100644 --- a/clang/unittests/Format/TokenAnnotatorTest.cpp +++ b/clang/unittests/Format/TokenAnnotatorTest.cpp @@ -3666,7 +3666,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) { getGoogleStyle(FormatStyle::LK_JavaScript)); ASSERT_EQ(Tokens.size(), 12u) << Tokens; EXPECT_TOKEN(Tokens[3], tok::identifier, TT_ClassHeadName); - EXPECT_TOKEN(Tokens[4], tok::identifier, TT_Unknown); // Not TT_StartOfName. + EXPECT_TOKEN(Tokens[4], tok::identifier, TT_Unknown); // Not TT_StartOfName EXPECT_TOKEN(Tokens[8], tok::l_brace, TT_ClassLBrace); EXPECT_BRACE_KIND(Tokens[8], BK_Block); EXPECT_TOKEN(Tokens[9], tok::r_brace, TT_ClassRBrace); @@ -3833,7 +3833,7 @@ TEST_F(TokenAnnotatorTest, CppOnlyKeywordInC) { ASSERT_EQ(Tokens.size(), 8u) << Tokens; EXPECT_TOKEN(Tokens[3], tok::identifier, TT_Unknown); // Not tok::kw_new EXPECT_TOKEN(Tokens[4], tok::amp, TT_BinaryOperator); - EXPECT_TOKEN(Tokens[3], tok::identifier, TT_Unknown); // Not TT_StartOfName. + EXPECT_TOKEN(Tokens[3], tok::identifier, TT_Unknown); // Not TT_StartOfName } TEST_F(TokenAnnotatorTest, FunctionTryBlock) { @@ -3947,7 +3947,7 @@ TEST_F(TokenAnnotatorTest, VariableTemplate) { EXPECT_TOKEN(Tokens[4], tok::identifier, TT_VariableTemplate); EXPECT_TOKEN(Tokens[5], tok::less, TT_TemplateOpener); EXPECT_TOKEN(Tokens[7], tok::greater, TT_TemplateCloser); - EXPECT_TOKEN(Tokens[8], tok::r_paren, TT_Unknown); // Not TT_CastRParen. + EXPECT_TOKEN(Tokens[8], tok::r_paren, TT_Unknown); // Not TT_CastRParen EXPECT_TOKEN(Tokens[9], tok::plus, TT_BinaryOperator); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits