【问题标题】:How can I prevent clang-format from indenting a macro?如何防止 clang-format 缩进宏?
【发布时间】:2020-06-23 11:58:19
【问题描述】:

如何防止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,但找不到正确的。有没有一种通用的方法可以关闭所有对齐方式,然后仅在需要打开? p>

这是来自 Github 的 source 代码。我已经将它修改为上面sn-p中的方式。

【问题讨论】:

    标签: clang-format


    【解决方案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// clang-format off 将其包围。详情请参阅documentation

    【讨论】:

    • 同意,1 是最好的解决方案 :-) 感谢您告知我们其他选项!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 2015-09-29
    • 2022-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多