【问题标题】:How to control clang-format indentation of chained method calls?如何控制链式方法调用的clang格式缩进?
【发布时间】:2017-02-08 08:25:31
【问题描述】:

我希望结果如下所示:

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

但是clang-format 的格式是这样的:

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

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

【问题讨论】:

  • 我想知道 clang 格式中是否缺少此功能 - 我已经查看并尝试了我知道的所有选项,但仍然没有任何影响此行为。对于我们公司,由于我们使用制表符(令我懊恼),在这种情况下,我们无法避免将空格和制表符混合用于前导空格。非常烦人 - 非常感谢您提供解决方案。

标签: c++ indentation clang-format


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-07
    • 2015-07-31
    • 2012-01-30
    • 2020-04-04
    • 2021-11-07
    • 2021-04-28
    • 2017-02-06
    • 2020-02-02
    相关资源
    最近更新 更多