ReSharper C++ 最新变化

ReSharper C++ 2020.1 引入了一些新功能并更新了部分现有功能。 最引人注意的改进是对 C++20 支持的更新、改进的代码补全和一组新的代码检查与快速修复。 新的编码辅助功能,例如 Rearrange Code 和 Complete Statement,可以帮助您高效地编写和更改代码。 对于游戏开发者,ReSharper C++ 引入了对 HLSL 的初步支持,并更加符合 Unreal Engine 指南。

下载

30天免费试用

C++20

C++20 标准已几乎定稿,ReSharper C++ 引入了对其中另一组功能的支持。

Using enum

Using enum

ReSharper C++ 2020.1 添加了对 using enum 声明的支持,借助此声明,您可以将特定枚举器从作用域枚举扩展到本地范围。 新重构 Introduce Using Enum 可以帮助您将 using enum 声明添加到现有代码。

概念

C++20 概念

对于 C++20 概念,ReSharper C++ 支持约束类型占位符和缩写函数模板的新语法。 改进的不满意约束错误消息可以帮助您了解替换模板时出错的位置。

Using enum

适用于 lambda 的模板语法

ReSharper C++ 还会为使用适用于 lambda 的模板语法建议快速修复,从而帮助您避免错误或统一使用 lambda 和函数。

Unreal Engine

Unreal Engine

ReSharper C++ 2020.1 改进了 Unreal Engine 项目中的 Rename 重构。 现在,它可以更新相应的 *.generated.h include 指令以及前缀为 AFETSU 的相关文件。

ReSharper C++ 检测到 Unreal Engine 项目时,它会调整默认设置以停止建议 Use auto,从而更好地符合 Unreal Engine 指南。 ReSharper C++ 2020.1 还包含控制台变量和日志类别的更新命名规则。 您现在可以从 Search Everywhere/Go to 导航到包含 Unreal Engine 样式枚举的命名空间。

ReSharper C++ 现在终于支持 SpatialOS GDK 和包含虚拟文件路径的 USF 文件了。 了解更多。

HLSL 实验性

HLSL

ReSharper C++ 2020.1 现在为高级着色器语言 (HLSL) 提供初步支持ReSharper C++ 会根据您的默认配色方案高亮显示 HLSL 代码并显示代码元素的嵌入提示和工具提示以及类型信息和文档。 您还可以搜索并快速导航到结构、函数或整个解决方案中的参数、引用的文件和标准库。 为了使 HLSL 体验更完美,ReSharper C++ 为您提供了智能代码补全、自动插入匹配分隔符,等等。

代码分析

代码分析

多个新检查可用于以下问题,并通过相应的快速修复帮助您解决问题:

  • 未使用的 lambda 捕获。
  • 可重写 lambda 以使用显式模板参数。
  • 使用函数样式转换,取代 C++ 转换。
  • 转换为 void* 时,使用 reinterpret_cast 取代 static_cast
代码分析

两个额外功能可以帮助您采用 C++17 maybe_unused 特性:

  • 一个快速修复,可以将 [[maybe_unused]] 添加到未使用的参数或变量。
  • 一个上下文操作,可以将 UNREFERENCED_PARAMETERQ_UNUSED 注解替换为 [[maybe_unused]]

捆绑的 Clang-Tidy 二进制文件已更新为 Clang 10,添加了 70 多项来自最新 LLVM 版本的新检查和编译器诊断

代码补全

补全列表现在会建议标签名称、标准 C++ 特性、新的 std::forward 后缀模板以及基本函数调用的参数。 此外,ReSharper C++ 现在还可以在宏主体中提供代码补全。

编码辅助

编码辅助

ReSharper 中适用于 .NET 的两个知名功能现在终于可以在 ReSharper C++ 中使用了:

  • Rearrange Code 可以快速来回移动代码元素,扩大或缩小当前范围,等等。
  • Complete Statement 可以插入必需的语法元素来完成当前语句并将脱字符号放在合适的位置。

借助改进的输入辅助,您现在可以选择任意的代码段并输入括号、大括号、中括号或引号,以便使用相应的符号环绕选定内容。 代码可读性帮助程序(参数名称提示和类型提示)现在可以用于独立代码。

新的 Document 编辑操作(默认快捷键为 Ctrl+/),让您能够快速地为附近的代码元素生成文档注释,而不必使用上下文操作。

枚举重构

枚举重构

ReSharper C++ 2020.1 引入了两个新的重构来帮助您升级枚举用法:

  • Convert to Scoped Enum 可以将 C 样式枚举声明转换为 C++11 作用域枚举。
  • Introduce Using Enum 可以添加 C++20 using enum 声明并缩短枚举器引用,从而提升代码可读性。

导航

代码导航功能已扩展得更加易于使用:

  • Go to Declaration 可用于注释中的标识符。
  • Search Everywhere/Go to 包含两个新的筛选器类别:概念和命名空间。 在搜索框中输入“/”可以查看所有可用的筛选器。
  • 您现在可以点击中键(点击鼠标的滚动按钮)来调用 Go to Declaration

在 File Structure 窗口中,图标现在包含可以显示类成员可访问性、继承和 virtual/static/pure 说明符的指示器。

include 指令排序

include 指令排序

ReSharper C++ 2019.3 让您可以对 #include 指令排序,重新排列现有组,以及创建由空行分隔的新组。 ReSharper C++ 2020.1 添加了两个新设置来使操作更具配置性:

  • 区分大小写的排序。
  • 按目录对标题分组。

如果在 ReSharper | Options | Code Editing | General Formatter Settings 页面上选中 Read code style form .clang-format style,现在则可以从 .clang-format 文件导入排序设置。

其他变更

ReSharper C++ 2020.1 包含多个其他值得注意的变更:

  • Generate 对话框提供了一个选项,用于使用 C++17 [[nodiscard]] 特性标记生成的 getter 和构造函数。
  • Generate mock functions 支持 GTest 1.10 中引入的 MOCK_METHOD 宏。
  • 新设置 Use named pipes to communicate with child processes 让您可以修复由安全软件导致运行异常的单元测试。

ReSharper 也迎来了更多变更。 例如,现在可以导出和导入单元测试会话。

下载

30天免费试用

ReSharper C++ 2019.3

C++20 支持

C++20 支持

C++20 功能齐全,明年将获官方签署,为 C++ 开发者提供一系列期待已久的功能。 ReSharper C++ 2019.3 已支持其中的许多功能,还通过其他分析和洞察增强了这些功能。

首先,ReSharper C++ 现在能够理解聚合可以从带括号的值列表初始化,有时需要使用函数模板执行其他 ADL

ReSharper C++ 解析器不仅支持概念,还支持 Rename 重构和 Find Usages。 更出色的代码分析可以为您显示概念相关错误的更多详细信息。 例如,如果因为未满足概念要求而导致重载解析失败,您会在工具提示中看到所有详细信息。 而且,在 ReSharper 2019.3 中,我们还为工具提示添加了颜色,可以显示重载解析失败的详细信息。

我们已经发布了一系列 C++20 和 ReSharper C++ 博文,您可以从中了解新语言功能及其在 ReSharper C++ 中的采用情况。

代码分析和快速修复

代码分析和快速修复

如果您觉得 Clang 警告容易让人分心,现在可以在检查菜单中将其禁用。 对于所有代码检查,您现在可以对文件中的所有此类问题禁用相应检查 - 只需使用 Disable in file with comment,或者使用 Disable all inspections in file with comment 禁止文件中的所有检查。

在您输入 lambda 主体时,新的快速修复会帮助您将变量添加到 lambda 捕获列表中。 无需手动执行操作 - 只需将脱字符号放到 lambda 主体中的变量上,然后按 Alt+EnterReSharper C++ 将为如何更新捕获列表建议选项列表。

Clang-Tidy

Clang-Tidy

在此版本中,我们将内置的 Clang-Tidy 二进制文件升级到 Clang 9,希望为您提供许多新代码检查和随附的修复。 重要的是,捆绑的二进制文件不会再阻止对源文件的修改。 Clang-Tidy 的启动速度也更快,因为它不会等待所有其他 ReSharper C++ 分析完成。

Clang-Tidy 设置在以下多个方面获得改进:

  • 您现在可以使用 3 个选项选择要在 ReSharper C++ 中使用的 Clang-Tidy 可执行文件。 除了捆绑的二进制文件和自定义二进制文件(您可以在设置中提供),现在您还可以从 %PATH% 中选择一个(ReSharper C++ 将在 %PATH% 环境变量列出的文件中搜索并告知您搜索结果)。
  • 您现在可以将 ReSharper C++ 指向特定的 Clang-Tidy 配置文件,而不是之前使用的 YAML/JSON 格式字符串。

类型提示

ReSharper C++ 可为您提供代码提示,帮助您改进代码的可读性。 v2019.3 中添加的新代码提示可以帮助您在查看现代 modern C++ 代码时确定不明显的类型。

  • 针对 auto 变量
  • 在结构化绑定中
  • 针对函数和 lambda 返回类型
实时模板

实时模板

ReSharper C++ 2019.3 中,多个实时模板已重命名,以匹配相应的语言关键字。 例如,要生成类、类型 class(以前为 cls);对于结构,请使用 struct,而不是 str;对于联合、枚举和命名空间,请使用相似的逻辑。

导航改进

导航改进

Go to file member 通过以下两种方式获得改进:

  • 对话框会立即显示,而无需等待文件解析。
  • 如果函数的声明和定义位于同一个文件,对话框现在仅会显示它们一次。

在初始值设定项列表中,代码提示会帮助您更好地理解实际上正在初始化的对象。 现在,您还可以从用大括号括起来的初始值设定项列表的左大括号导航到聚合类。

代码分析和快速修复

格式化程序

ReSharper C++ 2019.3 中,现在可以将您的格式化设置导出到 .clang-format 文件。 使用 ReSharper | Options | Code Editing | General Formatter Style | Write current style to .clang-format

添加了两个新的格式化程序选项,用于控制间距:

  • before ptr in abstract declaration
  • before ref in abstract declaration

ReSharper C++ 2019.3 现在可以检查代码中 #includes 指令的顺序。 只需提供排序设置,相应的检查和快速修复会帮助您注意它们是否顺序颠倒,并及时对它们重新排序。

Unreal Engine 4 支持

Unreal Engine 4 支持

ReSharper C++ 检测到您正在开发 Unreal Engine 项目时,它会调整行为来适合 UE4。

UCLASSes 的“新”后缀模板扩展为合适的出厂函数调用(将会在垃圾回收器中注册创建的对象)。 现在可以使用具有相应名称的实时模板来帮助您快速生成 USTRUCT/UCLASS/UENUM/UENUMCLASS

Unreal Engine 的智能指针(TSharedPtr、TSharedRef、TWeakPtr、TUniquePtr)现在由 ReSharper C++ 处理,与 std::shared_ptr/std::unique_ptr 类似。 这表明一些功能(如 Parameter Info、代码分析和后缀代码补全)适用于智能指针。

最后,还对 UE4 项目进行了一些性能改进。 例如,我们在 UE4 编辑器中修复了“Refresh Visual Studio Project”之后的挂起。

项目属性

项目属性

对于自定义编译器工具链或自定义构建工具,ReSharper C++ 2019.3 添加了 ReSharper 项目属性。 它们存储在 ReSharper 设置中并允许您指定:

  • Include 目录
  • 预处理程序定义
  • C++ 语言标准

性能改进

得益于代码高亮显示引擎中的一些改进,重新高亮显示现在速度更快。 函数主体变更后,仅会重新分析主体。

根据 includes 图表添加启发后,Find Usages 速度已加快不少。 这通过剥离没有任何用例的文件为您提供了帮助。

其他变更

ReSharper 将迎来更多变更。 您可以在此处了解更多。

ReSharper C++ 2019.2

启动更快

在这个版本中,我们已经完成了在过去几个发布周期中做的工作,现在可以正式宣布在 ReSharper C++ 中实现了新的预处理程序。 事实上,现在有两个 – 一个新的用于索引,一个原本的用于其他部份。 这个新索引在典型解决方案 (如 LLVM 和 Unreal 引擎) 上的索引速度提高了 15-25%。

补全总结工具提示

代码补全

在代码补全中,ReSharper C++ 显示补全列表中每个项目的总结工具提示(由 ReSharper 选项中的 Environment | IntelliSense | Completion Appearance 页面的 Show summary 复选框控制)。 现在,已经用颜色表示选定补全项目的说明,并显示相应项目的文档。

代码提示

代码提示

编辑器提供了更多代码提示,以帮助提高代码可读性。 在预处理程序指令之后引入了新提示,以及由非 const 引用传递的函数参数,而聚合初始化表达式中的提示现在显示了初始化基类的名称。

更多 C++20 支持

C++ 委员会已近乎准备好签署 C++20 标准。 当然,我们正在努力获得完全合规的支持。 ReSharper C++ 2019.2 支持:

  • 有条件的 explicit
  • 新的 char8_t 类型,
  • 在 lambda 初始化捕获中的包扩展,
  • 默认的可构造和可分配的无状态 lambda,
  • C++20 聚合规则,
  • constevalconstinit 说明符,
  • 结构化绑定声明的 C++20 改进。
输入辅助

输入辅助

改进了多行注释中的输入辅助。 首先,使用单行语法的多行注释可以自动扩展。 其次,启用虚拟空格后,扩展多行注释现在自动插入正确的缩进。

用大括号换行代码块现在更容易 – 只需选择代码块或表达式,然后敲入左大括号。 ReSharper C++ 将替您完成其余工作:

格式化程序

格式化程序

ReSharper C++ 2019.2 中有一大堆新的格式化程序选项:

  • 在函数声明和调用括号中使用连续行缩进。
  • 在声明中,偏好在 ")" 前换行。
  • 在调用中,偏好在 ")" 前换行。
  • 在初始化列表中使用连续行缩进。
  • 对齐初始化列表参数。
  • 在初始化列表中,偏好在 "{" 后换行。
  • 在初始化列表中,偏好在 "{" 前换行。

代码分析

新检查可以帮助您捕获更多代码异味:

  • 不匹配的预处理程序指令。
  • 隐式删除明确默认的特殊成员函数。
  • 最终类中的冗余 final 函数说明符。

用于 C 风格转换的 Use static_cast 修复适用的检查可以批量运行,也可以作为代码清理的一部分。

导航

导航

代码导航操作得到了目标准确的更新:

  • 当一个对象在变量声明和新表达式中默认初始化时,Go to declaration 可以导航到默认构造函数调用。
  • Find usages 在默认初始化中查找默认构造函数的用法。
  • Go to symbol 现在隐藏具有限定名称的符号(例如,类以外的函数定义)。

此外,可以通过 Go to File member 对话框在文件中搜索。 结果列表将包含所有匹配成员的名称,以及搜索字符串在文件中出现的所有位置。

Unreal Engine

在以前版本中,我们开始着手更好地支持 UE4 专用远程过程调用。 现在,我们更新了 RenameChange Signature 重构,以便正确处理 RPC 函数。 也提供基于 UE4 的代码的一些新的代码分析检查,尤其是针对丢失或错误设置的 UE4 反射宏:

自从在 v2019.1中增加反射说明符的代码补全后,我们已为其增加了内置的文档。 当脱字符号位于说明符上时,它显示在快速文档弹出窗口中(Ctrl+Q)。

其他变更

ReSharper C++ 2019.2 初步支持 Visual Studio 2019 引入的 “Per-Monitor DPI Awareness” 模式。 我们还更新了 ReSharper | Options | Environment | Performance Guide 页面,添加 Windows Defender 部分以及所有性能提示的说明,阐明在应用建议后将要执行的操作。

还有一些插件编写者乐于听到的好消息:来自 ReSharper C++ 的 C++ 程序集现在已经包含在 ReSharper SDK 中!