当使用clang格式的命令行工具两次格式化同一个文件时,两次都会进行更改。
我的理解是,一旦格式化,尝试重新格式化同一文件不应产生任何更改。
下面是我所做的测试:
输入文件
$ cat test.c
//********************************************** AAAAAAA BBBB***************************************************//$ clang-format -i test.c
$ cat test.c
//********************************************** AAAAAAA
//BBBB***************************************************//BBBB之前添加了额外的空间)**$ clang-format -i test.c
$ cat test.c
//********************************************** AAAAAAA
// BBBB***************************************************//我使用的版本是:10.0.0-++20200323042644+d32170dbd5b-1~exp1~20200323154014.129 on Ubuntu 18.04.2 (注意,我也在clang-format-9中复制了这种行为)
这是我遇到的一个错误,还是我最初的假设是错误的?
编辑:在10.0.1-++20200507062652+bab8d1790a3-1~exp1~20200507163249.158中的可复制性
发布于 2020-05-13 21:16:17
我可以复制这种缺乏幂等的能力。您可以在这里做三件事:使用不同的样式,使用较少的规则,或将其作为bug归档。
1.使用不同的风格
clang-format 10.0.0附带的样式在--help中列出:
--style=<string> - Coding style, currently supports:
LLVM, Google, Chromium, Mozilla, WebKit.其中LLVM是默认的。若要指定样式,请使用clang-format --style=<style> ...。除Webkit之外的每种样式都会复制此错误(但webkit样式不会更改初始文件):
$ clang-format --style=webkit test.c > test2.c
$ clang-format --style=webkit test2.c > test3.c
$ diff test2.c test3.c
$ 您的里程可能会有所不同,因为您已经说过,这是您遇到的许多幂等问题之一。
2.使用规则子集
每种样式都由规则组成,您可以根据需要修改这些规则。可以使用llvm转储当前配置(默认配置)。
$ clang-format --dump-config | tee .clang-format
---
Language: Cpp
# BasedOnStyle: LLVM
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignConsecutiveMacros: false
AlignConsecutiveAssignments: false
<output truncated> 您可以手动选择要使用的较小的这些规则子集,或者在达到幂等性之前消除规则。
如果您将这个.clang-format文件放在项目的根目录中,并进行修改,那么您可以告诉clang-format使用--style=file查找它。请注意,如果希望在子目录中应用不同的格式规则,则可以将.clang-format文件放入该子目录。
3.提交错误文件
您问题的关键组件之一是clang格式是否将缺乏幂等性视为一个bug。情况就是这样,根据这些评论,这个问题已经被视为一个bug 0,1。
我可以在Macos上的10.0.0上复制这个。您拥有所有需要的信息,可以将其作为错误报告文档介绍中的一个bug进行归档。显然,此选项要求您等到修补程序可用为止。
https://stackoverflow.com/questions/61754044
复制相似问题