ReSharper 2023.2 最新变化

ReSharper 2023.2 改进了对 C# 的支持,为处理局部函数和原始字符串以及解决常见 Entity Framework 问题提供了新检查。 新版本还带来了对 C++ 重构以及更多 C++20 和 C++23 功能的支持。 在 ReSharper 2023.2 中首次亮相的功能包括单元测试的便捷创建和导航、预测调试器模式和全新的 AI Assistant。

下载

可免费试用 30 天

主要更新

改进了 C# 支持

改进了 C# 支持

ReSharper 2023.2 中新增的代码检查和快速修复适用于原始字符串文字和局部函数,以及常见的 Entity Framework 问题和冗余的可以为 null 指令。 对 C# 12 的早期支持涵盖主构造函数和带有可选形参的 lambda 表达式。 我们还改进了 ReSharper 对弃元和可处置资源的支持,并添加了新的内联和行间提示。

了解详情

导航和创建单元测试

ReSharper 的单元测试获得重大更新,新增功能可让您轻松导航并为生产代码创建测试!

要创建测试,只需调用 Generate Code(生成代码)操作,然后选择 Unit Test(单元测试)或按 Ctrl+U,C。 ReSharper 让您可以选择测试类名称,甚至可以使用您的首选测试框架创建新项目(如果尚未创建)。 创建测试后,您可以使用 Navigate To(导航到)操作或按 Ctrl+U,F 在实现和测试代码之间导航。

了解详情

AI Assistant

AI Assistant 限定访问

基于 IntelliJ 的 IDE 和 .NET 工具的 2023.2 版本包含一项主要新功能:AI Assistant。 由 AI 提供支持的初始功能集提供了集成式 AI 聊天,并通过上下文操作自然融入一些核心开发工作流,这使 AI Assistant 能够解释所选代码片段、消除潜在问题,以及为您生成 XML 文档。

了解详情

C# 支持

改进了对原始字符串的支持

我们为处理原始字符串添加了新的 C# 检查和上下文操作,还改进了输入辅助并增加了格式设置选项:

  • Use raw string(使用原始字符串)检查,将多行逐字字符串转换为其原始表示。
  • Simplify raw string(简化原始字符串)检查,移除冗余的引号和美元符号。
  • 多项上下文操作,用于添加或移除引号、插值大括号和美元符号,以及在单行和多行表示之间切换。
  • 多个代码格式化程序选项,能够对齐或缩进原始字符串中的内容。
  • 改进了按 EnterDeleteBackspace 键时的输入辅助。

查看相应博文,详细了解改进的原始字符串支持。

常见 Entity Framework 问题检查

常见 Entity Framework 问题检查

我们为使用 Entity Framework 等对象关系映射 (ORM) 框架处理数据库时可能遇到的常见问题添加了数个新检查、快速修复和上下文导航选项。

  • 对于可能出现的“N+1”问题,具有 Possible multiple queries to the database for related entities (N+1 problem)(在相关实体上可能对数据库进行多次查询(N+1 问题))和 Possible multiple queries to the database (N+1 problem)(可能对数据库进行多次查询(N+1 问题))检查、相应的快速修复以及来回上下文导航,用于调查代码中可能存在“N+1”问题的位置。
  • 除了检测“N+1”问题外,我们还为 Entity Framework 引入了另一项实用检查:Query can return incomplete data for related entities(在相关实体上查询可以返回不完整数据)。 我们也提供了快速修复和来回上下文导航来帮助您调查这个问题。

在这篇博文中详细了解新的 Entity Framework 相关检查。

处理局部函数的检查

ReSharper 2023.2 引入了两项新检查和相应的快速修复,旨在提高局部函数的代码可读性:

  • 将显式 returncontinue 置于方法末尾的局部函数之前的建议。
  • 将局部函数移动到方法或块的末尾,并使用显式 returncontinue 或其他控制流跳转语句将其与可执行代码分开的建议。

如果您不想或不能更改代码,ReSharper 2023.2 将在局部函数之前显示带有 return;continue; 语句的行间提示,帮助您在不更改代码的情况下理解代码。

阅读这篇博文详细了解新检查。

#nullable 指令和 NRT 注解的检查

适用于 #nullable 指令和 NRT 注解的检查

针对 #nullable 指令和 NRT 注解推出了多项新检查:

  • Redundant nullable directive(冗余的可以为 null 指令)检查。
  • Unused nullable directive(未使用的可以为 null 指令)检查。
  • 旨在提醒您可以为 null 引用类型 (NRT) 注解与基成员上的 JetBrains.Annotations 特性相矛盾的检查。

