clang-format sytle options documentation包含许多名为PenaltyXXX的选项。该文件没有解释应如何使用这些处罚。你能描述一下如何使用这些惩罚值及其实现的效果(可能还有一个例子)吗?
答案 0 :(得分:21)
如果您的行超过行长度限制,则clang-format将需要在某处插入一个或多个符号。您可以将惩罚视为阻止某些突破行为的一种方式。例如,假设你有:
Namespaces::Are::Pervasive::SomeReallyVerySuperDuperLongFunctionName(args);
// and the column limit is here: ^
Clang-format可能会格式化看起来有点奇怪:
Namespaces::Are::Pervasive::SomeReallyVerySuperDuperLongFunctionName(
args);
对于这样的情况,您可能会认为您愿意违反一两个字符的行长,因此您可以通过将PenaltyExcessCharacter
设置为较低的数字并{{1}来引导它。更高的数字。
就个人而言,我真的不喜欢返回类型在它自己的行上,所以我将PenaltyBreakBeforeFirstCallParameter
设置为一个荒谬的大数字。
除此之外,这个系统继承自Latex,它允许您指定断行,分页和连字符的各种惩罚。
答案 1 :(得分:5)
你能描述一下如何使用这些惩罚值及其实现的效果(可能还有一个例子)吗?
你可以在这个用C编写的the Git project的Git 2。5(2017年第4季度)clang-format
中看到一个例子:
commit 42efde4见Johannes Schindelin (dscho
)(2017年9月29日)
(Johannes Schindelin -- dscho
--于2017年10月1日commit 42efde4合并)
您可以在此处查看旧值和新值:
说明这些值:
clang-format
:调整换行符我们确实非常希望将每行限制为80行:一 Git邮件列表中一些风格一致的评论是 行不应超过80列/行(即使79列/行 考虑到代码经常被视为差异,会更有意义 和差异添加额外的字符)。
超额角色的罚分为5太低,无法保证, 但是,正如Brandon Williams所指出的那样。
从现有的clang格式示例和文档中可以看出 100是被认为适合
Stuff You Really Don't Want
的惩罚,所以我们将其指定为“多余字符”的惩罚,即 过长的路线。在此期间,进一步调整处罚:我们实际上并不那么敏锐 关于防止注释或字符串文字中的新换行符,所以 罚款100似乎非常高。
同样,我们并不是那么坚持要保持换行符 来自赋值运算符(很多Git的代码在之后立即中断
=
字符仅保留80列/行限制。我们对函数的返回类型有所了解 他们自己的路线比罚款0暗示,所以这个被调整, 太
最后,我们并没有特别想要在第一个参数之前打破 在一个电话中,如果它保持线短于80列/线,那就是 我们做什么,所以降低在通话之前打破的罚款 参数,但不如引入新的换行符那么多 评价。