如何防止clang格式缩进宏?

时间:2020-06-23 11:58:19

标签: clang-format

如何防止clang-format缩进下面的宏及其分配?

定义:

#define DESKTOPCHANGE(K,N) \
{MOD, K, changeworkspace, {.i=N}}, \
{MOD | SHIFT, K, sendtoworkspace, {.i=N}},

成为:

#define DESKTOPCHANGE(K, N) \
    {MOD, K, changeworkspace, {.i = N}}, \
        {MOD | SHIFT, K, sendtoworkspace, {.i = N}}

用法:

static key keys[] = {
    DESKTOPCHANGE(XK_1, 0)
    DESKTOPCHANGE(XK_2, 1)
    DESKTOPCHANGE(XK_3, 2)
    DESKTOPCHANGE(XK_4, 3)
    DESKTOPCHANGE(XK_5, 4)};

成为:

static key keys[] = {DESKTOPCHANGE(XK_1, 0) DESKTOPCHANGE(XK_2, 1)
                         DESKTOPCHANGE(XK_3, 2) DESKTOPCHANGE(XK_4, 3)
                             DESKTOPCHANGE(XK_5, 4)}

我尝试了一些options,但找不到正确的答案。是否有一种通用的方法来关闭所有对齐方式,并在需要时仅打开

这是Github的source代码。我已将其修改为上述片段中的方式。

1 个答案:

答案 0 :(得分:1)

三个答案:

  1. 像这样的宏是不好的样式,最好将宏修复为不包含结尾的逗号。这样您就不必担心clang-format(或任何其他格式化工具)会误解代码了。

  2. 使用clang-format 6.0.0,您可以使用以下方法实现所需的格式:

    BasedOnStyle: WebKit
    ContinuationIndentWidth: 0
    

    或者,如果您不想以WebKit样式为基础设置格式,那么您将获得大部分帮助:

    AllowAllParametersOfDeclarationOnNextLine: false
    BinPackParameters: false
    ContinuationIndentWidth: 0
    

    此操作的关键是ContinuationIndentWidth选项,已记录在here中。但是,不幸的是,我不认为您真的想要这个答案,因为设置ContinuationIndentWidth: 0可能会使其他代码难看且难以阅读。

  3. 如果您已经按照自己的方式设置了代码格式,并且希望禁用clang-format来影响特定的代码块,则可以用// clang-format on和{{1 }}。有关详细信息,请参见documentation