ReSharper 2021.2 最新变化

ReSharper 2021.2 为 C# 代码分析提供了带快速修复的新检查和可空引用类型支持,并且许多可用于手动编写的代码文件的功能现在也可用于源代码生成的文件。 ReSharper 2021.2 还支持 Assembly Explorer 中的单文件应用程序,改进了动态程序分析中的问题处理,以及记录、扩展方法和 catch 变量的高级命名规则。

下载

可免费试用 30 天

C# 代码分析

您是否使用临时变量来交换变量值? 现在有一种更优雅的方式可以执行此操作! ReSharper 2021.2 将通过新的 Swap via deconstruction 快速修复帮助您对代码进行现代化改造!

减少代码中的分配数量,并增加吞吐量! 使用 Array.Empty<T> 替换空数组创建。

如果您正在分配新的 Type[0],ReSharper 将建议使用 Type.EmptyTypes 以使内存使用更高效。

如果不需要特定的 EventArgs,ReSharper 将告诉您可以使用 EventArgs.Empty 替换 new EventArgs()

其他改进:

  • 使用 .editorconfig 中的 generated_code 属性,可将文件或文件夹标记为生成的代码并将其排除在处理范围之外。
  • 对于具有许多局部函数和闭包的成员,代码分析的速度现在更快。
  • 对于大型和复杂的 switch 语句和 switch 表达式,享受 Find similar issues 和代码分析的性能改进。

可空引用类型 (NRT)

在启用可空引用类型之后您在代码库中是否具有许多可空警告禁止?

ReSharper 会指示不再需要且可以安全移除的禁止 (!)。

一个新的上下文操作,可用于在范围内搜索所有可空警告禁止。 在 Find Results 工具窗口中,可以重新评估是否需要禁止。

我们引入了一个新的重构来更改可空性! 可通过快速修复、通过 Refactor This 操作,或在添加或移除可空注解 (?) 时通过就地重构使用这个新重构。

ReSharper 将更新可空性注解,并建议在整个代码库中传播更改。

使用 JetBrains.Annotations 特性并启用可空引用类型时,可以使用多种具有相应快速修复的新检查。

JetBrains.Annotations 特性更新为 NRT 语法和编译器支持的特性! 例如,ReSharper 可以将 [CanBeNull] string 更新为 string?.

ReSharper 将通知您冗余 JetBrains.Annotations 特性,例如 [NotNull] string[ItemCanBeNull] List<string?>。 当然,它将提供快速修复来更新您的代码。

