- 
                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