【问题标题】:How to get clang-format to break on << and >>如何让 clang 格式在 << 和 >> 上中断
【发布时间】:2019-07-04 05:15:07
【问题描述】:

如何让 clang-format 打破 '>' 运算符?

我尝试将 BreakBeforeBinaryOperators 设置为 All,但这在这里似乎没有任何区别。

我希望我的代码格式如下:

in >> a
   >> b
   >> c;

而不是

in >> a >> b >> c;

【问题讨论】:

  • 您确定要中断 every &lt;&lt;&gt;&gt; 运算符吗?包括移位的? :)
  • BreakBeforeBinaryOperators 只决定是否在二元关系之前或之后换行,它不会在 every 二元运算符处启用换行。
  • 是的,我不使用位移,但使用了大量的流 io。
  • 我不介意它不强制中断,但目前它总是将它组合在一行上。

标签: c++ clang-format


【解决方案1】:

为此,您需要两种样式设置:

BreakBeforeBinaryOperators: All
ColumnLimit: 0

或者,将样式设置为预定义的WebKit 样式,这将为您设置这两种样式设置。

documentation 说:

列限制为 0 表示没有列限制。在这种情况下, clang-format 将尊重输入的换行决定 声明,除非它们与其他规则相矛盾。

这不是一个很好的解决方案,原因如下:

  • 正如文档所述,clang-format 将尊重您开始使用的换行符。但如果它们不存在,它不会添加换行符。所以in &gt;&gt; a &gt;&gt; b &gt;&gt; c; 的行不会被分成不同的行。

  • 输出没有将第一行的&gt;&gt; 与后续行的&gt;&gt; 对齐。它只是按通常的续行数量缩进。例如,如果你的正常缩进是 4,你会得到:

    in >> a
        >> b
        >> c;
    

    这其实有点奇怪,因为如果运算符是&lt;&lt;,clang-format 会将所有三个运算符排成一行。

  • 您可能并且可能确实希望将 ColumnLimit 设置为 80 之类的其他值,以便其他行在合理的位置中断。

但这似乎是使用 clang-format 可以做到的最好的。

我使用 clang-format 6.0.0 进行了测试,但我相信较新的版本会起到类似的作用,而且我没有看到任何看起来会有所帮助的新样式选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-05
    • 2020-04-05
    • 1970-01-01
    • 2020-04-28
    • 2018-04-11
    • 2015-12-30
    • 1970-01-01
    • 2019-01-11
    相关资源
    最近更新 更多