我希望结果看起来像这样:
auto foo = FooBuilder()
.WithSomething()
.WithSomethingElse()
.Build();
而是
clang-format
将其格式化为这样:
auto foo = FooBuilder()
.WithSomething()
.WithSomethingElse()
.Build();
我希望链式调用相对于前一行的开头缩进,而不是相对于
FooBuilder()
调用缩进。我在 clang-format
选项中没有看到任何控制它的内容。设置 ContinuationIndentWidth
没有帮助。有什么想法吗?
发现使用 clang-format 选项的 hack
PenaltyIndentedWhitespace
。
增加这个惩罚将像这样重新格式化你的核心:
auto foo =
FooBuilder()
.WithSomething()
.WithSomethingElse()
.Build();
这不是您最初想要的,但是缩进不取决于
auto foo =
行长度。
对我来说设置
PenaltyIndentedWhitespace: 1
有效。
不幸的是,这似乎是不可能的。我发现的唯一会影响这个问题的选项是
ContinuationIndentWidth
,正如你所说,它不会做你想要的事情。
我个人会做的是使用以下正则表达式来查找已分解的链式方法调用:
\)\s+\.
它将匹配右括号、1 个或多个空白字符(但不是 0)和句点。您可能没有太多这样的实例,因此您可以手动修复它们,然后禁用这些行的 clang-format ,这样将来就不会再出现这样的情况了:
// clang-format off
auto friggin_cool_object = SuperCoolBuilder().do_what_i_want()
.figure()
.out()
.the()
.params()
.too();
// clang-format on