This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rGf54d42abcf82: [clang-format] Don't put `noexcept` on empty line following constructor (authored by rymiel, committed by HazardyKnusperkeks).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D132189/new/ https://reviews.llvm.org/D132189 Files: clang/lib/Format/TokenAnnotator.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 @@ -788,6 +788,19 @@ EXPECT_TOKEN(Tokens[7], tok::l_brace, TT_LambdaLBrace); } +TEST_F(TokenAnnotatorTest, UnderstandsFunctionAnnotations) { + auto Tokens = annotate("template <typename T>\n" + "DEPRECATED(\"Use NewClass::NewFunction instead.\")\n" + "string OldFunction(const string ¶meter) {}"); + ASSERT_EQ(Tokens.size(), 20u) << Tokens; + EXPECT_TOKEN(Tokens[8], tok::r_paren, TT_FunctionAnnotationRParen); + + Tokens = annotate("template <typename T>\n" + "A(T) noexcept;"); + ASSERT_EQ(Tokens.size(), 12u) << Tokens; + EXPECT_TOKEN(Tokens[8], tok::r_paren, TT_Unknown); +} + TEST_F(TokenAnnotatorTest, UnderstandsVerilogOperators) { auto Annotate = [this](llvm::StringRef Code) { return annotate(Code, getLLVMStyle(FormatStyle::LK_Verilog)); Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -9607,6 +9607,15 @@ verifyFormat("template <typename T> // T can be A, B or C.\n" "struct C {};", AlwaysBreak); + verifyFormat("template <typename T>\n" + "C(T) noexcept;", + AlwaysBreak); + verifyFormat("template <typename T>\n" + "ClassName(T) noexcept;", + AlwaysBreak); + verifyFormat("template <typename T>\n" + "POOR_NAME(T) noexcept;", + AlwaysBreak); verifyFormat("template <enum E> class A {\n" "public:\n" " E *f();\n" @@ -9617,6 +9626,9 @@ verifyFormat("template <typename T> class C {};", NeverBreak); verifyFormat("template <typename T> void f();", NeverBreak); verifyFormat("template <typename T> void f() {}", NeverBreak); + verifyFormat("template <typename T> C(T) noexcept;", NeverBreak); + verifyFormat("template <typename T> ClassName(T) noexcept;", NeverBreak); + verifyFormat("template <typename T> POOR_NAME(T) noexcept;", NeverBreak); verifyFormat("template <typename T>\nvoid foo(aaaaaaaaaaaaaaaaaaaaaaaaaa " "bbbbbbbbbbbbbbbbbbbb) {}", NeverBreak); Index: clang/lib/Format/TokenAnnotator.cpp =================================================================== --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -1924,7 +1924,7 @@ !Current.Next->isBinaryOperator() && !Current.Next->isOneOf(tok::semi, tok::colon, tok::l_brace, tok::comma, tok::period, tok::arrow, - tok::coloncolon)) { + tok::coloncolon, tok::kw_noexcept)) { if (FormatToken *AfterParen = Current.MatchingParen->Next) { // Make sure this isn't the return type of an Obj-C block declaration if (AfterParen->isNot(tok::caret)) {
Index: clang/unittests/Format/TokenAnnotatorTest.cpp =================================================================== --- clang/unittests/Format/TokenAnnotatorTest.cpp +++ clang/unittests/Format/TokenAnnotatorTest.cpp @@ -788,6 +788,19 @@ EXPECT_TOKEN(Tokens[7], tok::l_brace, TT_LambdaLBrace); } +TEST_F(TokenAnnotatorTest, UnderstandsFunctionAnnotations) { + auto Tokens = annotate("template <typename T>\n" + "DEPRECATED(\"Use NewClass::NewFunction instead.\")\n" + "string OldFunction(const string ¶meter) {}"); + ASSERT_EQ(Tokens.size(), 20u) << Tokens; + EXPECT_TOKEN(Tokens[8], tok::r_paren, TT_FunctionAnnotationRParen); + + Tokens = annotate("template <typename T>\n" + "A(T) noexcept;"); + ASSERT_EQ(Tokens.size(), 12u) << Tokens; + EXPECT_TOKEN(Tokens[8], tok::r_paren, TT_Unknown); +} + TEST_F(TokenAnnotatorTest, UnderstandsVerilogOperators) { auto Annotate = [this](llvm::StringRef Code) { return annotate(Code, getLLVMStyle(FormatStyle::LK_Verilog)); Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -9607,6 +9607,15 @@ verifyFormat("template <typename T> // T can be A, B or C.\n" "struct C {};", AlwaysBreak); + verifyFormat("template <typename T>\n" + "C(T) noexcept;", + AlwaysBreak); + verifyFormat("template <typename T>\n" + "ClassName(T) noexcept;", + AlwaysBreak); + verifyFormat("template <typename T>\n" + "POOR_NAME(T) noexcept;", + AlwaysBreak); verifyFormat("template <enum E> class A {\n" "public:\n" " E *f();\n" @@ -9617,6 +9626,9 @@ verifyFormat("template <typename T> class C {};", NeverBreak); verifyFormat("template <typename T> void f();", NeverBreak); verifyFormat("template <typename T> void f() {}", NeverBreak); + verifyFormat("template <typename T> C(T) noexcept;", NeverBreak); + verifyFormat("template <typename T> ClassName(T) noexcept;", NeverBreak); + verifyFormat("template <typename T> POOR_NAME(T) noexcept;", NeverBreak); verifyFormat("template <typename T>\nvoid foo(aaaaaaaaaaaaaaaaaaaaaaaaaa " "bbbbbbbbbbbbbbbbbbbb) {}", NeverBreak); Index: clang/lib/Format/TokenAnnotator.cpp =================================================================== --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -1924,7 +1924,7 @@ !Current.Next->isBinaryOperator() && !Current.Next->isOneOf(tok::semi, tok::colon, tok::l_brace, tok::comma, tok::period, tok::arrow, - tok::coloncolon)) { + tok::coloncolon, tok::kw_noexcept)) { if (FormatToken *AfterParen = Current.MatchingParen->Next) { // Make sure this isn't the return type of an Obj-C block declaration if (AfterParen->isNot(tok::caret)) {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits