使用 Clang-Format
在 C++ 文件(以及部分 JavaScript 和 TypeScript 文件)中,ReSharper 支持 Clang-Format 定义的格式样式。 默认情况下,Clang-Format 配置文件会自动用作格式样式设置的来源。
什么是 Clang-Format,ReSharper 如何支持它?
Clang-Format 是一种广泛使用的 C++ 代码格式化工具。 它提供了一种选项,可以在 YAML 格式的文件中定义代码样式选项——文件名为 .clang-format 或 _clang-format ——这些文件通常会成为项目的一部分,您可以在其中保存所有代码样式规则。
要查看 Clang-Format 样式选项的完整列表以及配置文件的示例,请查看 Clang-Format 文档。
在 ReSharper 中有两种使用 Clang-Format 的方法:
如果您的项目代码样式已在 Clang-Format 文件中配置,ReSharper 的代码格式化引擎可以使用这些样式中的 大部分样式 来格式化 C++ 文件,此外还支持其原有样式。 请注意,如果存在冲突, .clang-format 文件中的设置将覆盖 *.DotSettings 文件中的设置。
如果您更喜欢默认的 LLVM 样式格式化并希望使用 clang-format 作为代码格式化工具,您可以在 ReSharper 选项 Alt+R, O 的 页面下选择 Clang-format, C++ 格式化引擎 ,并可选地指定一个自定义的 Clang-format 可执行文件。 在这种情况下, .clang-format 配置文件将被自动读取。
解决方案中的 Clang-Format
默认情况下,即使您选择使用 ReSharper C++ 格式化引擎,ReSharper 也会考虑 Clang-Format 属性,并且这些属性将覆盖 ReSharper 和 Visual Studio 选项 中定义的偏好设置以及 EditorConfig 样式。 如果您希望 ReSharper 忽略 Clang-Format 样式的代码格式和代码语法,请在 ReSharper 选项 的 页面上清除相应的复选框。
当启用 Clang-Format 支持并且存在影响当前文件的 .clang-format 或 _clang-format 文件时,ReSharper 将帮助您了解应用了哪些 Clang-Format 样式以及这些设置的来源:
在 ReSharper 的 C++、JavaScript 和 TypeScript 格式选项页面上,如果当前文件的 Clang-Format 样式覆盖了页面上的至少一个偏好设置,您将看到一个黄色警告,每个被覆盖的偏好设置也会以黄色突出显示。 例如:

在 文件格式信息窗口 中,您可以查看并研究所有影响当前文件的 .clang-format 和 _clang-format 文件:

将代码样式设置导出到 Clang-Format
如果您打算通过 Clang-Format 共享代码样式设置,您可能希望将 ReSharper 中已配置的样式导出到 .clang-format 文件。
从主菜单中选择 或按 Alt+R O ,然后在左侧选择 。
在 代码样式配置文件 部分,单击 将当前样式写入 .clang-format。 这将打开 导出到 .clang-format 对话框。
默认情况下,ReSharper 会将设置写入当前解决方案根目录中的一个新的 .clang-format 文件。 如果存在一个或多个 .clang-format 文件,ReSharper 将使用目录层次结构中最近的文件来保存设置。 如果需要,您可以使用对话框顶部的路径选择器更改目标文件。
要进行更详细的配置,您可以展开 显示其他选项 并选择以下选项:
- BasedOnStyle
设置相应的选项以定义 默认情况下所有选项使用的样式。
- 隐藏与所选基础样式一致的选项
与在 BasedOnStyle 中选择的基础样式中定义的值相同的选项将不会被导出。
- 导出 Cpp 设置
定义是否导出影响 C++ 代码的 Clang-Format 选项。
- 导出 JavaScript 设置
定义是否导出影响 JavaScript 代码的 Clang-Format 选项。
如果指定位置中已存在 .clang-format 文件,则可能会存在该文件中已有属性值与 ReSharper 即将保存的属性值之间的冲突。 这些属性将以红色显示,如果您继续保存,冲突将以新生成的值为准进行解决。
单击 导出。 ReSharper 将在指定位置创建或更新 .clang-format 文件。
在 上下文配置 格式化规则后,您还可以将格式样式保存到 Clang-Format。
支持的 Clang-Format 选项
选项 | 支持的语言 |
|---|---|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
此功能在以下语言和技术中 受支持: