宏替换预览

在宏上悬停鼠标时,您现在可以在工具提示中看到扩展预览,带有完整的语法高亮显示和正确的代码格式设置。 您仍然可以使用 Substitute macro call(替换宏调用)上下文操作在编辑器中直接展开,但即时预览使宏操作更简单。

Quick Documentation(快速文档)弹出窗口 (Ctrl+Shift+F1) 中,您可以点击替换预览中的实体并查看其文档。 如果宏扩展包含未知标识符,它将在悬停工具提示和 Quick Documentation(快速文档)弹出窗口的替换预览中高亮显示,帮助您发现问题。

C++20 模块

ReSharper C++ 2022.3 引入了对 C++20 模块的初步支持。 在这次更新中,我们完善了实现,以处理更多极端情况并更好地支持使用它们的实际项目。 我们还扩展了 ReSharper C++ 功能列表,帮助您编写模块化代码。

Find usages(查找用法)现在可以找到导入给定模块的所有位置。

Rename(重命名)重构可以帮助您安全地重命名模块和模块分区,更新代码中所有的相关声明和导入。

代码补全带来了对 C++20 模块语法的改进支持。 import 模块时会出现已知模块的名称建议,补全列表还包括允许使用的模块相关关键字。

我们还更新了多项编码辅助功能以支持 C++20 模块。 代码格式化程序和 Rearrange code(重新排列代码)现在可以处理 export 块和导出的实体。 要重新排列代码元素,首先将文本光标置于代码元素上或选择代码并按 Ctrl+Shift+Alt,然后按对应箭头键。

C++23 支持

ISO C++ 标准委员会最近完成了 C++23 的技术工作。 许多 C++23 功能已在主要编译器中可用,ReSharper C++ 2023.1 可以帮助您进行尝试。

Deducing this(推导 this)是 C++23 的一项主要功能,引入了指定成员函数的新方式。 您可以使用 this 关键字将对象形参设为显式,这简化了多个 C++ 习语的实现。 例如,您可以将仅在 const 和引用限定符方面有所不同的相同函数重载替换为一个推导对象形参的类型和值类别的函数。

C++23 带来了更多使用 auto 的方式。 使用 auto(x)auto{x},您可以复制实参,就好像它是按值作为函数实参传递的一样。

ReSharper C++ 还支持以下简化现有语言语法的 C++23 更新:

  • 在许多情况下,lambda 中的空圆括号 () 现在为可选。
  • init 语句中现在允许使用别名声明。
  • 复合语句末尾已可使用标签。

Unreal Engine

您可以使用新的内置文件模板快速添加简单或复杂的 Unreal Engine 测试。 只需转到 Solution Explorer(解决方案资源管理器),右键点击所需项目文件夹,打开 Add(添加)菜单(或使用 Ctrl+Alt+Insert)。

ReSharper C++ 还提供了新的 UINTERFACE 实时模板,很好地补充了现有的 UCLASSUSTRUCTUENUM 模板。 在 Unreal Engine 项目上工作时,在代码补全列表中选择相应条目即可添加新的接口类。

您现在可以指定将用于解析着色器文件中的 #include 指令的源目录映射。 如果在游戏或引擎项目中安装了 RiderLink,您还可以直接从 Unreal Engine 加载着色器映射。

借助新的补全条目,您可以生成 lambda 表达式,其中应为委托、TFunctionTFunctionRef 实参。

如果您对用于 Unreal Engine 开发的独立跨平台 IDE 感兴趣,请选择 Rider。 Rider 中的 Unreal Engine 支持与 ReSharper C++ 保持一致,您可以在 Rider 2023.1 更新中期待相同改进。

调用跟踪

ReSharper 的 Call tracking(调用跟踪)已登陆 ReSharper C++! 您现在可以在传入调用层次结构中查看和浏览调用链。 将文本光标置于函数上,然后从上下文菜单中选择 Inspect | Incoming calls(检查 | 传入调用),或按 Ctrl+Shift+Alt+AInspect This(检查此)菜单调用。

在调用跟踪结果窗口中,您可以双击层次结构条目来导航到编辑器中的相应调用,或者展开节点以检查其传入调用。

目前不支持跟踪传出调用。

代码分析

我们引入了一项检查,它可以标记按值传递的复制开销高的类型的函数形参。 在此类情况下,ReSharper C++ 会建议改为通过 const 引用传递形参。 另一方面,Create function from usage(根据用法创建函数)修复现在更倾向于传递按值复制开销较低的类型的形参。

以下新代码检查会警告您注意潜在代码异味:

  • 一项检查可以识别局部作用域内未使用的模板形参和类型别名,以及冗余基类初始值设定项。
  • 另一项检查则可以标记返回 HRESULTNTSTATUS 错误代码的函数的未使用返回值。

另一项检查能够显示 C++17 类模板实参推导何时无法推导模板实参,从而允许您通过快速修复快速添加所需实参。

ReSharper C++ 2023.1 还包括对编译时求值引擎的许多改进,例如基于范围的 for 循环的求值以及对联合的更好支持。

重构

除了专用的 Refactor This(重构此)弹出窗口 (Ctrl+Shift+R) 外,您现在可以从 Alt+Enter 菜单轻松访问大部分重构。

新的 Create parameter(创建形参)快速修复为 Change signature(更改签名)重构提供了方便的快捷键。 需要向包含函数添加新形参时,只需调用快速修复并输入新形参的类型。 重构将更新所有函数声明和用法,并通知您任何冲突。

Extract method(提取方法)和 Change signature(更改签名)重构的调用现在更加直接。

  • 如需提取单行函数,现在无需选择整行,重构会在没有有效选区的情况下提取当前行。
  • Change signature(更改签名)现在可以在文本光标位于函数签名中的任何位置时调用,而不是像以前一样只在函数名上调用。

其他增强功能

ReSharper C++ 现在支持 __VA_OPT__ 宏,该宏在 C++20 中引入以帮助定义可变参数宏。 当变量实参列表不为空时,此特殊函数宏展开为其实参,否则展开为空。

默认情况下,对 #include 指令排序时,文件路径位于文件夹之前。 如果您希望按字母顺序排列所有 include,可以禁用新的 Put files before folders(将文件放在文件夹之前)选项。

新的后缀模板允许您在 Unreal Engine 项目中使用 std::as_constAsConst 快速进行 const 引用。

默认情况下,以 /* 开头的注释不再以 */ 自动闭合。 您可以使用新的 Insert */ after /*(在 /* 后插入 */)输入辅助选项启用闭合注释的自动插入。

查看 ReSharper 最新变化,了解此版本中引入的其他更改。 例如,CSS 支持现在默认处于禁用状态。