我在一个源文件上运行clang-formt,它一直在切换注释的位置,从不确定正确的位置。
这是我的.clang-format文件的一个副本:
BasedOnStyle: Microsoft版本信息:
$ clang-format --version
clang-format version 9.0.0下面的代码片段显示了先用-i再用--output-replacements-xml运行clang-format的结果
$ clang-format -i MyFile.cpp
$ clang-format --output-replacements-xml MyFile.cpp
<?xml version='1.0'?>
<replacements xml:space='preserve' incomplete_format='false'>
<replacement offset='2702' length='7'> </replacement>
</replacements>
$ clang-format -i MyFile.cpp
$ clang-format MyFile.cpp
<?xml version='1.0'?>
<replacements xml:space='preserve' incomplete_format='false'>
<replacement offset='2702' length='13'> </replacement>
</replacements>正如您所看到的,替换偏移量的长度字段继续变化。如果我一遍又一遍地运行它,你会看到上面列出的两种结果交替出现。本质上,它只是来回移动特定注释的位置。
这里是有问题的来源:
格式化版本1:
if (mp) // if foo bar likes to foo, the foo
{ // but bar foo also is bar
// too bizz bazz buzz bizz
status = contains(mp->foobar());格式化版本2:
if (mp) // if foo bar likes to foo, the foo
{ // but bar foo also is bar
// too bizz bazz buzz bizz
status = contains(mp->foobar());问题所在的行是// too bizz bazz buzz bizz,因为它的位置永远不会“确定”。有人知道为什么这条评论总是来回移动吗?另外,关于如何防止这种情况的任何想法(更改格式化文件、格式化程序的不同版本等)。
发布于 2020-08-10 07:54:00
很明显,这是clang-format中的一个错误。我发现的唯一变通方法是移动第三个注释行。
如果您从与后续代码行排列的最后一个注释行开始: if (mp) //如果foo bar喜欢foo,那么foo { // bar foo也是bar // too bizz bazz bizz bizz
那它就不会动了。但是如果初始缩进是其他的,它会像你找到的一样进行切换。
ReflowComments: false,那么第三个注释行的缩进不会切换,但是缩进需要两次往返才能完成。第一次调用clang-format时,注释与其他注释排列在一起。第二次调用将其与后续代码排成一列。在那之后,它不会移动,就像上面的子弹所描述的那样。总的来说,这是非常奇怪的行为,我假设它会在clang-format.的后续版本中进行更改/修复
https://stackoverflow.com/questions/58676367
复制相似问题