[PATCH] D137223: [clang-format] Remove special case for kw_operator when aligning decls
Emilia Dreamer via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Nov 1 20:15:41 PDT 2022
rymiel created this revision.
rymiel added reviewers: HazardyKnusperkeks, owenpan, MyDeveloperDay.
Herald added a project: All.
rymiel requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
This change breaks no existing tests but does fix the linked issue.
Declarations of operator overloads are annotated with
`TT_FunctionDeclarationName` on the `operator` keyword, which is already
being checked for when aligning, so the extra `kw_operator` doesn't seem
to be necessary. (just for reference, it was added in
rG92b397fb9d55ccdf4632c2b1b15b4a0ee417cf74 <https://reviews.llvm.org/rG92b397fb9d55ccdf4632c2b1b15b4a0ee417cf74> / 92b397fb9d55ccdf4632c2b1b15b4a0ee417cf74)
Fixes https://github.com/llvm/llvm-project/issues/55733
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D137223
Files:
clang/lib/Format/WhitespaceManager.cpp
clang/unittests/Format/FormatTest.cpp
clang/unittests/Format/TokenAnnotatorTest.cpp
Index: clang/unittests/Format/TokenAnnotatorTest.cpp
===================================================================
--- clang/unittests/Format/TokenAnnotatorTest.cpp
+++ clang/unittests/Format/TokenAnnotatorTest.cpp
@@ -437,6 +437,23 @@
ASSERT_EQ(Tokens.size(), 8u) << Tokens;
EXPECT_TOKEN(Tokens[3], tok::string_literal, TT_OverloadedOperator);
EXPECT_TOKEN(Tokens[5], tok::l_paren, TT_OverloadedOperatorLParen);
+
+ Tokens = annotate("int operator+(int);");
+ ASSERT_EQ(Tokens.size(), 8u) << Tokens;
+ EXPECT_TOKEN(Tokens[1], tok::kw_operator, TT_FunctionDeclarationName);
+ EXPECT_TOKEN(Tokens[2], tok::plus, TT_OverloadedOperator);
+ EXPECT_TOKEN(Tokens[3], tok::l_paren, TT_OverloadedOperatorLParen);
+ Tokens = annotate("auto operator=(T&) {}");
+ ASSERT_EQ(Tokens.size(), 10u) << Tokens;
+ EXPECT_TOKEN(Tokens[1], tok::kw_operator, TT_FunctionDeclarationName);
+ EXPECT_TOKEN(Tokens[2], tok::equal, TT_OverloadedOperator);
+ EXPECT_TOKEN(Tokens[3], tok::l_paren, TT_OverloadedOperatorLParen);
+ Tokens = annotate("auto operator()() {}");
+ ASSERT_EQ(Tokens.size(), 9u) << Tokens;
+ EXPECT_TOKEN(Tokens[1], tok::kw_operator, TT_FunctionDeclarationName);
+ EXPECT_TOKEN(Tokens[2], tok::l_paren, TT_OverloadedOperator);
+ EXPECT_TOKEN(Tokens[3], tok::r_paren, TT_OverloadedOperator);
+ EXPECT_TOKEN(Tokens[4], tok::l_paren, TT_OverloadedOperatorLParen);
}
TEST_F(TokenAnnotatorTest, UnderstandsRequiresClausesAndConcepts) {
Index: clang/unittests/Format/FormatTest.cpp
===================================================================
--- clang/unittests/Format/FormatTest.cpp
+++ clang/unittests/Format/FormatTest.cpp
@@ -17936,6 +17936,14 @@
" double bar();\n"
"};\n",
Alignment);
+ // Ensure operators are not aligned if they're being called, not declared
+ verifyFormat("int main() {\n"
+ " int operator()(int a);\n"
+ " double operator+(double a);\n"
+ " operator()(1);\n"
+ " operator+(1.0);\n"
+ "};\n",
+ Alignment);
// http://llvm.org/PR52914
verifyFormat("char *a[] = {\"a\", // comment\n"
" \"bb\"};\n"
Index: clang/lib/Format/WhitespaceManager.cpp
===================================================================
--- clang/lib/Format/WhitespaceManager.cpp
+++ clang/lib/Format/WhitespaceManager.cpp
@@ -870,9 +870,7 @@
AlignTokens(
Style,
[](Change const &C) {
- // tok::kw_operator is necessary for aligning operator overload
- // definitions.
- if (C.Tok->isOneOf(TT_FunctionDeclarationName, tok::kw_operator))
+ if (C.Tok->is(TT_FunctionDeclarationName))
return true;
if (C.Tok->isNot(TT_StartOfName))
return false;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D137223.472491.patch
Type: text/x-patch
Size: 2841 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20221102/16ae6d75/attachment.bin>
More information about the cfe-commits
mailing list