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 使用指示符删除数组定义中的新行的主要内容,如果未能解决你的问题,请参考以下文章