如何只应用一个clang-format操作?

47

我想使用 clang-format 来对齐我的注释,但不想对其他内容进行操作。

用于此功能的选项是:AlignTrailingComments (bool)

但是当我运行以下命令时:

clang-format-3.6 -i -style='{AlignTrailingComments: true}' <file>

它执行各种其他格式选项,我认为当未指定时,它们都有一个默认设置。

我该如何在代码库中执行一个clang格式规则?

所有这些默认值使得很难看到单个格式选项对代码的完整影响。我必须解析所有这些其他更改的差异,并决定是否是我指定的选项实际上做到了这一点。


我注意到有一个 DisableFormat 选项,但无论我怎样使用它,它都会完全停止任何格式化。

clang-format-3.6 -i -style='{AlignTrailingComments: true, DisableFormat: true}'

clang-format-3.6 -i -style='{DisableFormat: true, AlignTrailingComments: true}'

两者都会导致clang-format不对任何代码做出更改。


我认为你应该指定 BasedOnStyle - bolov
你应该尝试将它作为插件使用(例如,对于Vim、Visual-Studio等)。这样使用起来更加方便。 - bolov
2
@bolov 因为我只想逐一应用一条规则更改。我需要一个默认配置,其中clang-format不会进行任何更改。然后,我可以逐一调整,并仅查看该格式选项的差异。 - Trevor Hickey
好的,但是您应该意识到一些规则彼此之间会相互影响。 - bolov
14
很遗憾,我也是为了这个功能而来。可惜它并不存在。 - Barry
显示剩余6条评论
2个回答

23

我认为clang格式化程序并不是为此而设计的。规则不是它逐步应用的东西,相反,该程序是建立在解析整个程序并忘记(大部分)旧的空格的基础上,并根据您选择的规则生成新的空格。

您可以在此处查看一些架构概述:http://www.llvm.org/devmtg/2013-04/jasper-slides.pdf

首先,它运行clang词法分析器和解析器,然后将令牌组划分为“未换行的行”,这些行是“如果没有列限制,我们想要将标记放在一行上”的标记。然后,一个布局器根据各种约束条件确定每个未换行的行的格式,并优化各种惩罚。

因此,我认为“一个clang-format操作”实际上并不存在,对我来说,设计看起来非常单olithic。


9
遗憾的是,这似乎是正确答案。 - Trevor Hickey

6

clang-format没有实现这个机制。

我使用的权宜之计是以两种不同的方式配置我想要更改的内容,然后运行工具并将其进行对比,这告诉我哪些更改会影响到我想要的结果,但通常情况下这至少需要一些人工操作。

clang-format是一个好的想法,但实现较差。 它的许多缺陷之一是没有选项可以指示更改的原因,XML输出格式无法被任何其他流行的工具消耗...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接