clang-format:中断函数参数而不是函数限定符(noexcept)
clang-format: break on function arguments instead of function qualifiers (noexcept)
我正在寻找一种使用 clang-format(版本 9.0.0)格式化下面的 C++ 代码的方法,这样超过 80 列限制的函数定义在参数声明后被破坏,而不是 C++ 函数限定符,如 noexcept
:
void scheduler::stop_mark(service ¤t, service const &stopped) const
noexcept {
// ...
}
上面的代码片段显示了我使用 LLVM
默认样式格式化的代码,下面的代码是我在正确格式化后想要的代码:
void scheduler::stop_mark(service& current,
service const& stopped) const noexcept {
// ...
}
两个片段之间的区别在于,在 service& current,
之后换行而不是 noexcept
。
使用 LLVM
默认样式时可重现此行为,但我使用以下选项作为参考:
---
BasedOnStyle: LLVM
AlignAfterOpenBracket: Align
AllowAllArgumentsOnNextLine: 'true'
AllowAllConstructorInitializersOnNextLine: 'true'
AllowAllParametersOfDeclarationOnNextLine: 'true'
AllowShortCaseLabelsOnASingleLine: 'false'
AllowShortFunctionsOnASingleLine: Empty
AllowShortLambdasOnASingleLine: Empty
AlwaysBreakTemplateDeclarations: 'Yes'
BinPackArguments: 'true'
BinPackParameters: 'true'
BreakConstructorInitializers: BeforeComma
BreakConstructorInitializersBeforeComma: 'true'
ConstructorInitializerIndentWidth: 2
FixNamespaceComments: 'true'
IndentCaseLabels: 'true'
IndentPPDirectives: AfterHash
PenaltyBreakAssignment: 1000
PenaltyBreakBeforeFirstCallParameter: 50
PointerAlignment: Left
...
是否可以通过 clang-format 获得这样的格式?
我已经检查了 https://zed0.co.uk/clang-format-configurator/ 上所有可能的选项,但找不到匹配的 clang-format 选项。
我同意任何规则组合都无法获得所需的输出,但是当您发现此类情况时,有一种方法可以强制执行。
在第一个参数后添加一行注释(可以为空)。然后 clang-format 将为您调整参数。
void scheduler::stop_mark(service& current, //
service const& stopped) const noexcept {
// ...
}
据我所知,你不能这样做。
我最初的想法是将 BinPackParameters
设置为 false
,但即使在这种情况下,clang-format
似乎也倾向于中断函数限定符。
就其价值而言,clang-format 10.0.1 似乎符合您的要求:
$> clang-format --version
clang-format version 10.0.1 (Fedora 10.0.1-3.fc32)
$> echo " void scheduler::stop_mark(service ¤t, service const &stopped) const noexcept { /* ... */ }" | clang-format --style=LLVM
void scheduler::stop_mark(service ¤t,
service const &stopped) const noexcept { /* ... */
}
我正在寻找一种使用 clang-format(版本 9.0.0)格式化下面的 C++ 代码的方法,这样超过 80 列限制的函数定义在参数声明后被破坏,而不是 C++ 函数限定符,如 noexcept
:
void scheduler::stop_mark(service ¤t, service const &stopped) const
noexcept {
// ...
}
上面的代码片段显示了我使用 LLVM
默认样式格式化的代码,下面的代码是我在正确格式化后想要的代码:
void scheduler::stop_mark(service& current,
service const& stopped) const noexcept {
// ...
}
两个片段之间的区别在于,在 service& current,
之后换行而不是 noexcept
。
使用 LLVM
默认样式时可重现此行为,但我使用以下选项作为参考:
---
BasedOnStyle: LLVM
AlignAfterOpenBracket: Align
AllowAllArgumentsOnNextLine: 'true'
AllowAllConstructorInitializersOnNextLine: 'true'
AllowAllParametersOfDeclarationOnNextLine: 'true'
AllowShortCaseLabelsOnASingleLine: 'false'
AllowShortFunctionsOnASingleLine: Empty
AllowShortLambdasOnASingleLine: Empty
AlwaysBreakTemplateDeclarations: 'Yes'
BinPackArguments: 'true'
BinPackParameters: 'true'
BreakConstructorInitializers: BeforeComma
BreakConstructorInitializersBeforeComma: 'true'
ConstructorInitializerIndentWidth: 2
FixNamespaceComments: 'true'
IndentCaseLabels: 'true'
IndentPPDirectives: AfterHash
PenaltyBreakAssignment: 1000
PenaltyBreakBeforeFirstCallParameter: 50
PointerAlignment: Left
...
是否可以通过 clang-format 获得这样的格式?
我已经检查了 https://zed0.co.uk/clang-format-configurator/ 上所有可能的选项,但找不到匹配的 clang-format 选项。
我同意任何规则组合都无法获得所需的输出,但是当您发现此类情况时,有一种方法可以强制执行。
在第一个参数后添加一行注释(可以为空)。然后 clang-format 将为您调整参数。
void scheduler::stop_mark(service& current, //
service const& stopped) const noexcept {
// ...
}
据我所知,你不能这样做。
我最初的想法是将 BinPackParameters
设置为 false
,但即使在这种情况下,clang-format
似乎也倾向于中断函数限定符。
就其价值而言,clang-format 10.0.1 似乎符合您的要求:
$> clang-format --version
clang-format version 10.0.1 (Fedora 10.0.1-3.fc32)
$> echo " void scheduler::stop_mark(service ¤t, service const &stopped) const noexcept { /* ... */ }" | clang-format --style=LLVM
void scheduler::stop_mark(service ¤t,
service const &stopped) const noexcept { /* ... */
}