不允许类型注解语法时,具有快速修复的新检查会添加编译器支持的注解,例如:

  • [JetBrains.Annotations.NotNull] T param 添加至 [DisallowNull] T param (where T: class?)
  • [JetBrains.Annotations.CanBeNull] T 添加至 [System.Diagnostics.MaybeNull] T(在 C# 8 中,不允许 T? 语法)

ReSharper 增加了新的检查和快速修复来帮助您使用编译器支持的注解,例如 [DisallowNull][AllowNull][MaybeNull][NotNull]

新的检查会检测冗余编译器注解,例如在将 [AllowNull] 应用于可空类型并且快速修复将其移除时。

在可以使用可空引用类型语法时,ReSharper 将建议执行此操作。

还有一些其他改进也值得一提:

  • ReSharper 会检查变量是否需要可空并在可能的情况下生成更严格的类型。
  • 许多上下文操作、快速修复和后缀模板已更新,可更好地与可空警告禁止结合使用。 如果原始代码禁止了警告,它们会保留可空警告禁止或为引入的代码生成它们。
  • 我们改进了对将泛型与可空引用类型结合使用的支持。

源生成器支持

源生成器可用于减少繁琐、重复的开发工作,并在编译时生成代码。 在 ReSharper 2021.2 中,许多可用于手动编写的代码文件的功能也可用于源代码生成的文件。 我们改进了编辑器支持,增强了调试器,并增加了对解决方案级错误分析 (SWEA) 和重构的支持。

对于生成的代码,警告和错误会显示在编辑器中和标记栏上。

解决方案级错误分析 (SWEA) 现在包含由源生成器生成的文件。 如果在您的项目中的生成文件中存在错误,您将能够立即发现并导航到该错误。

您可以使用新选项切换此行为以包含源代码生成的文件,该选项默认情况下会启用,它位于 ReSharper | Options | Code Inspection | Settings | Enable solution-wide analysis 中。

现在,可以通过源代码生成的文件触发重构。 使用 Rename 重构可重命名生成的属性。 ReSharper 还将重命名手动编写的代码中的相关符号!

同样,Change Signature 可用于验证在更改后生成的代码是否仍可编译。

现在,您可以使用 Find Usages,搜索继承者,通过 Ctrl+点击Navigate To 从生成的代码导航到手动编写的代码等。

已启用语义高亮显示,以便正确高亮显示事件、字段和属性等类成员。 在适当的位置显示所有嵌入提示

在调试时显示 ReSharper 自己的数据提示。 这通过搜索、属性高亮显示等功能提供了更强大的调试帮助。

ReSharper 现在支持由 VB.NET 中的源生成器生成的代码。

HttpClient URI 支持

在上一版本中,我们实现了对 ASP.NET 路由模板的支持。 在 v2021.2 版本中,我们继续朝这个方向发展,并带来了更好的 HttpClient URI 字符串支持:

  • 使用 HttpClient 时,代码补全将建议在使用 [Route][Http{Method}][AcceptVerbs] 特性注解的控制器中可以解析为操作的所有 URI。
  • 您可以使用 Go to DeclarationFind Usages 在控制器内的路由特性和这些 URI 之间轻松导航。 
  • 重命名控制器中的特性路由会影响其在 URI 中的使用,您甚至可以直接从 URI 字符串重命名路由。

导航

为导航增加了有用的功能:

  • 调试时,ReSharper 可以更好地了解您的代码。 因此,在接口引用上调用 Go To Declaration(或 Ctrl+点击)会直接将您定向到它们的实现。
  • 现在,Go To Base/Inheritors 列表还会显示隐藏的重写。

代码样式和格式设置

有时,为记录、扩展方法和 catch 变量指定高级命名规则会很有用。 从此版本开始,可以配置这些规则。

如果您更喜欢使用 Pico 大括号(缩进)样式,我们帮您搞定。 Pico 样式已作为一个选项添加到 ReSharper | Options | Code Editing | C# | Formatting Style | Braces Layout 页面上的 Brace Layout 标签页。

我们在几种情况下更改了默认格式设置偏好设置,以与 Visual Studio 默认设置保持一致。

C++ Inline Function 重构

借助新的 Inline Function 重构,您可以使用函数体快速替换函数调用。 ReSharper C++ 将执行必要的转换,处理所有名称冲突并重新格式化生成的代码。

C++ 类型转换提示

ReSharper C++ 2021.2 引入了隐式类型转换的嵌入提示,这可能会导致无意的数据丢失或性能问题。 ReSharper C++ 现在可以指示您的代码中发生隐式转换的位置。

ReSharper C++ 2021.2 最新变化

Dynamic Program Analysis (DPA)

改进了问题处理

现在,DPA 为每个问题存储两个值 – 最大值和当前值。 这可以防止漏报,因为之前问题可能会低于阈值并从问题列表中消失,这不是因为它们已被修正,而是因为它们的启动条件发生了变化(程序运行的时间较短,所需的功能未执行,等等。)

其他更新

  • 启动性能分析时,DPA 会被自动禁用。
  • Dynamic Program Analysis 窗口现在允许选择多个问题。
  • 使用 SuppressMessage 特性禁止问题现在适用于异步方法。

Assembly Explorer

The embedded decompiler can now decompile single-file apps. 它支持 .NET Core 3.1、.NET 5 和即将推出的 .NET 6 SDK 的单一文件格式。 使用 Assembly Explorer,您可以像以前一样浏览单文件应用内的捆绑程序集。

改进了覆盖性能 dotUltimate

改进了覆盖性能
  • 现在,dotCover 可以在一个程序集中并行运行测试类的覆盖率分析。 在某些情况下,这可以加快覆盖率分析速度。
  • 现在,可以为 .NET Core 和 .NET 项目预加载单元测试运行程序(这样,由于单元测试运行程序已加载到内存中,因此可以更快地开始覆盖率分析)。

dotCover 2021.2 最新变化

内存分配分析 dotUltimate

在此版本中,我们继续改进您分析内存分配的方式。 Memory Allocation 视图中增加了两个新的标签页:

  • Methods 标签页可用于分析已分配内存的方法的普通列表。
  • Call Tree 标签页可用于分析分配调用树。 树中的每个节点不仅显示调用的方法,还显示该调用分配的对象。

dotMemory 2021.2 最新变化

原生分析 dotUltimate

现在,可以在 Windows 上分析原生应用程序。 启动分析会话时,您可以选择从远程服务器中下载原生的源代码符号文件。 原生分析仅可用于时间线分析类型。

其他

Razor

如果编辑器开始滞后,处理大型视图的 Razor 开发者可以关闭占用大量 CPU 的辅助和自动建议。 您可以在此处找到这些设置:ReSharper | Options | Environment | Editor | Behavior | Razor | Allow CPU-intensive typing assist

ReSharper Command Line Tools

我们在 InspectCode 工具中引入了一项重大更改。 从 v2021.2 开始,InspectCode 会在开始分析之前自动恢复 NuGet 软件包并构建一个解决方案。 如果不需要此行为,请使用 --no-build 键禁用恢复 NuGet 软件包和构建解决方案。

下载

可免费试用 30 天