[clang-format] Don't break semi after requires clause ...

..regardless of the chosen style.

Fixes https://github.com/llvm/llvm-project/issues/53818

Differential Revision: https://reviews.llvm.org/D120278
This commit is contained in:
Björn Schäpers 2022-02-21 22:03:55 +01:00
parent 7ebb00a22e
commit 923c3755ea
2 changed files with 11 additions and 1 deletions

View File

@ -3963,7 +3963,7 @@ bool TokenAnnotator::mustBreakBefore(const AnnotatedLine &Line,
return Style.BreakBeforeConceptDeclarations == FormatStyle::BBCDS_Always;
return Style.AlwaysBreakTemplateDeclarations == FormatStyle::BTDS_Yes;
}
if (Left.ClosesRequiresClause) {
if (Left.ClosesRequiresClause && Right.isNot(tok::semi)) {
switch (Style.RequiresClausePosition) {
case FormatStyle::RCPS_OwnLine:
case FormatStyle::RCPS_WithPreceding:

View File

@ -23861,6 +23861,11 @@ TEST_F(FormatTest, RequiresClausesPositions) {
"}",
Style);
verifyFormat("template <typename T>\n"
"int bar(T t)\n"
" requires F<T>;",
Style);
Style.IndentRequiresClause = false;
verifyFormat("template <typename T>\n"
"requires F<T>\n"
@ -23881,6 +23886,7 @@ TEST_F(FormatTest, RequiresClausesPositions) {
verifyFormat("template <typename T> requires Foo<T> struct Bar {};\n"
"template <typename T> requires Foo<T> void bar() {}\n"
"template <typename T> void bar() requires Foo<T> {}\n"
"template <typename T> void bar() requires Foo<T>;\n"
"template <typename T> requires Foo<T> Bar(T) -> Bar<T>;",
Style);
@ -23933,6 +23939,9 @@ TEST_F(FormatTest, RequiresClausesPositions) {
"void bar()\n"
"requires Foo<T> {}\n"
"template <typename T>\n"
"void bar()\n"
"requires Foo<T>;\n"
"template <typename T>\n"
"requires Foo<T> Bar(T) -> Bar<T>;",
Style);
@ -23992,6 +24001,7 @@ TEST_F(FormatTest, RequiresClausesPositions) {
"template <typename T>\n"
"void bar() requires Foo<T>\n"
"{}\n"
"template <typename T> void bar() requires Foo<T>;\n"
"template <typename T> requires Foo<T>\n"
"Bar(T) -> Bar<T>;",
Style);