ReSharper C++ 2020.3 实现了 C++20 比较规则并添加新检查,帮助您采用 C++20 范围库,朝着完全 C++20 支持又迈出了一步。 Push-to-Hint 内嵌提示和新的导航功能将让您的日常开发更加舒适。 Unreal Engine 开发者可以利用与 UnrealHeaderTool 的编辑器集成、改进的项目模型以及基于 HLSL 着色器文件内控制流分析的新检查功能。
30天免费试用
ReSharper C++ 2020.3 提供了与 UnrealHeaderTool 的无缝集成,帮助您直接在编辑器中捕获有关 Unreal Engine 类元数据的更多问题。 处理 Unreal Engine 项目时,ReSharper C++ 将在您正在编辑的文件上自动运行 UnrealHeaderTool,并显示任何错误或警告,就像其他检查一样。 观看实际运行中的 UnrealHeaderTool 集成。
为了让您始终保持最新状态,ReSharper C++ 现在可以实时跟踪 Unreal Engine 属性,并在您保存 .Build.cs、.Target.cs、.uproject 或 .uplugin 文件中的任何变更时立即重新生成项目模型。
ReSharper C++ 2020.3 加强了与 Unreal Engine 编码标准的一致性。 例如,ReSharper C++ 现在建议使用 MoveTemp(相当于 Unreal Engine 的 std::move
)转换到 rvalue 引用。
ReSharper C++ 2020.3 完全支持 C++20 比较规则。 其中包括比较运作方式的重大变更,将允许语言重写比较表达式或反转参数的顺序。 现在,您可以查阅工具提示,了解如何重写表达式。 当无法解析比较运算符时,错误消息将列出所有可能的重载候选。
C++20 还增加了默认的比较运算符。 如果您不确定类中的默认比较运算符为什么被隐式删除,可以查看详细的工具提示消息找出确切原因。 ReSharper C++ 现在还可以推断默认三元比较运算符的返回类型。
新的快速修复允许您向源文件快速添加 #include <compare>
指令,这是使用返回标准比较类别的三元比较运算符(如 std::strong_ordering
)时的必需条件。
Create operator from usage 快速修复已更新,也可支持 C++20 比较规则。 现在,除了非成员版本外,您还可以创建运算符的成员版本和友元版本。 对于可以用主要运算符重写的次要运算符,您可以选择创建主要运算符或次要运算符。
ReSharper C++ 提供多种内嵌提示。 尽管所有提示都可在某些情况下提供帮助,但我们也收到一些反馈,大家表示有时它们可能会让人不知所措。 为了解决这个问题,我们为内嵌提示推出了新的“Push-to-Hint”机制。 在 Push-to-Hint 可见性模式下,提示仅在您按住 Ctrl 或按两次 Ctrl 后显示。
我们确保可以为每种 C++ 内嵌提示分别配置可见性模式。 您可以使用上下文菜单快速更改给定提示的可见性模式,或转到 Environment | Inlay Hints | C++ 下的新选项页面查看所有设置。
新的上下文操作可帮助您反转三元运算符表达式。
现在,在读取前在所有路径中重新分配局部变量的情况下,可以使用“Join declaration and assignment”快速修复。
启用导入补全后,补全列表将从当前文件未包含的头文件中建议不完整类的合适成员。
除了添加 include 指令或前向声明的选项外,导入补全现在还建议一个新选项,为相应的类添加一个详细的类型说明符。
我们为接受宏常量的库函数改进了参数代码补全。 现在,适用于当前参数的库宏常量在补全列表中具有高优先级。 这种启发式方法适用于标准库、WinAPI 和 OpenGL 中的函数。
除了常规搜索外,Find Text 现在还可以执行模糊搜索,这意味着它会考虑可能的拼写错误和单词遗漏。 如果您正在查找用作文本格式化函数(如 printf
或 std::format
)参数的特定格式字符串,这个功能会非常实用。
您现在可以使用 Go to Declaration 在匹配的预处理程序指令之间跳转,例如条件预处理块的分支,或者单个文件中相同宏的 #define
和 #undef
。
Go to Declaration 也可用于快速导航至基本函数 - 只需在 override
关键字上调用。
C++ 已支持 Peek Implementations 和 Peek Base Symbols,这使您可以在弹出窗口中查看和编辑代码,无需离开正在编写的代码。
为了提高可读性,File Structure 现在对嵌套的命名空间使用 C++17 语法,即使您的代码库中尚未采用新语法。
Go to Derived Symbols 适用于C++/CLI 属性内的 get
/set
函数,以及 C++/CLI 事件内的 add
/remove
函数。
<coroutine>
头。 查看 ReSharper 最新变化,了解 ReSharper 平台的其他变化。 例如,命令行工具现在支持插件,您可以在一组特定的文件或文件夹上,而不是整个解决方案上,调用 CleanupCode。
30天免费试用
为了提高自动导入和代码补全的准确性,ReSharper C++ 2020.2 引入了对 Unreal Engine 项目模型的支持。 这意味着,ReSharper C++ 现在可以从 .uproject 文件直接读取项目信息,而不必使用 Visual Studio 生成的中间项目文件。 这一新项目模型提供了更优化的建议项列表,这些建议项取决于插件和模块引用。 ReSharper C++ 还会在您切换解决方案配置时调整其行为。
如果项目文件过期,ReSharper C++ 现在也会提醒您在 Unreal Editor 中刷新 Visual Studio 项目。
为了更方便地导航,引擎源中的符号现在会被视为库符号,且如果用户代码中有匹配的符号,这些引擎源中的符号就会在搜索结果中默认隐藏。
为了符合 Unreal Engine 编码标准,ReSharper C++ 2020.2 对检查严重性、代码生成操作和 include
指令的自动导入进行了一些更新。
而且,包含快速修复的新检查现在可用于将 virtual
说明符添加到重写函数。
ReSharper C++ 2020.2 提供了许多错误修复并对 C++/CLI 与 C# 之间的互操作进行了改进。 在 C++/CLI 代码中查找派生符号时,ReSharper C++ 除了会在 C++/CLI 中查找符号外,还会在 C# 代码中查找符号。 导航到基本和派生符号也适用于导入的 CLR 实体。
包含快速修复的新代码检查现在可用于 gcnew
、sealed
和 safe_cast
用法。
以下功能的范围和适用性得到扩展:
您在代码中移动时,ReSharper C++ 现在可以自动高亮显示脱字符号下元素的用法。
在 File Structure 窗口中,预处理程序指令现在默认隐藏,这样您就可以更轻松地在大文件中导航。
新检查具有相应的快速修复,可以帮助您处理以下用例:
virtual
说明符。gcnew
且无法在托管类型上使用 new。 final
说明符不能用于托管类。ReSharper C++ 现在还会高亮显示预处理程序指令的拼写错误。
得益于 Clang-Tidy 快速修复的简要预览,现在可以更轻松地选择所需修复选项。
评估引擎已更新,支持修改 constexpr
函数中的值并可以处理类类型的值。
预期为 std::function
参数时,新补全项可以插入自动生成的 lambda 参数。
如果当前文件中不包含类,导入补全将建议新选项,以添加前向声明而不包含相应的头文件。
ReSharper C++ 2020.2 添加了三个新设置,以便进行更灵活的配置:
?:
运算符——用于多行三元表达式的格式化选项。 //
——编辑器选项,用于阻止在单行样式中自动扩展多行注释。 #include
顺序设置已移动到单独的选项页面,且现在更容易找到——只需点击 Code Editing | C++ 选项组下的 Order of #includes。
最后但同样重要的一点是,格式化引擎现在可以在包含许多宏调用的源文件中更快速地工作。
ReSharper 本身也有一些更新。 例如,代码清理现在可以在保存时自动启动或仅应用到最近修改的文件的更改部分。 您可以在此处详细了解这些改进。
C++20 标准已几乎定稿,ReSharper C++ 引入了对其中另一组功能的支持。
ReSharper C++ 2020.1 添加了对 using enum 声明的支持,借助此声明,您可以将特定枚举器从作用域枚举扩展到本地范围。 新重构 Introduce Using Enum 可以帮助您将 using enum 声明添加到现有代码。
对于 C++20 概念,ReSharper C++ 支持约束类型占位符和缩写函数模板的新语法。 改进的不满意约束错误消息可以帮助您了解替换模板时出错的位置。
ReSharper C++ 还会为使用适用于 lambda 的模板语法建议快速修复,从而帮助您避免错误或统一使用 lambda 和函数。
ReSharper C++ 2020.1 改进了 Unreal Engine 项目中的 Rename 重构。 现在,它可以更新相应的 *.generated.h
include 指令以及前缀为 A
、F
、E
、T
、S
和 U
的相关文件。
在 ReSharper C++ 检测到 Unreal Engine 项目时,它会调整默认设置以停止建议 Use auto,从而更好地符合 Unreal Engine 指南。 ReSharper C++ 2020.1 还包含控制台变量和日志类别的更新命名规则。 您现在可以从 Search Everywhere/Go to 导航到包含 Unreal Engine 样式枚举的命名空间。
ReSharper C++ 现在终于支持 SpatialOS GDK 和包含虚拟文件路径的 USF 文件了。 了解更多。
ReSharper C++ 2020.1 现在为高级着色器语言 (HLSL) 提供初步支持。 ReSharper C++ 会根据您的默认配色方案高亮显示 HLSL 代码并显示代码元素的嵌入提示和工具提示以及类型信息和文档。 您还可以搜索并快速导航到结构、函数或整个解决方案中的参数、引用的文件和标准库。 为了使 HLSL 体验更完美,ReSharper C++ 为您提供了智能代码补全、自动插入匹配分隔符,等等。
多个新检查可用于以下问题,并通过相应的快速修复帮助您解决问题:
void*
时,使用 reinterpret_cast
取代 static_cast
。补全列表现在会建议标签名称、标准 C++ 特性、新的 std::forward
后缀模板以及基本函数调用的参数。 此外,ReSharper C++ 现在还可以在宏主体中提供代码补全。
ReSharper 中适用于 .NET 的两个知名功能现在终于可以在 ReSharper C++ 中使用了:
借助改进的输入辅助,您现在可以选择任意的代码段并输入括号、大括号、中括号或引号,以便使用相应的符号环绕选定内容。 代码可读性帮助程序(参数名称提示和类型提示)现在可以用于独立代码。
新的 Document 编辑操作(默认快捷键为 Ctrl+/),让您能够快速地为附近的代码元素生成文档注释,而不必使用上下文操作。
ReSharper C++ 2020.1 引入了两个新的重构来帮助您升级枚举用法:
using enum
声明并缩短枚举器引用,从而提升代码可读性。代码导航功能已扩展得更加易于使用:
在 File Structure 窗口中,图标现在包含可以显示类成员可访问性、继承和 virtual/static/pure 说明符的指示器。
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 包含多个其他值得注意的变更:
[[nodiscard]]
特性标记生成的 getter 和构造函数。 MOCK_METHOD
宏。 ReSharper 也迎来了更多变更。 例如,现在可以导出和导入单元测试会话。