From 07740dd08b572af26d9fdeed2615f3a6996bee22 Mon Sep 17 00:00:00 2001 From: mydeveloperday Date: Tue, 19 May 2020 16:43:50 +0100 Subject: [PATCH] [clang-format] [PR44476] Add space between template and attribute Summary: https://bugs.llvm.org/show_bug.cgi?id=44476 ```template [[nodiscard]] int a() { return 1; }``` gets incorrectly formatted to be ```template [[nodiscard]] int a() { return 1; }``` This revision ensure there is a space between the template and the attribute Reviewed By: JakeMerdichAMD Subscribers: cfe-commits Tags: #clang, #clang-format Differential Revision: https://reviews.llvm.org/D79905 --- clang/lib/Format/TokenAnnotator.cpp | 5 +++++ clang/unittests/Format/FormatTest.cpp | 2 ++ 2 files changed, 7 insertions(+) diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index 043859a..2a2c4d7 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -2896,6 +2896,11 @@ bool TokenAnnotator::spaceRequiredBetween(const AnnotatedLine &Line, // No whitespace in x(/*foo=*/1), except for JavaScript. return Style.Language == FormatStyle::LK_JavaScript || !Left.TokenText.endswith("=*/"); + + // Space between template and attribute. + // e.g. template [[nodiscard]] ... + if (Left.is(TT_TemplateCloser) && Right.is(TT_AttributeSquare)) + return true; if (Right.is(tok::l_paren)) { if ((Left.is(tok::r_paren) && Left.is(TT_AttributeParen)) || (Left.is(tok::r_square) && Left.is(TT_AttributeSquare))) diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index d128f4b..8da99f2 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -8005,6 +8005,8 @@ TEST_F(FormatTest, UnderstandsSquareAttributes) { verifyFormat("@[ [NSArray class] ];"); verifyFormat("@[ [foo enum] ];"); + verifyFormat("template [[nodiscard]] int a() { return 1; }"); + // Make sure we do not parse attributes as lambda introducers. FormatStyle MultiLineFunctions = getLLVMStyle(); MultiLineFunctions.AllowShortFunctionsOnASingleLine = FormatStyle::SFS_None; -- 2.7.4