From: mydeveloperday Date: Tue, 19 May 2020 15:43:50 +0000 (+0100) Subject: [clang-format] [PR44476] Add space between template and attribute X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=07740dd08b572af26d9fdeed2615f3a6996bee22;p=android-x86%2Fexternal-llvm-project.git [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 --- diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index 043859a2f5c..2a2c4d75473 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 d128f4b610c..8da99f2f7c8 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;