[PATCH] D79354: [clang-format] [PR34574] Handle [[nodiscard]] attribute in class declaration
MyDeveloperDay via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon May 4 12:22:30 PDT 2020
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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D79354.261897.patch
Type: text/x-patch
Size: 1755 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200504/28f134dd/attachment.bin>
More information about the cfe-commits
mailing list