[clang] [clang-format] Fix a bug in annotating ObjCMethodSpecifier (PR #127159)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 13 19:00:49 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-format
Author: Owen Pan (owenca)
<details>
<summary>Changes</summary>
Fixes #<!-- -->58202.
---
Full diff: https://github.com/llvm/llvm-project/pull/127159.diff
3 Files Affected:
- (modified) clang/lib/Format/TokenAnnotator.cpp (+1-1)
- (modified) clang/unittests/Format/FormatTestObjC.cpp (+7)
- (modified) clang/unittests/Format/TokenAnnotatorTest.cpp (+7)
``````````diff
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;
``````````
</details>
https://github.com/llvm/llvm-project/pull/127159
More information about the cfe-commits
mailing list