如何控制链式方法调用的clang格式缩进?

时间:2016-09-29 21:02:56

标签: c++ indentation clang-format

我希望结果如下:

auto foo = FooBuilder()
    .WithSomething()
    .WithSomethingElse()
    .Build();

,而是将clang-format格式化为:

auto foo = FooBuilder()
               .WithSomething()
               .WithSomethingElse()
               .Build();

我希望链接的调用相对于前一行的开头缩进,而不是相对于FooBuilder()调用。我没有看到控制它的clang-format选项中的任何内容。设置ContinuationIndentWidth没有帮助。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

不幸的是,这似乎不可能。我发现影响这一点的唯一选项是 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