[clang-format] Indent TT_CtorInitializerColon after requires clauses

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

Differential Revision: https://reviews.llvm.org/D129942
This commit is contained in:
Björn Schäpers 2022-07-13 12:38:38 +02:00
parent 2b04c41b28
commit 3c18a8b3a3
2 changed files with 16 additions and 4 deletions

View File

@ -1190,6 +1190,10 @@ unsigned ContinuationIndenter::getNewLineColumn(const LineState &State) {
break;
}
}
if (NextNonComment->isOneOf(TT_CtorInitializerColon, TT_InheritanceColon,
TT_InheritanceComma)) {
return State.FirstIndent + Style.ConstructorInitializerIndentWidth;
}
if ((PreviousNonComment &&
(PreviousNonComment->ClosesTemplateDeclaration ||
PreviousNonComment->ClosesRequiresClause ||
@ -1264,10 +1268,6 @@ unsigned ContinuationIndenter::getNewLineColumn(const LineState &State) {
Style.BreakInheritanceList == FormatStyle::BILS_AfterColon) {
return CurrentState.Indent;
}
if (NextNonComment->isOneOf(TT_CtorInitializerColon, TT_InheritanceColon,
TT_InheritanceComma)) {
return State.FirstIndent + Style.ConstructorInitializerIndentWidth;
}
if (Previous.is(tok::r_paren) && !Current.isBinaryOperator() &&
!Current.isOneOf(tok::colon, tok::comment)) {
return ContinuationIndent;

View File

@ -24714,6 +24714,18 @@ TEST_F(FormatTest, RequiresClauses) {
"struct S {};",
Style);
Style = getLLVMStyle();
Style.ConstructorInitializerIndentWidth = 4;
Style.BreakConstructorInitializers = FormatStyle::BCIS_BeforeColon;
Style.PackConstructorInitializers = FormatStyle::PCIS_Never;
verifyFormat("constexpr Foo(Foo const &other)\n"
" requires std::is_copy_constructible<T>\n"
" : value{other.value} {\n"
" do_magic();\n"
" do_more_magic();\n"
"}",
Style);
// Not a clause, but we once hit an assert.
verifyFormat("#if 0\n"
"#else\n"