clang-format:如何对齐结构体初始化列表

问题描述 投票:0回答:3

我有一个结构数组:
(假设标识符在其他地方

#define
...)

typedef struct
{
    int a;
    char id[2+1];
} T;

const T T_list[] = {
    { PRIO_HOUSE, "HI" },
    { PRIO_SOMETHING_ELSE, "WO" }
    // ...
}

我想要 clang-format 来格式化它:

const T T_list[] = {
    { PRIO_HOUSE         , "HI" },
    { PRIO_SOMETHING_ELSE, "WO" }
    // ...
}

可以吗?

我已经阅读了文档,但在这方面我没有找到有用的东西。 https://clang.llvm.org/docs/ClangFormatStyleOptions.html

这是我的

.clang-format

---
BasedOnStyle: WebKit
BreakBeforeBraces: Allman
BraceWrapping:
  AfterEnum: false  
IndentCaseLabels: 'true'
AlignConsecutiveAssignments: 'true'
AlignConsecutiveDeclarations: 'true'
AlignEscapedNewlines: 'true'
AlignTrailingComments: 'true'
AllowShortFunctionsOnASingleLine: 'false'
#...
c++ c clang-format
3个回答
6
投票

从 clang-format 版本 13 (2021) 开始,有一个新的

AlignArrayOfStructures
选项可以做到这一点。从问题中链接的现已更新的文档中:

AlignArrayOfStructures (ArrayInitializerAlignmentStyle)
clang-format 13

如果不是 None,则在对结构数组使用初始化时会将 > 字段对齐到列中。

还有一个带有

AlignArrayOfStructures: Left
的示例:

struct test demo[] =
{
   {56, 23,    "hello"},
   {-1, 93463, "world"},
   {7,  5,     "!!"   }
};

4
投票

不。

clang-format
不能这样做。

我的做法是:

  1. 使用第三方工具来对齐
  2. 在格式化区域之前放置:
    // clang-format off
  3. 在格式化区域后放置:
    // clang-format on

1
投票

如果您想要垂直对齐,则可以在使用初始值设定项列表时通过尾随逗号来实现。

之前

    const T T_list[] = { { PRIO_HOUSE, "HI" }, { PRIO_SOMETHING_ELSE, "WO" } };

之后

    const T T_list[] = {
        { PRIO_HOUSE, "HI" },
        { PRIO_SOMETHING_ELSE, "WO" }, // <-- notice the comma here
    };

如果您想进一步调整声明,我不确定您会如何去做。但后面的逗号是步骤 1。

© www.soinside.com 2019 - 2024. All rights reserved.