[PATCH] D147377: [clang-format] Don't allow variable decls to have trailing return arrows
Emilia Dreamer via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Apr 3 05:49:08 PDT 2023
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGfd8678996296: [clang-format] Don't allow variable decls to have trailing return arrows (authored by rymiel).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D147377/new/
https://reviews.llvm.org/D147377
Files:
clang/lib/Format/TokenAnnotator.cpp
clang/unittests/Format/TokenAnnotatorTest.cpp
Index: clang/unittests/Format/TokenAnnotatorTest.cpp
===================================================================
--- clang/unittests/Format/TokenAnnotatorTest.cpp
+++ clang/unittests/Format/TokenAnnotatorTest.cpp
@@ -1477,6 +1477,72 @@
EXPECT_TOKEN(Tokens[9], tok::colon, TT_GenericSelectionColon);
}
+TEST_F(TokenAnnotatorTest, UnderstandsTrailingReturnArrow) {
+ auto Tokens = annotate("auto f() -> int;");
+ ASSERT_EQ(Tokens.size(), 8u) << Tokens;
+ EXPECT_TOKEN(Tokens[4], tok::arrow, TT_TrailingReturnArrow);
+
+ Tokens = annotate("auto operator->() -> int;");
+ ASSERT_EQ(Tokens.size(), 9u) << Tokens;
+ EXPECT_TOKEN(Tokens[2], tok::arrow, TT_OverloadedOperator);
+ EXPECT_TOKEN(Tokens[5], tok::arrow, TT_TrailingReturnArrow);
+
+ Tokens = annotate("auto operator++(int) -> int;");
+ ASSERT_EQ(Tokens.size(), 10u) << Tokens;
+ EXPECT_TOKEN(Tokens[6], tok::arrow, TT_TrailingReturnArrow);
+
+ Tokens = annotate("auto operator=() -> int;");
+ ASSERT_EQ(Tokens.size(), 9u) << Tokens;
+ EXPECT_TOKEN(Tokens[5], tok::arrow, TT_TrailingReturnArrow);
+
+ Tokens = annotate("auto operator=(int) -> int;");
+ ASSERT_EQ(Tokens.size(), 10u) << Tokens;
+ EXPECT_TOKEN(Tokens[6], tok::arrow, TT_TrailingReturnArrow);
+
+ Tokens = annotate("auto foo() -> auto { return Val; }");
+ ASSERT_EQ(Tokens.size(), 12u) << Tokens;
+ EXPECT_TOKEN(Tokens[4], tok::arrow, TT_TrailingReturnArrow);
+
+ Tokens = annotate("struct S { auto bar() const -> int; };");
+ ASSERT_EQ(Tokens.size(), 14u) << Tokens;
+ EXPECT_TOKEN(Tokens[8], tok::arrow, TT_TrailingReturnArrow);
+
+ // Not trailing return arrows
+ Tokens = annotate("auto a = b->c;");
+ ASSERT_EQ(Tokens.size(), 8u) << Tokens;
+ EXPECT_TOKEN(Tokens[4], tok::arrow, TT_Unknown);
+
+ Tokens = annotate("auto a = (b)->c;");
+ ASSERT_EQ(Tokens.size(), 10u) << Tokens;
+ EXPECT_TOKEN(Tokens[6], tok::arrow, TT_Unknown);
+
+ Tokens = annotate("auto a = b()->c;");
+ ASSERT_EQ(Tokens.size(), 10u) << Tokens;
+ EXPECT_TOKEN(Tokens[6], tok::arrow, TT_Unknown);
+
+ Tokens = annotate("auto a = b->c();");
+ ASSERT_EQ(Tokens.size(), 10u) << Tokens;
+ EXPECT_TOKEN(Tokens[4], tok::arrow, TT_Unknown);
+
+ Tokens = annotate("decltype(auto) a = b()->c;");
+ ASSERT_EQ(Tokens.size(), 13u) << Tokens;
+ EXPECT_TOKEN(Tokens[9], tok::arrow, TT_Unknown);
+
+ Tokens = annotate("void f() { auto a = b->c(); }");
+ ASSERT_EQ(Tokens.size(), 16u) << Tokens;
+ EXPECT_TOKEN(Tokens[9], tok::arrow, TT_Unknown);
+
+ Tokens = annotate("void f() { auto a = b()->c; }");
+ ASSERT_EQ(Tokens.size(), 16u) << Tokens;
+ EXPECT_TOKEN(Tokens[11], tok::arrow, TT_Unknown);
+
+ // Mixed
+ Tokens = annotate("auto f() -> int { auto a = b()->c; }");
+ ASSERT_EQ(Tokens.size(), 18u) << Tokens;
+ EXPECT_TOKEN(Tokens[4], tok::arrow, TT_TrailingReturnArrow);
+ EXPECT_TOKEN(Tokens[13], tok::arrow, TT_Unknown);
+}
+
TEST_F(TokenAnnotatorTest, UnderstandsVerilogOperators) {
auto Annotate = [this](llvm::StringRef Code) {
return annotate(Code, getLLVMStyle(FormatStyle::LK_Verilog));
Index: clang/lib/Format/TokenAnnotator.cpp
===================================================================
--- clang/lib/Format/TokenAnnotator.cpp
+++ clang/lib/Format/TokenAnnotator.cpp
@@ -1922,7 +1922,7 @@
Style.Language == FormatStyle::LK_Java) {
Current.setType(TT_LambdaArrow);
} else if (Current.is(tok::arrow) && AutoFound &&
- (Line.MustBeDeclaration || Line.InPPDirective) &&
+ (Line.MightBeFunctionDecl || Line.InPPDirective) &&
Current.NestingLevel == 0 &&
!Current.Previous->isOneOf(tok::kw_operator, tok::identifier)) {
// not auto operator->() -> xxx;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D147377.510464.patch
Type: text/x-patch
Size: 3715 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230403/b025bce9/attachment-0001.bin>
More information about the cfe-commits
mailing list