https://github.com/chaitanyav updated https://github.com/llvm/llvm-project/pull/159277
>From 44820a90771957eea02fb88a65dfe5d2e348f22d Mon Sep 17 00:00:00 2001 From: NagaChaitanya Vellanki <pnag...@protonmail.com> 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 | 13 +++++++++++++ 2 files changed, 18 insertions(+) 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..efbc86af72c17 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -10848,6 +10848,19 @@ TEST_F(FormatTest, WrapsTemplateDeclarations) { "public:\n" " E *f();\n" "};"); + Style.RequiresClausePosition = FormatStyle::RCPS_SingleLine; + verifyNoChange("template <typename T> requires std::floating_point<T>\n" + "using LerpValue = ClampedValue<T, T{ 0 }, T{ 1 }>;", + Style); + Style.RequiresClausePosition = FormatStyle::RCPS_WithPreceding; + verifyNoChange("template <typename T> requires std::floating_point<T>\n" + "using LerpValue = ClampedValue<T, T{ 0 }, T{ 1 }>;", + Style); + Style.RequiresClausePosition = FormatStyle::RCPS_OwnLine; + verifyFormat("template <typename T>\n" + "requires std::floating_point<T>\n" + "using LerpValue = ClampedValue<T, T{ 0 }, T{ 1 }>;", + Style); FormatStyle NeverBreak = getLLVMStyle(); NeverBreak.BreakTemplateDeclarations = FormatStyle::BTDS_No; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits