[clang] [clang-format] Fix a bug in annotating ObjCMethodSpecifier (PR #127159)
Owen Pan via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 13 19:00:16 PST 2025
https://github.com/owenca created https://github.com/llvm/llvm-project/pull/127159
Fixes #58202.
>From 957c2112b68a578baf45bbc2fe4bb657c6ea499e Mon Sep 17 00:00:00 2001
From: Owen Pan <owenpiano at gmail.com>
Date: Thu, 13 Feb 2025 18:57:38 -0800
Subject: [PATCH] [clang-format] Fix a bug in annotating ObjCMethodSpecifier
Fixes #58202.
---
clang/lib/Format/TokenAnnotator.cpp | 2 +-
clang/unittests/Format/FormatTestObjC.cpp | 7 +++++++
clang/unittests/Format/TokenAnnotatorTest.cpp | 7 +++++++
3 files changed, 15 insertions(+), 1 deletion(-)
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;
More information about the cfe-commits
mailing list