如何以clang格式包装struct初始化器?

时间:2017-11-21 09:40:14

标签: c 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,
                                     }};

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

2 个答案:

答案 0 :(得分:2)

当前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! */

答案 1 :(得分:0)

您需要的主要内容是:

BreakBeforeBinaryOperators: All

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

很明显,clang格式必须将.视为二进制运算符。我不确定是否应该,但这似乎就是这样做的。


我使用clang格式6.0.0对此进行了测试。推测较新的版本也可以使用,但我尚未进行测试,因此无法确定。