ReSharper C++ 2023.3 最新变化

ReSharper C++ 2023.3 引入了新的内置语法和拼写检查工具、针对停用代码的代码补全和 Find Usages(查找用法),以及针对 C、C++、HLSL 支持的更新等。 ReSharper C++ 2023.3 还带来了 JetBrains AI Assistant 的重大更新。

下载

可免费试用 30 天

AI Assistant 预览阶段结束 正式版

JetBrains AI Assistant 现已全面推出,搭载大量新功能和改进,助力提高您的工作效率。 我们最新的改进包括更好的 AI Actions(AI 操作)项目感知和一个提示库。

订阅 JetBrains AI Service,在 ReSharper C++ 中以补充功能的形式使用 AI Assistant。

HLSL 和 Unreal Engine 更新

HLSL 2021 引入了 C++ 式模板函数和数据类型。 最新的 ReSharper C++ 更新提供了对 HLSL 模板的全面支持。

ReSharper C++ 2023.3 引入了对 HLSL 内置 RayQuery 类型的支持,增强了代码补全,可给出相应的标志建议。

一项新的检查可以帮助您避免落入 AddDynamic 帮助程序宏的一个常见陷阱。 现在,当动态委托函数未添加 UFUNCTION 宏标记时,您会收到警告。

如果您仍然发现自己偶尔会编写样板代码,不要忘记,使用 Alt+Insert 快捷键可以自动生成常见类型成员。 在 ReSharper C++ 2023.3 中,我们调整了哈希函数的生成以遵循 Unreal Engine 约定。

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

C 和 C++ 支持

如果您需要检查某些特定特性在当前标准版本或编译器版本中是否可用,C++20 的功能测试可以帮您节省很多时间。 通过在预处理程序条件中使用 __has_cpp_attribute(operand),可以测试编译器是否可以识别其操作数引用的特性。 ReSharper C++ 现在可以正确地处理 __has_cpp_attribute,以更好地支持 C++ 标准库中的特性注解。

我们引入了对与 __pragma 关键字一起使用的 pack pragma 的支持。 __pragma (pack) 语法有时会在宏定义中使用,因为在宏定义中无法使用 #pragma 指令。 在这种情况下,ReSharper C++ 现在可以正确计算打包结构的大小,因此您可以依赖代码分析结果。

ReSharper C++ 添加了对多个 C 功能的支持:

  • 可以在指针声明中使用的 C99 restrict 类型限定符。
  • C23 中的类型推导、constexprnullptr

我们还引入了对多个新的 clang 内部函数的支持,如 __is_const()__is_member_pointer() 等,使 ReSharper C++ 更好地处理跨平台代码。

对于跨平台 C 和 C++ 开发,您可以尝试独立 CLion Nova IDE 的早期预览版。 它由 ReSharper C++ 提供支持,目前完全免费使用 – 只需注册,开始编码,并向我们发送您的反馈!

语法和拼写检查

