c++ 很好地格式化lambda表达式的括号列表

krcsximq  于 2024-01-09  发布在  其他
关注(0)|答案(1)|浏览(153)

有没有什么方法可以设置clang-format来很好地 * 格式化这样的表达式?

  1. foo({
  2. [](int) {
  3. bar();
  4. baz();
  5. },
  6. [](float) {}
  7. });

字符串
以我目前的配置,它被塞进了这个令人憎恶的东西:

  1. foo({ [](int) {
  2. bar();
  3. baz();
  4. },
  5. [](float) {} });


这里foo是一个函数模板,它接受一个泛型类型的std::tuple作为参数。
我在代码库中有很多这样的函数调用,我必须把它们都 Package 到// clang-format off// clang-format on注解中,这真的很烦人。

  • 我说的漂亮是指像第一个例子一样。纠正嵌套括号的缩进。

以下是我当前的配置文件:

  1. ---
  2. Language: Cpp
  3. # BasedOnStyle: LLVM
  4. AccessModifierOffset: -4
  5. AlignAfterOpenBracket: Align
  6. AlignArrayOfStructures: None
  7. AlignConsecutiveMacros: Consecutive
  8. AlignConsecutiveAssignments: None
  9. AlignConsecutiveBitFields: Consecutive
  10. AlignConsecutiveDeclarations: None
  11. AlignEscapedNewlines: Right
  12. AlignOperands: Align
  13. AlignTrailingComments: true
  14. AllowAllArgumentsOnNextLine: false
  15. AllowAllParametersOfDeclarationOnNextLine: true
  16. AllowShortEnumsOnASingleLine: true
  17. AllowShortBlocksOnASingleLine: Always
  18. AllowShortCaseLabelsOnASingleLine: false
  19. AllowShortFunctionsOnASingleLine: All
  20. AllowShortLambdasOnASingleLine: All
  21. AllowShortIfStatementsOnASingleLine: WithoutElse
  22. AllowShortLoopsOnASingleLine: false
  23. AlwaysBreakAfterDefinitionReturnType: None
  24. AlwaysBreakAfterReturnType: None
  25. AlwaysBreakBeforeMultilineStrings: false
  26. AlwaysBreakTemplateDeclarations: true
  27. AttributeMacros: ['__capability']
  28. BinPackArguments: false
  29. BinPackParameters: false
  30. BraceWrapping:
  31. AfterCaseLabel: false
  32. AfterClass: false
  33. AfterControlStatement: MultiLine
  34. AfterEnum: false
  35. AfterFunction: false
  36. AfterNamespace: false
  37. AfterObjCDeclaration: false
  38. AfterStruct: false
  39. AfterUnion: false
  40. AfterExternBlock: false
  41. BeforeCatch: true
  42. BeforeElse: true
  43. BeforeLambdaBody: false
  44. BeforeWhile: false
  45. IndentBraces: false
  46. SplitEmptyFunction: true
  47. SplitEmptyRecord: true
  48. SplitEmptyNamespace: true
  49. BreakBeforeBinaryOperators: None
  50. BreakBeforeConceptDeclarations: true
  51. BreakBeforeBraces: Custom
  52. BreakBeforeInheritanceComma: false
  53. BreakInheritanceList: AfterColon
  54. BreakBeforeTernaryOperators: false
  55. BreakConstructorInitializers: AfterColon
  56. BreakAfterJavaFieldAnnotations: false
  57. BreakStringLiterals: false
  58. ColumnLimit: 80
  59. CommentPragmas: '^ IWYU pragma:'
  60. QualifierAlignment: Right
  61. CompactNamespaces: false
  62. ConstructorInitializerIndentWidth: 4
  63. ContinuationIndentWidth: 4
  64. Cpp11BracedListStyle: false
  65. DeriveLineEnding: true
  66. DerivePointerAlignment: false
  67. DisableFormat: false
  68. EmptyLineAfterAccessModifier: Never
  69. EmptyLineBeforeAccessModifier: LogicalBlock
  70. ExperimentalAutoDetectBinPacking: false
  71. PackConstructorInitializers: NextLine
  72. BasedOnStyle: ''
  73. ConstructorInitializerAllOnOneLineOrOnePerLine: false
  74. AllowAllConstructorInitializersOnNextLine: true
  75. FixNamespaceComments: true
  76. ForEachMacros:
  77. - foreach
  78. - Q_FOREACH
  79. - BOOST_FOREACH
  80. IfMacros:
  81. - KJ_IF_MAYBE
  82. IncludeBlocks: Preserve
  83. IncludeCategories:
  84. - Regex: '^"(llvm|llvm-c|clang|clang-c)/'
  85. Priority: 2
  86. SortPriority: 0
  87. CaseSensitive: false
  88. - Regex: '^(<|"(gtest|gmock|isl|json)/)'
  89. Priority: 3
  90. SortPriority: 0
  91. CaseSensitive: false
  92. - Regex: '.*'
  93. Priority: 1
  94. SortPriority: 0
  95. CaseSensitive: false
  96. IncludeIsMainRegex: '(Test)?$'
  97. IncludeIsMainSourceRegex: ''
  98. IndentAccessModifiers: false
  99. IndentCaseLabels: false
  100. IndentCaseBlocks: false
  101. IndentGotoLabels: false
  102. IndentPPDirectives: None
  103. IndentExternBlock: AfterExternBlock
  104. IndentWidth: 4
  105. IndentWrappedFunctionNames: true
  106. InsertTrailingCommas: None
  107. JavaScriptQuotes: Leave
  108. JavaScriptWrapImports: true
  109. KeepEmptyLinesAtTheStartOfBlocks: true
  110. LambdaBodyIndentation: OuterScope
  111. MacroBlockBegin: ''
  112. MacroBlockEnd: ''
  113. MaxEmptyLinesToKeep: 1
  114. NamespaceIndentation: None
  115. ObjCBinPackProtocolList: Auto
  116. ObjCBlockIndentWidth: 4
  117. ObjCBreakBeforeNestedBlockParam: true
  118. ObjCSpaceAfterProperty: false
  119. ObjCSpaceBeforeProtocolList: true
  120. PenaltyBreakAssignment: 10
  121. PenaltyBreakBeforeFirstCallParameter: 300
  122. PenaltyBreakComment: 300
  123. PenaltyBreakFirstLessLess: 120
  124. PenaltyBreakOpenParenthesis: 0
  125. PenaltyBreakString: 100
  126. PenaltyBreakTemplateDeclaration: 10
  127. PenaltyExcessCharacter: 1000000
  128. PenaltyReturnTypeOnItsOwnLine: 1000
  129. PenaltyIndentedWhitespace: 0
  130. PointerAlignment: Left
  131. PPIndentWidth: -1
  132. ReferenceAlignment: Pointer
  133. ReflowComments: true
  134. RemoveBracesLLVM: false
  135. SeparateDefinitionBlocks: Leave
  136. ShortNamespaceLines: 1
  137. SortIncludes: CaseSensitive
  138. SortJavaStaticImport: Before
  139. SortUsingDeclarations: true
  140. SpaceAfterCStyleCast: false
  141. SpaceAfterLogicalNot: false
  142. SpaceAfterTemplateKeyword: true
  143. SpaceBeforeAssignmentOperators: true
  144. SpaceBeforeCaseColon: false
  145. SpaceBeforeCpp11BracedList: false
  146. SpaceBeforeCtorInitializerColon: false
  147. SpaceBeforeInheritanceColon: false
  148. SpaceBeforeParens: ControlStatements
  149. SpaceBeforeParensOptions:
  150. AfterControlStatements: true
  151. AfterForeachMacros: true
  152. AfterFunctionDefinitionName: false
  153. AfterFunctionDeclarationName: false
  154. AfterIfMacros: true
  155. AfterOverloadedOperator: false
  156. BeforeNonEmptyParentheses: false
  157. SpaceAroundPointerQualifiers: Default
  158. SpaceBeforeRangeBasedForLoopColon: false
  159. SpaceInEmptyBlock: false
  160. SpaceInEmptyParentheses: false
  161. SpacesBeforeTrailingComments: 1
  162. SpacesInAngles: Never
  163. SpacesInConditionalStatement: false
  164. SpacesInContainerLiterals: true
  165. SpacesInCStyleCastParentheses: false
  166. SpacesInLineCommentPrefix:
  167. Minimum: 1
  168. Maximum: -1
  169. SpacesInParentheses: false
  170. SpacesInSquareBrackets: false
  171. SpaceBeforeSquareBrackets: false
  172. BitFieldColonSpacing: Both
  173. Standard: Latest
  174. StatementAttributeLikeMacros:
  175. - Q_EMIT
  176. StatementMacros:
  177. - Q_UNUSED
  178. - QT_REQUIRE_VERSION
  179. TabWidth: 4
  180. UseCRLF: false
  181. UseTab: Never
  182. WhitespaceSensitiveMacros:
  183. - STRINGIZE
  184. - PP_STRINGIZE
  185. - BOOST_PP_STRINGIZE
  186. - NS_SWIFT_NAME
  187. - CF_SWIFT_NAME
  188. ...

zpjtge22

zpjtge221#

不幸的是,clang-format可能无法为每个特定情况提供详细的控制级别,但您肯定可以接近:

  1. BasedOnStyle: LLVM
  2. AccessModifierOffset: -4
  3. AllowShortFunctionsOnASingleLine: None
  4. AllowShortIfStatementsOnASingleLine: false
  5. AllowShortLoopsOnASingleLine: false
  6. AlwaysBreakTemplateDeclarations: Yes
  7. BinPackArguments: false
  8. BinPackParameters: false
  9. BraceWrapping:
  10. AfterFunction: true
  11. AfterClass: true
  12. AfterControlStatement: Always
  13. AfterEnum: true
  14. AfterStruct: true
  15. AfterUnion: true
  16. BeforeCatch: true
  17. BeforeElse: true
  18. IndentBraces: false
  19. BreakBeforeBraces: Custom
  20. BreakBeforeBinaryOperators: None
  21. BreakBeforeTernaryOperators: true
  22. BreakConstructorInitializersBeforeComma: false
  23. ColumnLimit: 0
  24. ConstructorInitializerAllOnOneLineOrOnePerLine: true
  25. DerivePointerAlignment: false
  26. PointerAlignment: Left
  27. ReflowComments: true
  28. SortIncludes: false
  29. SpaceAfterCStyleCast: true
  30. SpacesBeforeTrailingComments: 1
  31. TabWidth: 4
  32. UseTab: Never

字符串

展开查看全部

相关问题