【问题标题】:How to control alignment of lessless in new line in clang-format如何以clang格式控制换行中lessless的对齐
【发布时间】:2018-04-21 12:14:58
【问题描述】:

clang-format 默认格式如下:

void func() {
  return some_func(some_variables)
         << "aaaaaaaaaaaaaaasssssssssssssssaaaaaaaaaaaaaaaaaa"
         << "asdaaasssssssss";
}

但是,我希望 clang-format 可以将 &lt;&lt; 对齐到默认缩进宽度(8 个空格),例如

void func() {
  return some_func(some_variables)
          << "aaaaaaaaaaaaaaasssssssssssssssaaaaaaaaaaaaaaaaaa"
          << "asdaaasssssssss";
}

我该怎么做?

【问题讨论】:

  • @atru clang-format:格式化 C/C++/Java/JavaScript/Objective-C/Protobuf 代码的工具。 clang.llvm.org/docs/ClangFormat.html
  • 为什么会有这么多反对票?对我来说似乎是一个有效的问题。
  • @valiano 谢谢,我很确定 OP 指的是 clang 编译器(相关的混淆并不少见)。不是downvoter,一些downvotes可能来自像我这样的混乱但不知道真的因为我不使用这个工具并且不知道问题的复杂性。实际上,我不确定,但如果我没记错的话,问题是“clang”而不是“clang-format”,并且没有标签。我很确定 - 如果标签在那里,我不会打开它,因为我不熟悉该工具。因此,最有可能导致投反对票的是 OP 的原始表述。
  • @atru 很抱歉造成混乱。但是我在问题的主题中使用了“clang-format”,并且还添加了“clang-format”作为标签。我很理解这个 clang 不能做到这一点,但是 clang-format 可以。如果它也让其他人感到困惑,再次抱歉。
  • @KaiZhang 一切都好,我会删除我的 cmets,除了最后一个,因为它可以解释反对票。希望你能得到答案。

标签: c++ clang-format


【解决方案1】:

clang-format AlignOperands 选项在这种情况下是相关的。这是来自doc的描述:

AlignOperands (bool)
如果为 true,则水平对齐二元和三元表达式的操作数。
具体来说,这会对齐需要拆分为多行的单个表达式的操作数。

AlignOperands 选项的默认值为false。在您的示例中,clang-format 的结果是&lt;&lt;some_func 对齐,就好像AlignOperands 设置为true

void func() {
  return some_func(some_variables)
         << "aaaaaaaaaaaaaaasssssssssssssssaaaaaaaaaaaaaaaaaa"
         << "asdaaasssssssss";
}

如果没有明确设置,这个选项可能会被一些预定义的样式设置,例如 LLVM 样式 (--style=llvm)。

要根据定义的缩进级别缩进&lt;&lt;,请确保将AlignOperands 设置为false。例如,对于IndentWidth: 4,预期结果为:

void func() {
    return some_func(some_variables)
        << "aaaaaaaaaaaaaaasssssssssssssssaaaaaaaaaaaaaaaaaa"
        << "asdaaasssssssss";
}

最新的 clang 格式 AFAICT 无法实现预期结果的精确对齐,其中第 2 行缩进 2 个空格,第 3 行和第 4 行缩进 8 个空格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多