JetBrains Grazie 已成为 ReSharper 的新内置语法和拼写检查工具。 Grazie 支持 20 多种语言,能够在 ReSharper 支持的编程语言(C#、C++、VB.NET)、标记语言(HTML、XML、XAML)和注释中捕捉自然语言错误。 要将其他自然语言添加到 Grazie,请在 ReSharper 中转到 Options | Grammar and Spelling | General(选项 | 语法和拼写 | 常规)。

请注意,目前无法在 doxygen 注释中进行语法检查。

处理停用代码

对于针对特定平台或针对特定配置的代码,您可能经常发现自己在条件预处理程序分支中编辑当前停用代码块。 以前,停用代码中的代码补全仅提供宏。 在 ReSharper C++ 2023.3 中,我们改进了这些场景中的代码补全,以包括全局作用域中的符号。

Find Usages(查找用法)现在会查找停用代码和宏主体中的可能用法。 以前,如果您想要查找这些用法,必须使用 Find Usages Advanced(高级查找用法)并调查文本实例。 现在,Find Usages(查找用法)结果中默认包含宏主体和停用代码中的潜在用法。 这些用法被分组到单独的部分中,以便与有效代码中的用法区分。

代码分析

您可以使用 ReSharper 特定的 C++ 特性,使 ReSharper 能够更准确、更深入地分析您的解决方案。 在 ReSharper C++ 2023.3 中,除了 [[rscpp::...]] 外,我们还为现有的 [[jetbrains::format]][[jetbrains::guard]][[jetbrains::has_side_effects]] 特性添加了 [[jetbrains::...]] 前缀。

新的 [[jetbrains::pass_by_value]] 特性让您可以禁止函数形参的 Pass value by const reference(通过常量引用传递值)检查。 了解详情

我们引入了一组检查,可以检查 C++20 模块中 export 关键字的错误用法。 现在,当另一个 export 声明中已包含该声明,或者该声明不属于模块接口单元并且无法导出时,ReSharper C++ 会建议移除 export。 如果您尝试将 export 声明模板化而不是导出模板声明,您还会获得移动 export 的建议。

我们已经将捆绑的 clang-tidy 二进制文件升级为 Clang 17,引入了最新 LLVM 版本中的更新。

除警告文本外,一些 clang-tidy 检查还会输出更多详细信息。 ReSharper C++ 现在会在工具提示中显示这些附加说明。

一项新的检查会对多字符字面量的用法发出警告。 多字符字面量通过实现定义的值获得有条件的支持,在可移植代码中应谨慎使用。

ReSharper C++ 现在会给出快速修复建议,以移除冗余的条件运算符并简化三元条件表达式。

编码辅助

Alt+Insert Generate(生成)菜单可以帮助您快速创建样板代码。 在 ReSharper C++ 2023.3 中,我们在列表中添加了一个新操作,可供生成析构函数。

在多态类中调用时,该操作会使用语法样式设置插入必需的 virtual 和/或 override 说明符。 可以在 Code Editing | C++ | Code Generation(代码编辑 | C++ | 代码生成)选项页面中配置生成的析构函数的主体样式。

使用 #pragma region#pragma endregion 指令,可以指定一个可折叠的代码块。 与其他匹配指令类似,您现在可以在 #pragma 指令或带有区域名称的新嵌入提示上使用 Go to Declaration(转到声明)操作在两者之间跳转。

此外,您现在还可以在 File Structure(文件结构)窗口中方便地折叠区域并导航到相应的代码块。

在 C 代码中,应该在函数的形参列表中使用 void,以表明该函数不需要任何实参。 现在,当您调用 Extract method(提取方法)或 Change signature(更改签名)重构、生成函数定义或根据其用法创建新函数时,ReSharper C++ 会保留这个特殊的 void

引用嵌入提示现在有一个单独的 [>>] 文本,因此您可以一目了然地发现转发引用。

新的 Generate inline definitions(生成内联定义)操作可以让您同时快速生成多个函数的主体。 与现有的 Generate definitions(生成定义)类似,在编辑器中选择一个类名或多个函数声明时,可以使用这项新操作。

在嵌套表达式中调用 Introduce variable(引入变量)或 Introduce field(引入字段)重构时,ReSharper C++ 现在可以让您明确选择目标表达式,而不是自动使用最外层的表达式。

为了改善代码导航体验,现在,通过宏替换获得的符号会在 Go to(转到)和 File Structure(文件结构)窗口中隐藏。 这对在扩展过程中引入许多辅助符号的宏很有用,比如流行的单元测试框架中的测试用例声明。

代码格式设置

ReSharper C++ 2023.3 引入了多个新的格式设置选项:

  • 在尾随返回值类型中的 -> 之前换行。
  • 在尾随返回值类型中的 -> 之后换行。
  • 空块内的空格。
  • 允许在 { 之后添加注释。

我们还将捆绑的 clang-format 二进制文件升级为 Clang 17,并实现了在从 .clang-format 配置中导入格式化程序设置时以及在使用 clang-format 而不是内置格式化程序时对 InsertNewlineAtEOF clang-format 设置的支持。

查看 ReSharper 最新变化页面,了解此版本中引入的其他更改。

下载

可免费试用 30 天