Какой с помощью clang-format сделать перенос в столбик
Вот мой .clang-format файл
---
Language: Cpp
BasedOnStyle: Google
AccessModifierOffset: 2
AlignAfterOpenBracket: Align
AlignArrayOfStructures: Right
AlignConsecutiveAssignments: AcrossEmptyLines
AlignConsecutiveBitFields: AcrossEmptyLines
AlignConsecutiveDeclarations: AcrossEmptyLines
AlignConsecutiveMacros: AcrossEmptyLines
AlignEscapedNewlines: Right
AlignOperands: Align
AlignTrailingComments: true
AllowAllArgumentsOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: Never
AllowShortCaseLabelsOnASingleLine: true
AllowShortEnumsOnASingleLine: true
AllowShortFunctionsOnASingleLine: InlineOnly
AllowShortIfStatementsOnASingleLine: Never
AllowShortLambdasOnASingleLine: All
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: Yes
AttributeMacros: []
BinPackArguments: false
BinPackParameters: false
BitFieldColonSpacing: Both
BreakBeforeBraces: Custom
BraceWrapping:
AfterCaseLabel: false
AfterClass: false
AfterControlStatement: Never
AfterEnum: false
AfterFunction: false
AfterNamespace: false
AfterStruct: false
AfterUnion: false
AfterExternBlock: false
BeforeCatch: false
BeforeElse: false
BeforeLambdaBody: false
BeforeWhile: false
BreakBeforeBinaryOperators: None
BreakBeforeConceptDeclarations: true
BreakBeforeTernaryOperators: true
BreakConstructorInitializers: BeforeColon
BreakInheritanceList: AfterColon
BreakStringLiterals: true
ColumnLimit: 120
CompactNamespaces: true
ContinuationIndentWidth: 2
Cpp11BracedListStyle: true
EmptyLineAfterAccessModifier: Never
EmptyLineBeforeAccessModifier: Always
FixNamespaceComments: true
ForEachMacros: []
IfMacros: []
IncludeBlocks: Regroup
IndentAccessModifiers: true
IndentCaseBlocks: false
IndentCaseLabels: true
#IndentExternBlock: AfterExternBlock
IndentPPDirectives: BeforeHash
IndentRequires: true
IndentWidth: 2
IndentWrappedFunctionNames: true
InsertTrailingCommas: Wrapped
LambdaBodyIndentation: Signature
#Language: Cpp
MacroBlockBegin: ""
MacroBlockEnd: ""
MaxEmptyLinesToKeep: 1
NamespaceIndentation: Inner
NamespaceMacros: []
PackConstructorInitializers: Never
PointerAlignment: Left
QualifierAlignment: Left
#QualifierOrder: ['inline', 'static', 'type', 'const', 'volatile' ]
ReferenceAlignment: Left
ReflowComments: True
ShortNamespaceLines: 10
SortIncludes: CaseInsensitive
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceAroundPointerQualifiers: Default
SpaceBeforeAssignmentOperators: true
SpaceBeforeCaseColon: false
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatementsExceptControlMacros
SpaceBeforeRangeBasedForLoopColon: false
SpaceBeforeSquareBrackets: false
SpaceInEmptyBlock: false
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 2
SpacesInAngles: Never
SpacesInCStyleCastParentheses: false
SpacesInConditionalStatement: false
SpacesInContainerLiterals: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: c++17
StatementAttributeLikeMacros: [MI, STD, STC, PH, IMPL, MI_CONSTEXPR_20, PMR, CT]
StatementMacros: []
TabWidth: 2
TypenameMacros: []
UseCRLF: true
UseTab: Never
WhitespaceSensitiveMacros: []
---
Я пытаюсь настроить перенос, чтобы он сохранял моё форматирование, если я сам изменил перенос
Было:
MI_NODISCARD bool is_naked_whiscers(const MI PseudoDynamicArray<MI global_index, 3>& ar) {
//...
return static_cast<size_t>(ar[0]) < n_vertices_on_start() && static_cast<size_t>(ar[1]) < n_vertices_on_start() && static_cast<size_t>(ar[2]) < n_vertices_on_start();
}
Стало:
MI_NODISCARD bool is_naked_whiscers(const MI PseudoDynamicArray<MI global_index, 3>& ar) {
//...
return static_cast<size_t>(ar[0]) < n_vertices_on_start() &&
static_cast<size_t>(ar[1]) < n_vertices_on_start() &&
static_cast<size_t>(ar[2]) < n_vertices_on_start();
}
Но clang-format меняет это на следующее:
MI_NODISCARD bool is_naked_whiscers(const MI PseudoDynamicArray<MI global_index, 3>& ar) {
//...
return static_cast<size_t>(ar[0]) < n_vertices_on_start() && static_cast<size_t>(ar[1]) < n_vertices_on_start() &&
static_cast<size_t>(ar[2]) < n_vertices_on_start();
}
Ответы (1 шт):
Вы можете использовать
// clang-format off
// clang-format on
Но это очень неудобно.
Я предпочитаю просто оставлять пустые комментарии в конце строки, clang-format не может их удалить:
return static_cast<size_t>(ar[0]) < n_vertices_on_start() && //
static_cast<size_t>(ar[1]) < n_vertices_on_start() && //
static_cast<size_t>(ar[2]) < n_vertices_on_start(); //
Обычно достаточно только первого комментария, но тогда код выглядит не очень хорошо, и коллеги периодически удаляют "лишние" символы.
Также рекомендую запретить форматирование специфичных комментариев при помощи строки CommentPragmas: '(\\.+|@.+|\[.*\]|\(.*\)|\{.*\})'
Можно поставить другую регулярку, конкретно эту я использую, чтобы не переносились строки с doxygen - комментариями и markdown ссылки.