如何以 clang 格式包装结构初始值设定项?

How to wrap struct initializer in clang-format?

在 clang-format 运行之前以这个例子为例:

struct ApplicationState app_state = {
    .signal = {
        .use_crash_handler = true,
        .use_abort_handler = true,
    },
    .exit_code_on_error = {
        .python = 0,
    }
};

在运行之后,clang-format应用如下:

struct ApplicationState app_state = {.signal =
                                             {
                                                     .use_crash_handler = true,
                                                     .use_abort_handler = true,
                                             },
                                     .exit_code_on_error = {
                                             .python = 0,
                                     }};

有没有办法在大括号之后、结构成员之前添加一个换行符,使其更像第一个示例而不是第二个示例?

您需要的主要内容是:

BreakBeforeBinaryOperators: All

您可以改为将整体样式设置为 WebKit,因为这样会将 BreakBeforeBinaryOperators 设置为 All

显然,clang-format 必须将 . 视为二元运算符。我不确定它是否应该,但它似乎就是这样做的。


我用 clang-format 6.0.0 测试了这个。大概较新的版本会工作相同,但我没有测试过所以我不能确定。

目前 clang-format 没有有效的方法来控制这个 (从版本 11.0 开始)

虽然 BreakBeforeBinaryOperators: All 会强制换行(请参阅@eric-backus 的回答),但它也会影响许多其他地方的格式,与结构声明无关。

可以但是,只需使用尾随逗号即可解决此问题。


之前:

struct ApplicationState app_state = {.signal =
                                             {
                                                     .use_crash_handler = true,
                                                     .use_abort_handler = true,
                                             },
                                     .exit_code_on_error = {
                                             .python = 0,
                                     }};

之后:


struct ApplicationState app_state = {
    .signal = {
        .use_crash_handler = true,
        .use_abort_handler = true,
    },
    .exit_code_on_error = {
        .python = 0,
    },
};
/*   ^ notice trailing comma on the second last line! */