要详细了解这些检查,请阅读此博文

改进了 var 声明的导航

改进了 var 声明的导航

为用于包装其他类型的常用类型从 var 导航时,所有导航操作(Go to…(转到…)、Find Usages(查找用法)等)现在都会建议底层类型。 例如,从具有 ImmutableArray<Person>? 类型的变量的 var 关键字使用 Go to declaration(转到声明)操作时,ReSharper 会建议导航到 Person

您可以在以下博文中了解详情。

主构造函数 C# 12 预览

在 2023.2 版本中,我们引入了对 C# 12 预览中的非记录类和结构体的主构造函数支持。 有多项检查可以检测初始化能够以新的主构造函数表示的类型,并建议应用快速修复来大幅减少代码重复的数量。

有时,类型的初始化不应过于简单,并且不能再使用主构造函数表达。 对此,我们引入了多项上下文操作,将主构造函数形参反向替换为构造函数和普通字段。

要查看主构造函数所有功能的实际运作情况,请参阅独立博文

对 lambda 中默认形参值的支持

对 lambda 中默认形参值的支持 C# 12 预览

为了支持 C# 12 语言更新,我们引入了对 lambda 表达式中默认形参值的支持。 除了与识别此语法相关的标准警告消息集之外,我们还调整了现有检查 The parameter has the same default value(形参具有相同的默认值),将 lambda 中的默认形参值纳入考量。 有关详情,请参阅此处

改进了对可处置资源的支持

ReSharper 2023.2 引入了两项新的代码检查,旨在更好地控制对象处置:

  • 当返回的对象被立即处置时,Return of a variable captured by 'using' statement('using' 语句捕获的变量的返回)检查会发出提醒。
  • Return of a task produced by 'using'-captured object('using' 捕获的对象生成的任务的返回)检查能够识别 Task(任务)由 using 语句捕获的对象生成然后立即返回的场景。

我们还改进了 Generate dispose pattern(生成处置模式)功能,支持 IAsyncDisposable 接口,并能够生成异步方法来释放资源。

有关这些新增内容的更多信息,请参阅此处

更好的 C# 弃元支持

代码分析的 C# 弃元支持获得了一系列实用改进:

  • 您现在可以使用 Push-to-Hint 功能快速检查舍弃值的名称和类型。
  • 对于正在使用的名为 _ 的变量和形参,具有 The _ name is typically reserved for local parameters without usages(_ 名称通常为没有用法的局部形参保留)警告。 它们看起来像是“被丢弃”的值,但实际上,它们所代表的恰恰相反。
  • Use discard assignment(使用弃元赋值)检查可用于将未使用的变量和形参替换为弃元。

查看博文详细了解改进的弃元支持。

嵌入提示

新的嵌入提示提高代码可读性

带有元组组件名称的嵌入提示

将值传递到元组实参或返回值类型时,C# 允许您跳过组件名称。 但是,如果没有名称,在不查看目标类型的情况下就很难判断每个组件的含义。 例如,许多软件开发者将不得不检查元组(nullfalse)的指定位置以理解其组件的含义。

这就是嵌入提示可以派上用场的地方! 当这些名称在组件表达式中尚不明显时,ReSharper 2023.2 将显示带有元组组件名称的嵌入提示,使代码更易阅读和理解。

对于 null 和默认组件,即使目标组件没有显式名称,ReSharper 2023.2 也会显示有关其目标类型的提示。 它会对字符串和对象类型进行例外处理,因为这些类型通常信息量不大。

名称可以提高可读性的另一种常见情况是析构模式,其中显式名称可以从 Deconstruct 方法或源元组组件获知。 开发这些提示是为了在模式本身不包含足够的数据来理解匹配的内容(例如 value is ({ }, true, null))时为您提供额外上下文。

改进了对 #pragma warning 指令的支持

改进了对 #pragma warning 指令的支持

Pragma 指令可供通过 ID 轻松禁用或恢复编译器警告。 不过,虽然此类 ID 是与编译器通信的好方法,但人类开发者可能很难理解。 如果没有百科知识,开发者可能会不清楚 CS0168CS0618 这样的 ID 指的是什么,也不确定需要注意什么。

针对 LINQ 的改进

针对 LINQ 的改进

LINQ 查询通常较为复杂,涉及多个转换和投影。 调试复杂 LINQ 查询可能相当耗时,特别是在大型数据集上。 为了帮助您轻松检查查询每个步骤的输出,ReSharper 现在将在调试期间以嵌入提示的形式显示中间结果。

借助显示中间结果的编辑器改进,您现在应该能够快速识别过程中是否出现意外值或不正确的转换。

