MyDeveloperDay created this revision. MyDeveloperDay added reviewers: krasimir, sammccall, marejde, mitchell-stellar. MyDeveloperDay added projects: clang, clang-format.
https://bugs.llvm.org/show_bug.cgi?id=34574 https://bugs.llvm.org/show_bug.cgi?id=38401 template <typename T> class [[nodiscard]] result { public: result(T&&) { } }; formats incorrectly to template <typename T> class [[nodiscard]] result{public : result(T &&){}}; Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D79354 Files: clang/lib/Format/UnwrappedLineParser.cpp clang/unittests/Format/FormatTest.cpp Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -7636,6 +7636,10 @@ verifyFormat("void f() [[deprecated(\"so sorry\")]];"); verifyFormat("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" " [[unused]] aaaaaaaaaaaaaaaaaaaaaaa(int i);"); + verifyFormat("[[nodiscard]] bool f() { return false; }"); + verifyFormat("class [[nodiscard]] f {\npublic:\n f() {}\n}"); + verifyFormat("class [[deprecated(\"so sorry\")]] f {\npublic:\n f() {}\n}"); + verifyFormat("class [[gnu::unused]] f {\npublic:\n f() {}\n}"); // Make sure we do not mistake attributes for array subscripts. verifyFormat("int a() {}\n" Index: clang/lib/Format/UnwrappedLineParser.cpp =================================================================== --- clang/lib/Format/UnwrappedLineParser.cpp +++ clang/lib/Format/UnwrappedLineParser.cpp @@ -2401,10 +2401,14 @@ // it is often token-pasted. while (FormatTok->isOneOf(tok::identifier, tok::coloncolon, tok::hashhash, tok::kw___attribute, tok::kw___declspec, - tok::kw_alignas) || + tok::kw_alignas, tok::l_square) || ((Style.Language == FormatStyle::LK_Java || Style.Language == FormatStyle::LK_JavaScript) && FormatTok->isOneOf(tok::period, tok::comma))) { + + if (FormatTok->is(tok::l_square)) { + parseSquare(); + } if (Style.Language == FormatStyle::LK_JavaScript && FormatTok->isOneOf(Keywords.kw_extends, Keywords.kw_implements)) { // JavaScript/TypeScript supports inline object types in
Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -7636,6 +7636,10 @@ verifyFormat("void f() [[deprecated(\"so sorry\")]];"); verifyFormat("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" " [[unused]] aaaaaaaaaaaaaaaaaaaaaaa(int i);"); + verifyFormat("[[nodiscard]] bool f() { return false; }"); + verifyFormat("class [[nodiscard]] f {\npublic:\n f() {}\n}"); + verifyFormat("class [[deprecated(\"so sorry\")]] f {\npublic:\n f() {}\n}"); + verifyFormat("class [[gnu::unused]] f {\npublic:\n f() {}\n}"); // Make sure we do not mistake attributes for array subscripts. verifyFormat("int a() {}\n" Index: clang/lib/Format/UnwrappedLineParser.cpp =================================================================== --- clang/lib/Format/UnwrappedLineParser.cpp +++ clang/lib/Format/UnwrappedLineParser.cpp @@ -2401,10 +2401,14 @@ // it is often token-pasted. while (FormatTok->isOneOf(tok::identifier, tok::coloncolon, tok::hashhash, tok::kw___attribute, tok::kw___declspec, - tok::kw_alignas) || + tok::kw_alignas, tok::l_square) || ((Style.Language == FormatStyle::LK_Java || Style.Language == FormatStyle::LK_JavaScript) && FormatTok->isOneOf(tok::period, tok::comma))) { + + if (FormatTok->is(tok::l_square)) { + parseSquare(); + } if (Style.Language == FormatStyle::LK_JavaScript && FormatTok->isOneOf(Keywords.kw_extends, Keywords.kw_implements)) { // JavaScript/TypeScript supports inline object types in
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits