Author: Owen Pan Date: 2025-02-14T21:10:08-08:00 New Revision: 3063153b5643e5ed04e8a9d7b50feecf3eba325e
URL: https://github.com/llvm/llvm-project/commit/3063153b5643e5ed04e8a9d7b50feecf3eba325e DIFF: https://github.com/llvm/llvm-project/commit/3063153b5643e5ed04e8a9d7b50feecf3eba325e.diff LOG: [clang-format] Fix a bug in annotating ObjCMethodSpecifier (#127159) Fixes #58202. Added: Modified: clang/lib/Format/TokenAnnotator.cpp clang/unittests/Format/FormatTestObjC.cpp clang/unittests/Format/TokenAnnotatorTest.cpp Removed: ################################################################################ diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index b3540f39e6f69..069fd40e2834c 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -1313,7 +1313,7 @@ class AnnotatingParser { switch (bool IsIf = false; Tok->Tok.getKind()) { case tok::plus: case tok::minus: - if (!Tok->Previous && Line.MustBeDeclaration) + if (!Tok->getPreviousNonComment() && Line.MustBeDeclaration) Tok->setType(TT_ObjCMethodSpecifier); break; case tok::colon: diff --git a/clang/unittests/Format/FormatTestObjC.cpp b/clang/unittests/Format/FormatTestObjC.cpp index 9b6f0c396d4db..f7f73db62045c 100644 --- a/clang/unittests/Format/FormatTestObjC.cpp +++ b/clang/unittests/Format/FormatTestObjC.cpp @@ -567,6 +567,13 @@ TEST_F(FormatTestObjC, FormatObjCMethodDeclarations) { " error:(NSError **)theError {\n" "}"); verifyFormat("+ (instancetype)new;"); + + verifyFormat("/*\n" + " */\n" + "- (void)foo;", + "/*\n" + " */- (void)foo;"); + Style.ColumnLimit = 60; verifyFormat("- (instancetype)initXxxxxx:(id<x>)x\n" " y:(id<yyyyyyyyyyyyyyyyyyyy>)y\n" diff --git a/clang/unittests/Format/TokenAnnotatorTest.cpp b/clang/unittests/Format/TokenAnnotatorTest.cpp index 5ab0867490122..7b489b1764cb2 100644 --- a/clang/unittests/Format/TokenAnnotatorTest.cpp +++ b/clang/unittests/Format/TokenAnnotatorTest.cpp @@ -1849,6 +1849,13 @@ TEST_F(TokenAnnotatorTest, UnderstandsObjCMethodExpr) { EXPECT_TOKEN(Tokens[15], tok::greater, TT_BinaryOperator); } +TEST_F(TokenAnnotatorTest, UnderstandsObjCMethodDecl) { + auto Tokens = annotate("/**/ - (void)foo;"); + ASSERT_EQ(Tokens.size(), 8u) << Tokens; + EXPECT_TOKEN(Tokens[1], tok::minus, TT_ObjCMethodSpecifier); + EXPECT_TOKEN(Tokens[5], tok::identifier, TT_SelectorName); +} + TEST_F(TokenAnnotatorTest, UnderstandsLambdas) { auto Tokens = annotate("[]() constexpr {}"); ASSERT_EQ(Tokens.size(), 8u) << Tokens; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits