如何在 clang 格式的新行中控制 lessless 的对齐方式

How to control alignment of lessless in new line in clang-format

clang-format 默认格式化如下代码:

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

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

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

我该怎么做?

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

的描述

AlignOperands (bool)
If true, horizontally align operands of binary and ternary expressions.
Specifically, this aligns operands of a single expression that needs to be split over multiple lines.

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

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

如果未明确设置,此选项可能会由一些预定义的样式设置,例如 LLVM 样式 (--style=llvm)。

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

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

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