ReSharper 2020.2 最新变化

ReSharper 2020.2 为 C#8 带来了新检查和快速修复,支持可空引用类型,并提供了期待已久的保存时代码清理、改进的单元测试运行程序以及无障碍功能改进。 另外,ReSharper C++ 将您的 Unreal Engine 开发提升到更高水平,并对 C++/CLI 支持、导航和代码分析进行了许多改进。

下载

可免费试用 30 天

代码分析

可空性代码分析现在可以感知更多的用例并能够通过析构foreach 周期跟踪不正确的可空性。 还提供了相应的快速修复。

代码分析现在会为 API 考虑 JetBrains.Annotations 特性(NotNullCanBeNull),甚至在禁用可空引用类型 (#nullable disable) 的代码中也是如此。

如果您为项目安装了 System.Linq.Async NuGet 包,现在还可以在 IAsyncEnumerable<T> 上使用上下文操作将 foreach 转换为 LINQ 并将 LINQ 转换为代码。

现在可以使用合适的快速修复轻松地生成 IEqualityComparer<T>IComparer<T> 实现。

现在,验证已实现或重写成员的可空性时,代码分析会考虑编译器注释(如 AllowNullDisallowNull)。

如果变量和返回类型从未具有或返回可空值,可以使用新的检查和快速修复使它们“不可空”。

代码分析现在可以遵循 .editorconfig 文件中的 dotnet_diagnostic 规则。 在 .editorconfig 文件中指定检查的严重性,如 dotnet_diagnostic.CS1058.severity = hint,ReSharper 会相应地显示检查。

对接口功能中默认实现的支持在此版本中已得到增强。 代码编辑器中的左侧装订区域会显示已实现或重写的方法,且我们的重构和导航现在能够感知此 C# 语言功能。

XAML 代码中现在提供嵌入提示。 我们为标记属性名称和 DataContext 以及边距和填充提供提示,如果您不想记住它们的顺序,此功能将非常方便。

可以通过 Alt+Enter 菜单为解决方案禁用 Suppress nullable warning with ! 快速修复。

代码清理

现在,您可以将 ReSharper 配置为在保存文件时自动启动 Code Cleanup! 终于支持这一功能啦!

此功能不再需要第三方插件。 可以在 ReSharper | Options | Code Editing | Code Cleanup 选项页面上启用此功能。

现在,有更精细的新范围来运行 Code Cleanup,如最近修改的文件最近打开的文件,它们可以显著缩短获取结果的时间,因为 Code Cleanup 无需在整个解决方案中运行。 对于更精确的调整,您可以指定将哪些文件限定为“最近”。

代码清理完成后自动保存文件。 可以在 ReSharper | Options | Code Editing | Code Cleanup 选项页面上启用此功能。

有许多改进来帮助缩短 Code Cleanup 执行时间:

  • 收集代码进行清理时,Code Cleanup 不会运行分析器,除非在清理配置文件中选择了相应的复选框。 例如,如果未在配置文件中选择“Remove redundancies”选项,搜索冗余项的相关分析器就不会运行。
  • 同时为文件执行多个代码修复。 每次修复后不再开始重新高亮显示文件。

单元测试

我们为 .NET Framework 和 .NET Core 从头重新设计了单元测试运行程序,以便为在 Visual Studio 进程外运行的两个运行时使用相同的运行程序。 它会帮助我们解决一系列问题:发现、运行、调试单元测试,并让我们能够完全控制 .NET Core 测试的单元测试层次结构。

新测试运行程序内置支持:

  • MSFakes,适用于 NUnit、xUnit、MSTest v2 单元测试框架。
  • TypeMock Isolator,适用于 NUnit、xUnit 和 MSTest v2。

UI 中最显著的变化是现在 ReSharper 在 xUnit 和 NUnit 框架的 .NET Core 测试中支持 DisplayName 特性。

将筛选器应用于单元测试树(如 Passed/Failed 等)意味着计数器会提供两个单独的数字——所有测试的总数和满足筛选标准的测试数。

Navigate To 菜单中添加了两个新操作:

  • 显示包含此测试的全部单元测试会话。
  • 在 Unit Test Explorer 工具窗口中显示测试。

我们引入了对 NUnit 的 Assert.Multiple 方法的支持,这样就可以在第一次失败后不退出代码的情况下检查多个断言。

可以在选项中直接编辑按持续时间分组的时间范围。

改善可访问性

这一版本提供对屏幕阅读器的支持,如 JAWSNVDAMicrosoft Narrator。 现在这些屏幕阅读器可以更好地访问:

  • ReSharper 工具窗口中的列表和树组件。
  • Options 对话框内的元素。
  • Alt+Enter 菜单中的元素。
  • 所有 Go To 对话框。
  • 代码补全弹出窗口。

x:Bind 支持

我们为 UWP 开发者带来好消息——终于支持通过 x:Bind 进行编译绑定了!

ReSharper 能够正确地解析 x:Bind 代码并提供多个检查和相应的快速修复。 它会针对缺失属性 setter、BindBack 特性和重载冲突的情况向您发出警告。 而且,有一组 Create from Usage 快速修复可以在 C# 代码隐藏内生成适当的字段、属性或方法。

还有适用于 x:Bind 表达式内 propertyPathBindBackUpdateSourceTrigger 特性的代码补全和参数信息。

Change SignatureSafe Delete 重构现在可以感知 XAML 代码中的方法用法,并相应地更新它们。 另外,如果您从 C# 代码隐藏调用 Make Static/ConstEncapsulate Field 重构,它们就可以从 XAML 代码中直接使用并正确地更新 XAML 用法。

可空性感知已集成到 x:Bind 代码分析中。 如果 C# 代码中有 CanBeNullNotNull 特性,ReSharper 现在会在 XAML 代码中直接向您显示 null 相关的检查,例如,适用于 propertyPath 中所用方法参数的“Possible System.NullReferenceException”和“Possible null assignment to non-nullable entity”。

其他 ReSharper 功能,如 Find UsagesGo to Declaration,也可以感知 x:Bind 绑定。

ReSharper Command Line Tools

在 2020.1 中,Rider 在 macOS 和 Linux 上从 Mono 迁移到 .NET Core。 在这一版本中,ReSharper 命令行工具可以在 Windows、Linux 和 macOS 的 .NET Core 上运行。

请注意,ReSharper 命令行工具不再捆绑 Mono,且适用于 macOS 和 Linux 的工具现在要求 .NET Core 3.1。

将 .NET Core 而不是 Mono 用作运行时的另一个好处是 ReSharper 命令行工具可以安装为 .NET Core 全局工具。 运行以下命令可以安装它们:

dotnet tool install -g JetBrains.ReSharper.GlobalTools --version 2020.2.0-*

并使用 jb tool_name [options] 运行工具,例如:

jb inspectcode yourSolution.sln -o=<pathToOutputFile>

类型和项目依赖关系图

在这一版本中,用于绘制关系图的 yFiles 引擎已更新到最新版本。 除了我们的优化,这一新的 yFiles 版本还显著改进了绘制结果图的性能。

现在可以将结果图导出为新格式:

  • GraphML 文件格式,在外部工具中进行深入分析。
  • XPS 文件格式,适用于打印无法以 PNG 格式导出的大结果图。

图表工具窗口终于支持 Visual Studio 深色主题了。

导航更新

导航到代码中外部程序集的类型用法现在非常简单。 ReSharper 现在可以从 Go to Type 搜索结果直接导航到 Find Usages。 要试用这一功能,请使用键盘或鼠标在列表中高亮显示类型,然后使用相应的快捷键调用 Find UsagesGo to Usage

从版本 v2020.2 开始,可以使用您喜爱的键映射方案中映射到操作的快捷键调用一些 ReSharper 操作,如直接从 Go to SymbolGo to File Member 对话框调用快速文档。

新 Peek 操作

已添加一组新的 Peek 操作,用于在 Peek Definition 视图中显示一些常用 ReSharper 操作的结果。

点击鼠标滚轮的同时按住 Ctrl+Alt,或将脱字符号放在符号上时按 Ctrl+Alt+Q,即可调用 Peek Implementation 操作来打开实现的 Peek 视图

调用 Peek Base Symbols 操作可以在 Peek 视图内观察所有基本符号。 只需在符号上按 Shift+Alt+Q 即可执行这一操作。

在符号上点击鼠标滚轮的同时按住 Ctrl,即可调用 Peek Usages 操作在 Peek 视图中查看用法。

重构

在这一版本中,Conflicts 对话框已重新设计成 Refactorings 界面中的一个单独步骤。 之前普通列表已替换为按文件分组的树。

在表达式上调用 Introduce parameterIntroduce field 重构时,ReSharper 会询问应向表达式的哪一部分应用重构。

改进了 Unreal Engine 功能

Unreal Engine

ReSharper C++ 2020.2 引入了对 Unreal Engine 项目模型的支持,能够为 include 指令提供更智能的自动导入建议并支持不同的解决方案配置。 ReSharper C++ 还更严格地遵守 Unreal Engine 指南,调整了检查严重性和代码生成操作。

为了更方便地导航,Search Everywhere/Go To 现在可以处理来自引擎源的符号,如库符号。 还有几个新检查,可以强制遵守 Unreal Engine 指南并提醒您在 Unreal Editor 中刷新项目文件。

更好的 C++/CLI 支持

C++/CLI

ReSharper 许可证现在涵盖 ReSharper 和 ReSharper C++ 产品,对 C++/CLI(两种语言之间的桥梁)的支持获得许多更新且 C++/CLI 和 C# 之间的互操作得到改进。

ReSharper C++ 可以查找 C# 代码中的派生符号,且 Go to Base SymbolsGo to Derived Symbols 现在适用于导入的 CLR 实体。

ReSharper C++ 现在会检查您分配内存的方式并在目标类型无效时为您建议快速修复来将 gcnew 替换为 new(反之亦然)。 当您想要在托管类或接口上使用 C++ final 说明符时,另一个检查会向您发出警告,并建议快速修复来将其设为 sealed。 另外,您现在可以使用快速修复将 C 样式转换转化为 safe_cast

ReSharper C++ 最新变化

Assembly Explorer

  • 现在,NuGet v3 包源在 Open from NuGetOpen from NuGet packages cacheOpen NuGet packages.config 中得到支持 。
  • 具有相似名称的项现在会在 Open from NuGetOpen from NuGet packages cache 对话框中折叠。
  • NuGet 包按字母顺序排序。

其他功能

格式化

ReSharper 现在会正确地对齐相似代码的列,即使只有一部分对齐组正在格式化,所以添加分号或大括号不再会打乱对齐。

.NET 工具和扩展

dotCover dotUltimate

dotCover 控制台运行程序中有一些改进:

  • --reportype=SummaryXml 参数让您可以创建新的汇总报告类型,其中包括整体涵盖多少类、方法和语句的数据。
  • 运行程序现在可以一次生成多种类型的报告:--reporttype=HTML,SummaryXml --output=report.html;summary.xml
  • 适用于 Linux(Debian、Ubuntu)的运行程序现在可以在 ARM64 系统上执行分析。

了解详情

dotTrace dotUltimate

独立 dotTrace 和 Rider 中的 dotTrace 可以在 Windows 上分析 Mono/Unity 应用程序的原生部分。 只需使用 'Enable native profiling' 选项开始一个会话,您就会在性能快照中看到原生和托管调用堆栈。 此功能对于分析 Unity 游戏中的性能瓶颈非常有用。

dotTrace 控制台分析器中进行了以下改进:

  • 分析器让您能够通过将命令发送到 stdin 或文件来控制分析会话(抓取快照、从分析的进程分离,等等)。
  • 适用于 Linux(Debian、Ubuntu)的分析器现在可以在 ARM64 系统上分析应用程序。

了解详情

dotMemory dotUltimate

现在,您可以将固定的对象作为单独对象集打开,并能够将无法从 GC 根获取的对象作为单独对象集打开。

dotMemory 命令行分析器中的改进包括:

  • 现在,除了 Windows,命令行分析器还可以在 Linux 和 macOS 上使用。
  • 适用于 Linux(Debian、Ubuntu)的分析器不仅可以在 x64 还可以在 ARM64 系统上分析应用程序。

了解详情

dotPeek 

dotPeek 继续改进对最新版本 C# 的支持,新版本提供:

  • expression-bodied 成员。
  • Throw 表达式。
  • 默认参数和命名参数。
  • NullablePublicOnly 特性。

了解详情

下载

可免费试用 30 天