-
Notifications
You must be signed in to change notification settings - Fork 15k
[clang-format] Fix for BreakTemplateDeclarations and RequiresClausePosition #159277
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
@llvm/pr-subscribers-clang-format Author: NagaChaitanya Vellanki (chaitanyav) Changeswhen BreakTemplateDeclarations is set to yes and Fixes #150845 Full diff: https://github.com/llvm/llvm-project/pull/159277.diff 2 Files Affected:
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;
|
7eb6b33 to
c73c23f
Compare
c73c23f to
52a2d33
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, but wait if someone else wants to say something.
|
@llvm/pr-subscribers-clang-format please review. |
52a2d33 to
6ad28d2
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See #150845 (comment).
6ad28d2 to
61e2dc1
Compare
…sition
when BreakTemplateDeclarations is set to yes and
RequiresClausePosition is SingleLine or WithPreceding
requires clause should be on the same line
Fixes llvm#150845
61e2dc1 to
bee11d3
Compare
|
Closing this PR since its not a bug as per #150845 (comment) |
when BreakTemplateDeclarations is set to yes and
RequiresClausePosition is SingleLine or WithPreceding
requires clause should be on the same line
Fixes #150845