<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/54428>54428</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Format] Sibling requires-expressions in requires-clause should not indent like a continuation
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
JohelEGP
</td>
</tr>
</table>
<pre>
See `.clang-format` at https://github.com/mpusz/units/blob/144f6951c09ee721167cc3a37518d20a52c0587f/.clang-format and diff https://github.com/mpusz/units/pull/339/files#diff-9f4b7f16a126a4c94a18b1da221e9b3a476fb7a3131e091d1d8d84aa026cc657R288, reproduced below.
Actual diff:
```diff
template<typename CastSpec, typename K, typename U, typename Rep>
[[nodiscard]] constexpr QuantityKind auto quantity_kind_cast(const quantity_kind<K, U, Rep>& qk)
- requires requires { requires is_specialization_of<CastSpec, quantity_kind>;
- requires requires { quantity_cast<typename CastSpec::quantity_type>(qk.common()); }; } ||
- requires { requires Kind<CastSpec>; requires UnitOf<U, typename CastSpec::dimension>; } ||
- requires { quantity_cast<CastSpec>(qk.common()); } // TODO: Simplify when Clang catches up.
+ requires requires {
+ requires is_specialization_of<CastSpec, quantity_kind>;
+ requires requires { quantity_cast<typename CastSpec::quantity_type>(qk.common()); };
+ } || requires {
+ requires Kind<CastSpec>;
+ requires UnitOf<U, typename CastSpec::dimension>;
+ } || requires { quantity_cast<CastSpec>(qk.common()); } // TODO: Simplify when Clang catches up.
{
}
```
More reasonable diff has the components of a _requires-clause_ at the same level:
```diff
template<typename CastSpec, typename K, typename U, typename Rep>
[[nodiscard]] constexpr QuantityKind auto quantity_kind_cast(const quantity_kind<K, U, Rep>& qk)
- requires requires { requires is_specialization_of<CastSpec, quantity_kind>;
- requires requires { quantity_cast<typename CastSpec::quantity_type>(qk.common()); }; } ||
- requires { requires Kind<CastSpec>; requires UnitOf<U, typename CastSpec::dimension>; } ||
- requires { quantity_cast<CastSpec>(qk.common()); } // TODO: Simplify when Clang catches up.
+ requires requires {
+ requires is_specialization_of<CastSpec, quantity_kind>;
+ requires requires { quantity_cast<typename CastSpec::quantity_type>(qk.common()); };
+ } ||
+ requires {
+ requires Kind<CastSpec>;
+ requires UnitOf<U, typename CastSpec::dimension>;
+ } || requires { quantity_cast<CastSpec>(qk.common()); } // TODO: Simplify when Clang catches up.
{
}
```
`.clang-format`:
```yaml
########################################################################################
# NOTE: At least clang-format-15 is needed to format the code of this project correctly
########################################################################################
---
BasedOnStyle: Google
---
Language: Cpp
AccessModifierOffset: -2
# AlignAfterOpenBracket: Align
# AlignArrayOfStructures: None
# AlignConsecutiveMacros: None
# AlignConsecutiveAssignments: None
# AlignConsecutiveBitFields: None
# AlignConsecutiveDeclarations: None
# AlignEscapedNewlines: Left
# AlignOperands: Align
# AlignTrailingComments: true
# AllowAllArgumentsOnNextLine: true
# AllowAllParametersOfDeclarationOnNextLine: true
# AllowShortEnumsOnASingleLine: true
# AllowShortBlocksOnASingleLine: Never
# AllowShortCaseLabelsOnASingleLine: false
# AllowShortFunctionsOnASingleLine: All
# AllowShortLambdasOnASingleLine: All
# AllowShortIfStatementsOnASingleLine: WithoutElse
# AllowShortLoopsOnASingleLine: true
# AlwaysBreakAfterDefinitionReturnType: None
# AlwaysBreakAfterReturnType: None
# AlwaysBreakBeforeMultilineStrings: true
# AlwaysBreakTemplateDeclarations: Yes
# AttributeMacros:
# - __capability
# BinPackArguments: true
# BinPackParameters: true
BraceWrapping:
# AfterCaseLabel: false
# AfterClass: false
# AfterControlStatement: Never
# AfterEnum: false
AfterFunction: true
# AfterNamespace: false
# AfterObjCDeclaration: false
# AfterStruct: false
# AfterUnion: false
# AfterExternBlock: false
# BeforeCatch: false
# BeforeElse: false
# BeforeLambdaBody: false
# BeforeWhile: false
# IndentBraces: false
# SplitEmptyFunction: true
SplitEmptyRecord: false
# SplitEmptyNamespace: true
# BreakBeforeBinaryOperators: None
# BreakBeforeConceptDeclarations: Always
BreakBeforeBraces: Custom
# BreakBeforeInheritanceComma: false
BreakInheritanceList: AfterColon
# BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: true
BreakConstructorInitializers: AfterColon
# BreakAfterJavaFieldAnnotations: false
# BreakStringLiterals: true
ColumnLimit: 120
CommentPragmas: '^ NOLINT'
# CommentPragmas: '^ IWYU pragma:'
QualifierAlignment: Left
# CompactNamespaces: false
# ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 2
# Cpp11BracedListStyle: true
DeriveLineEnding: false
DerivePointerAlignment: false
# DisableFormat: false
# EmptyLineAfterAccessModifier: Never
EmptyLineBeforeAccessModifier: Leave
# ExperimentalAutoDetectBinPacking: false
# PackConstructorInitializers: NextLine
# ConstructorInitializerAllOnOneLineOrOnePerLine: false
# AllowAllConstructorInitializersOnNextLine: true
# FixNamespaceComments: true
# ForEachMacros:
# - foreach
# - Q_FOREACH
# - BOOST_FOREACH
# IfMacros:
# - KJ_IF_MAYBE
IncludeBlocks: Merge
IncludeCategories:
- Regex: '^".*'
Priority: 1
- Regex: '^".+/.*'
Priority: 2
- Regex: '^<.+/.*'
Priority: 3
- Regex: '^<.*\.h>'
Priority: 4
- Regex: '^<.*'
Priority: 5
# IncludeIsMainRegex: '([-_](test|unittest))?$'
# IncludeIsMainSourceRegex: ''
# IndentAccessModifiers: false
# IndentCaseLabels: true
# IndentCaseBlocks: false
# IndentGotoLabels: true
# IndentPPDirectives: None
# IndentExternBlock: AfterExternBlock
# IndentRequiresClause: true
# IndentWidth: 2
# IndentWrappedFunctionNames: false
# InsertBraces: false
# InsertTrailingCommas: None
# JavaScriptQuotes: Leave
# JavaScriptWrapImports: true
# KeepEmptyLinesAtTheStartOfBlocks: false
# LambdaBodyIndentation: Signature
# MacroBlockBegin: ''
# MacroBlockEnd: ''
MaxEmptyLinesToKeep: 2
# NamespaceIndentation: None
# ObjCBinPackProtocolList: Never
# ObjCBlockIndentWidth: 2
# ObjCBreakBeforeNestedBlockParam: true
# ObjCSpaceAfterProperty: false
# ObjCSpaceBeforeProtocolList: true
# PenaltyBreakAssignment: 2
# PenaltyBreakBeforeFirstCallParameter: 1
# PenaltyBreakComment: 300
# PenaltyBreakFirstLessLess: 120
# PenaltyBreakOpenParenthesis: 0
# PenaltyBreakString: 1000
# PenaltyBreakTemplateDeclaration: 10
# PenaltyExcessCharacter: 1000000
# PenaltyReturnTypeOnItsOwnLine: 200
# PenaltyIndentedWhitespace: 0
# PointerAlignment: Left
# PPIndentWidth: -1
# RawStringFormats:
# - Language: Cpp
# Delimiters:
# - cc
# - CC
# - cpp
# - Cpp
# - CPP
# - 'c++'
# - 'C++'
# CanonicalDelimiter: ''
# BasedOnStyle: google
# - Language: TextProto
# Delimiters:
# - pb
# - PB
# - proto
# - PROTO
# EnclosingFunctions:
# - EqualsProto
# - EquivToProto
# - PARSE_PARTIAL_TEXT_PROTO
# - PARSE_TEST_PROTO
# - PARSE_TEXT_PROTO
# - ParseTextOrDie
# - ParseTextProtoOrDie
# - ParseTestProto
# - ParsePartialTestProto
# CanonicalDelimiter: pb
# BasedOnStyle: google
# ReferenceAlignment: Pointer
# ReflowComments: true
# RemoveBracesLLVM: false
# RequiresClausePosition: OwnLine
# SeparateDefinitionBlocks: Leave
# ShortNamespaceLines: 1
# SortIncludes: CaseSensitive
# SortJavaStaticImport: Before
# SortUsingDeclarations: true
# SpaceAfterCStyleCast: false
# SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: false
# SpaceBeforeAssignmentOperators: true
# SpaceBeforeCaseColon: false
# SpaceBeforeCpp11BracedList: false
# SpaceBeforeCtorInitializerColon: true
# SpaceBeforeInheritanceColon: true
# SpaceBeforeParens: ControlStatements
SpaceBeforeParensOptions:
# AfterControlStatements: true
# AfterForeachMacros: true
# AfterFunctionDefinitionName: false
# AfterFunctionDeclarationName: false
# AfterIfMacros: true
# AfterOverloadedOperator: false
AfterRequiresInClause: true
# AfterRequiresInExpression: false
# BeforeNonEmptyParentheses: false
# SpaceAroundPointerQualifiers: Default
# SpaceBeforeRangeBasedForLoopColon: true
# SpaceInEmptyBlock: false
# SpaceInEmptyParentheses: false
# SpacesBeforeTrailingComments: 2
# SpacesInAngles: Never
# SpacesInConditionalStatement: false
# SpacesInContainerLiterals: true
# SpacesInCStyleCastParentheses: false
# SpacesInLineCommentPrefix:
# Minimum: 1
# Maximum: -1
# SpacesInParentheses: false
# SpacesInSquareBrackets: false
# SpaceBeforeSquareBrackets: false
# BitFieldColonSpacing: Both
Standard: Latest
# StatementAttributeLikeMacros:
# - Q_EMIT
# StatementMacros:
# - Q_UNUSED
# - QT_REQUIRE_VERSION
# TabWidth: 8
# UseCRLF: false
# UseTab: Never
# WhitespaceSensitiveMacros:
# - STRINGIZE
# - PP_STRINGIZE
# - BOOST_PP_STRINGIZE
# - NS_SWIFT_NAME
# - CF_SWIFT_NAME
# ...
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztWltz4jgW_jXkxUUKm_tDHsCYXqYJ0ECmd_aFErYAbYzktuUkzK_fI8l3ZELvbk3V1naKcLE-HR0dnbu9Z97laYOx0ei1Hl0f0WPzwMIz4vDbQNw4cR5EjfaoYU3hdST8FO8fXXaGH-cgjv6Ez5gSHsHn3md7-DA7nUNv2DXd1hDjvmWavb7rtlG73zUHntVCXcttdQf9A0BLCxqIeoZHDoefWTOIfR8-2u0hvB-Ij-FiWxBpDg-dff9g9pBp9VDHHXaQOdibHrIsEw_3bdTp9w77PmqbbRO3hqZnegNv0EGoZfVct9ftr63BoGHZRoiDkHmxiz1jj332_thoTRqtkXofuTxGvuRa8KtGei31klflJYPjc-Ajjhttm18CTNEZGzaK-CbArlgku_i19Oul9GuNg0bbSSg2umN4UeaRyEWh1-hO4GW4jEYcfwSh8S1GlBN--UpAqijmzPiRXNm9wqWdC6s3rIGcUB4CHiUXcvFkTatn_HhtWEO1eNMAqfyISYij_EujP85_kGgXwdYI8smfiBNGdwwEZBe3XFnTabTHGfXin36lbLbch06qcBztUQYT43Ijgx-vQpXOjMJ3sSN4tcdAc5J8wL8tXle86Hf6VUksX1ZsJB9-AT1diq2Xj7LMpUfOmEYgpWT23VxUpVDk4sZODUNZlrFdTpawvrEhoJ7kcDHeT5gatjBKw0XcPcE6cZBqvDWuOY3CuI7T_0QZaon-Bdqg4yA_mjskUOZYqyn3TPx3dKiWbs0G_lpVykUmRV12m0X_-sxCDHyiiFG093ESHlBk8BMGZ3cOGMWURwY7GMjYpRtqQliJI7wT8UsAIyEuH79h_5eT_uWkfznp_x8nrRv9CaH8hMv-r3vr_y1Hrakern3tBZ39dKvtXy_xSqVhLJZbRxzLiEOkgiM1itJsml0wUINi7EEZAmEiqZhUFPSwiH_8BAgoVf6JXZjMwhA-_csvcV-Lu9lsqi9jFGFvSTf84mMhe-MLY0f4WkbN4RxidFQI9WcHQVr_uTiKniHAHwgOl4dDhLnANa38ZEc-OdLRgcM4-IJxiNxXBZIDVVwYosvysOFhDKUl2LwALiDLqeBsSAmwG3Pyhp-RG7I7cKMoggtnkS99Dh4TPiXY9-6ATjCoaihjRh3agfQnwN4Cv_uEqj3N8YFXUCCeEFG1pKGVzjZEBCgcbXBx6T5AUqXloESHt1F4jCVkSRf4g89h2XrwCtg_YzigaHko7ObTqZsTC7lD4zOsMtoAXz7-DD32mft6DV9Achrq8ODd8RztsX8954D8SLvGNKauPI2rKYDRTZij895Dd8NnoJ6QJifircz5TviJxdyp4W3OWPC5tN7RJRpD2v8qzWaCDwSCKuxojcEm6FYmBteKVp51J3aMwZfi59jnQrMwGB5wplWsbMo2qROqiv8HaHaO50BpH_PcPPMxw2gaO4jfAdrDojx30saY0BX4h0x7r_lIELnKliHCveDvIQoC2EZlUSmWTKGklVV0KMX4KIoyd1eDYZSHzM80QaPFCVIYSO47C9SS8VRdFaa82wSygL1GAezsBtPL_T_twoloLCQBKt-acqTHQBKXMlSLcT7gjUqD1i6mNMsWKVXtYgojjaV2MYVRNjpm3uXGYt9PxMe1i82oBwclNSQ93SvMBnJC7pwDfikeS34oRcQaQ5rhadnJQaWjq6hybn-g1Si8yADAWagJIwUsaJ6LA161PmWgqRXklLPt2nHE2VlLckZPOCQcAWERWlBlTxJZwMxJpAK4MgSfUS3VLahHdVdFSwWgCKNSHVk4Ey5OVF9g0-lGE1bum3STIznwG3pDMqqPKGU8F13l-OQE5QjnBKbBaJkLWCA-0zk5k8yMTKuVjsnQvArR8YyUmjWsfqPrQIY7ny224ke2Uj149v2PF8hmxXV5IyCZ9C2GzYpUS6YDqd8p5xJAFPSNZ4qn26JehMpAvhOPS4vtpDuCeovGUlwVRCHLg5TQNKWyeUI9spwyl9oE1OdNhjyHeso7F9lSwytGKK9sr8L7hESiFzZVdZaUfwUhDU8sJE-9nKNW_HQGVSp3jZ1j9FYk_QHaLIpXjvxRzNkEYpDLk6B0vSkxRYzcUNksx_rkcCCHWEJKJgW4DOHLCoe3UiF4q1n1Vl43JR-Z4tRnmSB7B7mnmtAuBAmj5YvfdtPl2hnZfytfHi-Xm-310OxQQ_vrb7vZdPc8-mOc9Bhn1PVjD6u8UmnDMw6PuDQKQQgfWUiULaSevGms8RF_FOoaI7W_hmU9Nqzc7sTIKiRAgl8KePNuUmNxt-8OitY9FNv2T1Bs301x1OjajyfZR7lNsvMTJD8h1S2cuTqrWfSMCM3oCgLWoNEdN3eifWwNOIbg07fFDVD5NWnyTBtWp-RbS-Q2LA5dXCZawgq3VjZ-ndtUuLwmubaMHJFrpJbIF8bZbSKr1YSIJgZ4RU1CoDCVHOwqL6vA10kjzZb3B-oWztx7QSELoyK5xl6aHklvod1lhMObyZZCFEtapNmniNkbNyQB_xYzntbOJZ-cQwRvs3MAdZZGql8xDjJ3H4349gTVDgr58lB7VHnSqfaeZdYbCE9I9CdyrHRYktIYHwnVqVkOcainhFKEPKOPnL8tE_xWgmzmmivslEUmKoG0TApBzVzmpxlbpUKRSMFPfVyXkDynW4DJYU_OkSXYtZjFhI3gUSojMAABk-uS9gyoKFdZLVNdYYp8flG5XNbIqfBaBCmiUxJGYI2FFoeYYuqnJPFOINqtlh4jCc7BTYh_ScuqQYpmF6wKBE84IhJbg1SppiTWqltXU3OrCVdw50N4MfsEKDfdb0v-XUHzFsGSzni0fKdpUmBp0EpHsAdFFs9LmiJOk7uVU9PV6srDNAuHsUbvShYqt7uO_rdakQpjGBPsi8RcOfDykCDhutfXbFuDq9KVQO3F1er6Ihi1K2P0uOQBCsN2zbCNKKPERX62EZ0rEX9X7VvDOBYauDeEtoX8T9rbT4ku2F9fW401uGvKErpebpflyw7EaBaJA09bdtqFnR9Q9kQahpNB8rZlNaOr0Xrj7OB9OxvNd1vn79udho8cuXU2nyJu0EBhhIVwl-GE4BvjktvboEh3Qtk4vIl8vgam16Hq-d2hP2t8wODCwJkXjTox9BIMKo5ivVBx32t8Zm9JL2I-__1ZEw7KuckK1CJ1cqlfyqAbHAgfiPPGaB7BK7mBbLpmYXOedt8LTmcjOroqV0wTFZG-bcT9SZF7lZEy1xCB11V5hpihQk0Z9yK0utqiKcskD5K2PAIbRbpyN4fN2VGc6YJVYTkkDRNf8eVd35sqRNw8jta0aCp4IRbVW7lJttIJ-ARcrk0z8rVMlFpVn4Fl_FXNr0q7NipIrohdBjo3pO34aoSVdnRVAZzfmNKjEp-Xa7HQ0_q-bY7PtOr2hEIRbdQ0lpeQDvoMeeAHEhWokEtwqXHOaF3pcAV0PgL4jOpa0Uk6yahMebNESVtLKP0OWUy9xPVkfTAJBwmi2OdaFVhD9MPS08GpiLsvt7Rmprip62kXMXdwnLQxdTftrCp0RkfihpA6q0qWniJAAT2pJ6h820G7toRzKH1Fl0jXxCxBMwd0z7Zm0h1nvUtQ34-KvTyDQp-Ldz2MoseFcfRRHS_mgeky9zGzgexA9blfMa8FqrP4FJve95VaIiYmmfmY8aShBaKnHlK-dY5kCyJfKT2W7O7XnLzW3QH7tnOeZ1vN5Fr8y-Jl40wqV7e7tfPtZbZ2dr87681sucjHt2hfquXhb5CPvoA3X8-nxUOoCAMQQKLU3amoZl4LZPGyhvvNdj1bfJn9wylfXq12NSOqM1g_vtjsNt9n0-1uMXquDNlT7dDjY_qQWPpAzoP31PaG7SF64IT7-KnRHSdt5e4Eavy9MNvs6aMmzjxaZBBqVJ62NKITi33PoIzDqKhyDB8O30Diecesgf4Qh_7Tjef7ff8t_WgmD7PATxJFsXiyf9rtdKzBw-mpO2xZnV5v2O619u5w0Hb7XQ-5PfMwQMPe3js8-LK19CQfwJw8kCerZVmttjlomVa_1X30zCHaux42Ud_tmq7Z6LTwGdzUo1j4kYXHh_BJ8rCPjxEM-hDIo3wQycwB45Q-ijnkWU-_sRP2nS-rB8nvk2T2X8pSyYg">