https://github.com/chaitanyav updated https://github.com/llvm/llvm-project/pull/159277
>From 6ad28d262b32bfeb3f8faec3aa265653612f4f1a Mon Sep 17 00:00:00 2001 From: NagaChaitanya Vellanki <[email protected]> Date: Wed, 17 Sep 2025 00:04:24 -0700 Subject: [PATCH] [clang-format] Fix for BreakTemplateDeclarations and RequiresClausePosition when BreakTemplateDeclarations is set to yes and RequiresClausePosition is SingleLine or WithPreceding requires clause should be on the same line Fixes #150845 --- clang/lib/Format/TokenAnnotator.cpp | 5 +++++ clang/unittests/Format/FormatTest.cpp | 14 ++++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index d97f56751ea69..f22c51af7d3f1 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -5854,6 +5854,11 @@ bool TokenAnnotator::mustBreakBefore(const AnnotatedLine &Line, // concept ... if (Right.is(tok::kw_concept)) return Style.BreakBeforeConceptDeclarations == FormatStyle::BBCDS_Always; + if (Right.is(TT_RequiresClause) && + (Style.RequiresClausePosition == FormatStyle::RCPS_WithPreceding || + Style.RequiresClausePosition == FormatStyle::RCPS_SingleLine)) { + return false; + } return Style.BreakTemplateDeclarations == FormatStyle::BTDS_Yes || (Style.BreakTemplateDeclarations == FormatStyle::BTDS_Leave && Right.NewlinesBefore > 0); diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index d9db06667d802..099485021ff9d 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -10848,6 +10848,14 @@ TEST_F(FormatTest, WrapsTemplateDeclarations) { "public:\n" " E *f();\n" "};"); + AlwaysBreak.RequiresClausePosition = FormatStyle::RCPS_SingleLine; + verifyFormat("template <typename T> requires std::floating_point<T>\n" + "using LerpValue = ClampedValue<T, T{0}, T{1}>;", + AlwaysBreak); + AlwaysBreak.RequiresClausePosition = FormatStyle::RCPS_WithPreceding; + verifyFormat("template <typename T> requires std::floating_point<T>\n" + "using LerpValue = ClampedValue<T, T{0}, T{1}>;", + AlwaysBreak); FormatStyle NeverBreak = getLLVMStyle(); NeverBreak.BreakTemplateDeclarations = FormatStyle::BTDS_No; @@ -10937,12 +10945,6 @@ TEST_F(FormatTest, WrapsTemplateDeclarations) { Style); Style.RequiresClausePosition = FormatStyle::RCPS_WithPreceding; - verifyNoChange("template <auto x>\n" - "requires(x > 1)\n" - "constexpr int with_req(int) {\n" - " return 1;\n" - "}", - Style); verifyFormat("template <auto x> requires(x > 1)\n" "constexpr int with_req(int) {\n" " return 1;\n" _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
