clang-format 使用指示符删除数组定义中的新行

Posted

技术标签:

【中文标题】clang-format 使用指示符删除数组定义中的新行【英文标题】:clang-format removes new lines in array definition with designators 【发布时间】:2017-01-01 19:48:28 【问题描述】:

如果可能,我喜欢用指示符定义我的数组值:

enum Mode 
    NONE,
    SPLIT_FILES,
    SINGLE_FILE,
    INVALID
;

const std::string ModeName[] = 
    [NONE] = "NONE",
    [SPLIT_FILES] = "SPLIT_FILES",
    [SINGLE_FILE] = "SINGLE_FILE",
    [INVALID] = "INVALID"
;

通过clang-format (3.5) 运行它会破坏新行并使其可读性降低:

enum RecorderMode  REC_NONE, REC_SPLIT_FILES, REC_SINGLE_FILE, REC_INVALID ;

const std::string RecorderModeName[]
    = [REC_NONE] = "NONE", [REC_SPLIT_FILES] = "SPLIT_FILES", [REC_SINGLE_FILE] = "SINGLE_FILE",
       [REC_INVALID] = "INVALID" ;

数组定义有几个问题:= 移动到下一行。如果我在最后一个数组条目后添加逗号,则行缩进两次。

除了使用 clang-format 关闭注释之外,有没有办法保留新行和缩进?

This 显示了enum 的解决方法(在最后一个常量后添加逗号,或在逗号后添加尾随注释),但它似乎不适用于数组。

【问题讨论】:

我已经成为uncrustify 的粉丝,因为我发现了很多方面都需要 clang 格式。它并不完美,但至少它在不断进步。没有输入 uncrustify 不会改变你的布局;但是,有9 minor defaults(第 25 行)。要使所有枚举看起来像你想要的那样,你可以使用nl_enum_own_lines = force。我还在学习,所以我不确定如何安排你喜欢的数组。但是默认情况下它会再次保留它。 @NoviceC:一年多之后,我在 GNU indent 和 clang-format 的愤怒退出后对 uncrustify 产生了疑问。我喜欢它,它好多了!我希望我在一年前你建议的时候尝试过。你现在可能做得更好了,但如果不是让我建议universalindentgui。它实时显示所有选项及其效果。 【参考方案1】:

This answer 给了我一个可以接受的解决方法:

ColumnLimit 设置为0。权衡是不会自动换行,但这是值得的。无论如何,工作中的所有程序员都倾向于不写超过第 120 列。

【讨论】:

【参考方案2】:

每一行的注释也有效。

enum Mode 
  NONE,         // Comments
  SPLIT_FILES,  // On
  SINGLE_FILE,  // Every
  INVALID       // Line
;

【讨论】:

以上是关于clang-format 使用指示符删除数组定义中的新行的主要内容,如果未能解决你的问题,请参考以下文章

编辑表格视图时是不是可以删除舍入删除指示符?

numpy:如果 numpy 数组是视图,则可靠(非保守)指示符

防止 clang-format 删除 emacs 的换页符

Swift,自定义单元格颜色不适用于披露指示符后面

ValueError:混淆矩阵不支持多标签指示符

如何隐藏排序指示符并显示我们自己的指示符图标以在 Ag-Grid 中升序和降序排序