首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >clang-格式对已经格式化的文件进行更改。

clang-格式对已经格式化的文件进行更改。
EN

Stack Overflow用户
提问于 2020-05-12 14:15:42
回答 1查看 1K关注 0票数 3

当使用clang格式的命令行工具两次格式化同一个文件时,两次都会进行更改。

我的理解是,一旦格式化,尝试重新格式化同一文件不应产生任何更改。

下面是我所做的测试:

输入文件

代码语言:javascript
复制
$ cat test.c 
//********************************************** AAAAAAA BBBB***************************************************//
  1. 第一格式-按预期更改
代码语言:javascript
复制
$ clang-format -i test.c 
$ cat test.c 
//********************************************** AAAAAAA
//BBBB***************************************************//
  1. 第二格式-第二行意外更改(在BBBB之前添加了额外的空间)**
代码语言:javascript
复制
$ clang-format -i test.c 
$ cat test.c 
//********************************************** AAAAAAA
// BBBB***************************************************//
  1. 第三格式--最终产生相同的结果。

我使用的版本是: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中的可复制性

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-13 21:16:17

我可以复制这种缺乏幂等的能力。您可以在这里做三件事:使用不同的样式,使用较少的规则,或将其作为bug归档。

1.使用不同的风格

clang-format 10.0.0附带的样式在--help中列出:

代码语言:javascript
复制
 --style=<string>           - Coding style, currently supports:
                                 LLVM, Google, Chromium, Mozilla, WebKit.

其中LLVM是默认的。若要指定样式,请使用clang-format --style=<style> ...。除Webkit之外的每种样式都会复制此错误(但webkit样式不会更改初始文件):

代码语言:javascript
复制
$ clang-format --style=webkit test.c > test2.c
$ clang-format --style=webkit test2.c > test3.c
$ diff test2.c test3.c
$ 

您的里程可能会有所不同,因为您已经说过,这是您遇到的许多幂等问题之一。

2.使用规则子集

每种样式都由规则组成,您可以根据需要修改这些规则。可以使用llvm转储当前配置(默认配置)。

代码语言:javascript
复制
$ 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 01

我可以在Macos上的10.0.0上复制这个。您拥有所有需要的信息,可以将其作为错误报告文档介绍中的一个bug进行归档。显然,此选项要求您等到修补程序可用为止。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61754044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档