C++ 支持

Safe Delete

Safe Delete(安全删除)

ReSharper C++ 引入了 Safe Delete(安全删除)重构,让您可以从源代码安全移除符号。 这种重构适用于类、函数、变量、枚举器、命名空间,甚至概念。

删除符号之前,ReSharper C++ 会搜索其用法并让您预览源代码更改,帮助您确定移除没有错误。 尝试删除类或命名空间等复杂实体时,ReSharper C++ 将递归检查其所有成员的用法。

更多 C++20 和 C++23 功能

更多 C++20 和 C++23 功能

新版本带来了对多项新语言功能的支持,包括 if consteval、C++23 标准库模块、[[no_unique_address]] 特性和 static operator()/operator[]

ReSharper C++ 2023.2 最新变化

代码格式设置

针对 LINQ 的改进

格式化流畅 API 调用

ReSharper 2023.2 引入了多个用于 C# 代码格式设置的新选项,旨在提升链式方法调用的可读性。

第一个代码格式设置选项控制第一个方法调用之前是否出现换行符。 第二个选项适用于方法和属性调用混合的情况,确定是否应在属性调用后插入换行符。

AI Assistant 限定访问

AI Assistant 不与 ReSharper 捆绑,必须单独安装。 目前,我们还推出了一个等候名单来管理使用 AI Assistant 功能的请求。

有关 AI Assistant 的更多信息以及如何通过 Toolbox App 或 dotUltimate 安装程序进行安装的说明,请参阅我们的网络帮助

AI Assistant 聊天

与 AI Assistant 聊天

ReSharper 内的 AI Assistant 默认可以识别您的开发环境:解决方案中使用的编程语言、框架、库和技术。 这种意识使 AI 能够对查询生成更准确、更具体的响应。

Smart chat(智能聊天)选项使 AI Assistant 能够引用特定文件和符号,检索代码段或最新更改,以及查找特定方法的用法。 因此,它可以提供更准确的建议。

上下文操作

上下文操作

安装 AI Assistant 插件后,ReSharper 的上下文操作将提供数个由 AI 提供支持的选项。 AI Assistant 可以帮助您:

  • 解释所选代码
  • 识别潜在问题
  • 为未实现的方法提供代码
  • 生成 XML 文档

预测调试器 测试版 Visual Studio 2022

ReSharper 2023.2 中引入的预测调试器模式能够预见执行程序触发的所有可能状态,无需实际执行,这使其能够:

  • 显示变量的期望值。
  • 视觉上“屏蔽”程序中不会执行的部分。
  • 如果进一步执行将因异常而结束,则会发出警告。

预测调试器将为程序执行提供更深入的洞察。 您还能够尝试不同的值并对代码进行故障排除,无需为每次更改重新启动调试流程。

您可以转到 ReSharper | Options | Tools | Debugger | Editor Integration | Predictive debugger | Show predicted values (beta)(ReSharper | 选项 | 工具 | 调试器 | 编辑器集成 | 预测调试器 | 显示预测值(测试版))启用预测调试器。

了解详情

调试器目前处于测试版状态,因此您的反馈将极大地帮助其释放全部潜力。 请务必向我们的问题跟踪器报告您遇到的错误,以及任何建议或请求。

反编译器

程序集差异

ReSharper 2023.2 提供了一种详细比较两个程序集的方法。 仔细检查特定程序集两个版本之间的差异并搜索较新版本中可能引入的潜在漏洞时,这个功能特别实用。

要比较程序集,请前往 Assembly Explorer(程序集资源管理器)工具窗口,点击 Compare Two Assemblies(比较两个程序集)。 单文件应用程序和 .exe.dll 文件都可以进行比较。

点击此处详细了解该功能。

性能

在 ReSharper 2023.2 中,我们修改了缓存 IDE 系统运行所需数据的方法。 此修订已获得无数性能测试的支持,将显著减少每个打开的解决方案的磁盘空间消耗。 在实际中,这意味着减少花费在磁盘输入/输出上的总体时间,缩短解决方案的加载时间。

另一个提高解决方案加载速度的更改是 ReSharper 内部组件构造逻辑的重构。 点击此处了解详情。

其他

Dynamic Program Analysis

  • 以前,DPA 有时会错误地将暂停的调试时间计入代码执行时间,导致误报数据库问题。 此问题已在 2023.2 中修正。
  • 以前,如果相应的调用堆栈包含 lambda 函数的内存分配,DPA 会高亮显示大块代码。 现在,高亮显示更加精细。
下载

可免费试用 30 天