我可以对同一项目中的某些文件使用不同的 .clang_format 吗?

问题描述 投票:0回答:3

我想介绍clang-formatter给我们公司,但是有一些限制,比如:

我们公司有些文件tab-width=2比较好读,有些文件tab-width=4比较好读。

这意味着某些文件(由于其内容的性质)应该具有不同的 .clang 格式配置文件。所以,假设我们最终得到 2 或 3 个配置,适合每个内容, 有没有一种方法可以强制 some 文件由特定的 .clang_format 格式化?

例如,

  • 这可以通过在每个文件夹中放置不同的 .clang_format 来完成吗?

  • 通过在每个文件的开头输入 YAML 行作为注释(如 doxygen)?

我们使用 C、C++、visual studio 和 vim

c++ visual-studio vim clang clang-format
3个回答
3
投票

您对使用哪个

.clang_format
文件的控制有限,因为格式化程序将开始在源文件目录中搜索文件,然后连续搜索父目录。但是,以这种方式组织目录结构可能会非常不方便。

然而,您可以在每次调用时覆盖样式中的特定选项。来自clang格式文档

使用

-style="{key: value, ...}"
设置具体参数,例如:
-style="{BasedOnStyle: llvm, IndentWidth: 8}"

不幸的是,Visual Studio 插件 目前不允许在每个文件的基础上更改传递给

clang-format
的选项,因此后一种方法在这里不起作用。

据我所知,尚不支持允许从源文件中设置样式选项的 'modeline' 注释,尽管我希望看到在未来的版本中添加它。


2
投票

您可以将不同的 .clang-format (_clang-format) 文件放入每个目录。 clang-format 将开始在文件的目录中寻找它,然后搜索它的所有父项,直到找到一个(假设您正在设置 -style=file)。

这听起来像是可以解决您的用例。如果没有,我想了解如何。您是否在同一目录中有需要不同缩进的文件?


0
投票

我已经开始在代码文件中实现对样式注释的支持:即以像

// clang-format style=...
这样的注释的形式,通过它你可以激活任何你也可以在命令行上使用
-style=...
激活的东西。

具体来说,您可以在每个代码文件中执行以下操作:

  • // clang-format style=Google
  • // clang-format style={BasedOnStyle: Google, IndentWidth: 2}
  • // clang-format style={BasedOnStyle: InheritParentConfig, IndentWidth: 2}
  • // clang-format style=file:specific.clang-format
  • // clang-format style=file:../../path/to/specific.clang-format

这是 我在 LLVM GitHub 存储库上的功能请求,这是 我的暂定实现

不幸的是,

clang-format
的维护者似乎反对这个想法,请参阅 https://reviews.llvm.org/D145435 上的讨论。我并不是建议此功能的支持者盲目地向此讨论线程发送垃圾邮件,但如果有重要的论据,或者开源项目的具体应用将从该选项中受益,那可能仍然是一个有价值的补充。否则,我不得不得出结论,当前的
clang-format
没有选项可以从代码文件中影响样式,这是设计使然。

© www.soinside.com 2019 - 2024. All rights reserved.