ReSharper 2020.3 最新变化

ReSharper 2020.3 与 C# 9 功能兼容、提供嵌入提示的新角度、Avalonia 支持、集成式 Dynamic Program Analysis,以及帮助您进行日常开发的一组小幅更新。

下载

可免费试用 30 天

C# 支持

源生成器几乎是 C# 编译器中最受关注的功能。 这完全可以理解:如果能直接在编译过程中创建新代码,并立即使用,对许多情况都将有所帮助。

ReSharper 在这方面能做什么? 它可以发挥自身优势,在执行重构时考虑生成的文件,提供代码编辑器功能,并帮助您导航到生成的代码。

部分方法现在允许 out 参数、非 void 返回类型和任何类型的可访问性,这使它们在与源生成器一起使用时更加实用。 源生成器可以使用部分方法的定义声明来自定义所生成代码的行为。

另一个特别的新内容是init-only 属性。 这种属性只能在对象的初始化期间设置。 所以,您在使用对象初始值设定项的时候再也不必将属性公开为可变了!

ReSharper 可以察觉 init-only 属性,并在补全您的代码时将其考虑在内,执行生成式补全,分析该属性是否在哪里发生了变化,并在您改变想法时提供快速修复使其可变。

record 类型是应用 init 的最佳位置。 这些具有值语义的引用类型不仅可以帮助您实现不变性,还将范围扩展到整个对象。 从选择首选声明样式的快速修复到基本补全,ReSharper 一如既往地紧跟语言演化步伐。

位置记录具有一个编译器生成的 Deconstruct() 方法。 ReSharper 支持此类对象中的所有析构功能。 注意引入变量时的弹出窗口:它会让您在单变量和析构声明之间做出选择。 当一个函数访问记录对象的属性时,也会提供同样的选择。

现在允许局部函数拥有特性(以及参数和类型参数)。 这由 ReSharper 的快速修复提供支持,包括按 !? 可将方法分别注解为 [NotNull] 或 [CanBeNull] 的精妙功能。

C# 9 还能够编写顶层程序。 不再纠结程序类:您可以将入口点代码放在 using 指令之后! 对于处理顶层语句也有一些帮助。 对于顶层语句,有两个规则:它们应该在任何类型或命名空间之前,而且项目中只能有一个文件包含顶层代码。 当您重新排列和复制粘贴代码时,这两条规则都很容易被打破。 ReSharper 提供了快速修复,可通过将顶层代码移到顶部或另一个文件来解决这个问题。

鉴于顶层代码也是代码,因此也有对应重构:Extract local variable 和 Extract method 重构。

通过 C# 9 中的目标类型化 new 表达式,在可以从用法上下文中推断出类型时,我们可以省略 new 关键字后面的类型。 ReSharper 为该功能提供了完全支持,包括查找构造函数的用法和配置首选语法风格的功能。 后者允许您在创建的类型明显时使用 new() 语法,而在其他情况下则强制执行显式类型规范。

顺便一提,如果您代码中所有的 new() 都失控了,ReSharper 的新类型名提示将施以援手。

借助返回类型协变,您不必在重写成员中像基类方法一样返回相同的类型。 不再需要经过变通即可返回更具体的类型。

模式匹配在新语言版本中继续演进。 匹配表达式现在允许使用关系型(<> 等)和逻辑型(notorand)模式,除去了旧版 switch 结构的许多麻烦。 ReSharper 可以协助您分析模式,并按照所需风格进行改写。

最后,在引入 lambda 丢弃参数时,我们认为应该为其增加一个快速修复。

主要语言亮点就介绍到这里。 对 ReSharper 2020.3 中支持的语言也增加了一些小幅改进。 这包括目标类型化条件表达式、静态 lambda、foreach 中的扩展 GetEnumerator 方法、函数指针类型以及原生整数类型。

嵌入提示

我们相信嵌入提示的性能,但是我们也知道环境应该尽可能干净整洁。 我们为嵌入提示提出了全新的“Push-to-Hint”机制,力求两全其美。

在 Push-to-Hint 可见性模式下,提示默认不显示。 提示将在您按住 Ctrl 后显示(松开后隐藏),或按两次 Ctrl 后显示(再次按两次 Ctrl 后隐藏)。

我们提供了非常细粒度的设置:您可以告诉 ReSharper 哪些提示应始终启用,哪些提示应在按下时显示,以及哪些您并不需要。 对每个提示类型使用 ‘Visibility’ 设置。

我们还设计了隐式类型转换的提示。 这种转换会导致数据丢失或性能下降,ReSharper 现在可以指出发生隐式转换的位置。

当您在类型转换提示上按 Ctrl+Click 时,系统会将您定向到隐式转换的实现。

XAML 的嵌入提示已在先前版本中提供,现在还具有允许您配置外观的通常上下文菜单。

格式化程序

我们还向格式化引擎添加了粒度更细的设置。 我们在此版本中添加了:

一组安排属性模式的设置:您可以指示 ReSharper 将一个简单模式放在单行上,以及设定您偏好的长模式换行形式。 还有一个使列中的属性模式对齐的设置。

现在可以在属性或事件访问器周围添加空白行。

对于 Visual Basic,添加了一个选项,可以在一元 +/- 运算符后面添加空格。

.editorconfig 支持也获得了一些更新。 ReSharper 现在支持 Roslyn 属性:file_header_templatesdotnet_sort_system_directives_firstdotnet_separate_import_directive_groups

在向 .editorconfig 的导出中,还添加了一个新的“Spaces around ‘=’”参数。 对于现有文件,将自动检测其值;对于新文件,可以手动设置其值。 默认设为 ‘true’。

Dynamic Program Analysis

我们在 ReSharper 中添加了 Dynamic Program Analysis (DPA),可在内存中检测大小对象堆的结束和分配,帮助您分析和创建更好的代码。

最大的优点是,除了常规的编码、运行和调试例程外,您无需执行任何其他操作。 DPA 在后台运行,并在每次启动项目后准备好报告。 只需注意右下角的图标即可。

有关 DPA 的更多详细信息,请阅读这篇博文

结构化移除

您可能已经熟悉结构化导航功能:它允许您根据结构、关键字、块、方法等来选择代码片段。

使用 ExtendShrink Selection 操作时,它们需要另一个步骤来选择逗号、点或中括号,这很容易被忽略。 如果要删除一个块,这将导致代码错误。 在这种情况下,ReSharper 会进行一些清理:如果从结构上选择了某些内容,那么在按 BackspaceDelete 时,ReSharper 会尝试从结构上将其删除。

Command Line Tools

如果您使用大型代码库,则每个解决方案级操作都需要花费很长时间才能运行。 您是否曾经在更改几个文件之后,需要等待整个解决方案完成重新格式化? 现在,您可以运行 CleanupCode 控制台工具,无需指向解决方案文件:只需指定一组文件或文件夹即可。 命令行示例:cleanupcode.exe [文件夹路径] [文件路径] [另一个文件的路径]

请注意,该工具仅设置代码格式 – 清理在此模式下不可用。

我们的控制台工具先前缺少的另一项内容是插件支持。 它来了! 但现在仅适用于 Windows。 要开始使用,您需要知道插件的 ID。 前往 JetBrains Marketplace,打开插件页面,转到 Versions 标签页,点击任何版本即可显示您的插件 ID。 随后,在启动 InspectCode 或 CleanupCode 时使用 -x=[ID] 键加上插件 ID,控制台工具会自动下载并启用该插件:cleanupcode.exe -x=[ID] [解决方案文件的路径]

请注意,插件必须与工具版本兼容。 Also, plugins are not yet supported if you’re using the .NET Core global tools mechanism to install ReSharper’s command line tools.

导航

搜索文本时,您是否遇到过困难? 也许是您代码中的字符串,或者注释? 或者文本中是否曾有拼写错误阻止您查找正确结果?

除了精确搜索外,Find Text 现在还可以执行模糊搜索,同时考虑可能的拼写错误和单词遗漏。 结果显示在常规子字符串搜索结果下方的 Fuzzy 部分中。 提示:如果您要在代码中查找特定的格式化字符串,这将非常有帮助。

Avalonia 支持

代码分析

与所有 WPF 类框架相同,代码分析提供了大量常用代码检查,以及 C# 代码隐藏和 .axaml 文件的对应快速修复(包括 “Possible ‘System.NullReferenceException’”“Class/Property {...} is obsolete: Use {...}”)。

除了常见的 WPF 检查之外,还有许多 Avalonia 特定的检查,例如带有快速修复的 Path to resource is case-sensitiveColumnDefinitions tag can be converted to attribute 检查。 对于后者,ColumnDefinitions="*,Auto,*" 特性上具有一个上下文操作,可以将其转换回 <Grid.ColumnDefinitions> 标记。

我们增加了对 Avalonia 绑定中 “$self"“$parent”“^”“#” 语法的妥善支持,以及对 $parent[] 数组中索引的妥善验证。

扩展了对 CompiledBindingx:CompileBindings 扩展的支持。 ReSharper 知道此处需要 DataType,并提示您为代码中的绑定指定数据类型。

“Create from usage”快速修复适用于所有 Avalonia 属性。

Avalonia XAML 支持包括理解 CSS 类样式系统。

嵌入提示帮助您更好地理解您正在观察的代码。

代码补全

代码补全和参数信息可用于所有 XAML 关键字、全部标记扩展、x:NameStyle 属性、 StyleIncludeSource 属性等。

导航

您可以轻松导航至编译的绑定数据类型、绑定属性、Avalonia 控制类型和 x:Name 声明。 ReSharper 也可以直接从 XAML 转到反编译的外部代码,包括样式 setter 属性和引用的 xmlns 命名空间。

Find Usages

Find Usages 可以帮助您查找方法绑定、x:Name 属性、Style 类与 setter 和各种属性的所有用法。

重构

Rename and Safe Delete 重构现在可以感知 Avalonia XAML 代码中的各种用法,并相应地进行更新。

层次结构和代码结构

您可以观察 Avalonia XAML 代码的层次结构和结构。

反编译器更新

ReSharper 的集成式反编译器也已更新,支持更多 C# 功能。 我们还改进了 IL Viewer 与源代码之间的同步机制。

专门针对顶层语句,我们在 Assembly Explorer 中添加了一个 <Top-level Entry Point> 节点。 您可以双击或使用此节点上的上下文菜单导航转至反编译代码中的实际顶层语句。

现已支持私有源链接。 导航到需要连接到专用源服务器的外部源后,ReSharper 将显示通知并让您输入凭据;当然,如果您已经在 Visual Studio 的设置中指定,它们会被自动应用(对于 GitHub 和 BitBucket)。

Blazor

我们继续添加更多 Blazor 支持。 此迭代侧重于支持通用类型参数及其来自用法的类型推断,以及消除打开解决方案时的性能阻碍。 有关已修复问题的完整列表,请参阅我们的公开错误跟踪器

Unreal Engine 完美搭档

Unreal Engine

ReSharper C++ 2020.3 提供了与 UnrealHeaderTool 的无缝集成,帮助您捕获通常仅在编译时发现的问题。 ReSharper C++ 在后台运行 UnrealHeaderTool,并在编辑器中实时显示分析结果。

为改进其 HLSL 支持,ReSharper C++ 为着色器文件带来了控制流分析检查。 通过实时跟踪构建配置文件更改,ReSharper 可以始终使用最新的项目模型。

了解详情

更好的 C++20 支持

C++20

ReSharper C++ 2020.3 向比较规则实现了 C++20 更改。 需要确切了解代码行为时,您可以依靠 ReSharper C++ 丰富的检查和错误消息,新的快速修复将帮助您轻松使用比较运算符。

此外,ReSharper C++ 2020.3 带来了新的检查,帮助您采用 C++20 范围库,并增加了对 Visual Studio 16.8 中引入的 C++20 协程标准模式的支持。

了解详情

时间线检查 dotUltimate

时间线检查

dotMemory 使用时间线数据在 Timeline 图上提供自动检查。

目前,可进行三种检查:

  • 高垃圾回收压力
  • Gen0 中的固定对象
  • 快速大对象堆增长率

了解详情

改进了持续测试 dotUltimate

改进了持续测试

现在,触发持续测试会话时您可以定义应该构建哪些项目。 这可以让您加快持续测试会话的速度。 该功能在 Visual Studio 和 Rider 中均可使用。

了解详情

其他更新

  • 支持对不受约束的泛型类型(包括默认约束)的可空注解。
  • 我们对 TypeScript 支持进行了适度更新:ReSharper 现在支持空合并和可选链。
  • 我们添加了一个新的快速修复,帮助您将顺序模式检查转换为复杂的模式匹配检查。
  • 在 Change Signature 重构中,我们重新设计了为待添加参数设置默认值的工具(您选择 ‘Resolve with call tree’ 时打开的工具)。 现在,双击节点可以导航到代码。 新增名为 Create default parameter 的选项,可直接将您转至代码以指定值。 最后,对在树中选择的不同修复应用不同颜色。 我们希望这可以简化用法解析!
下载

可免费试用 30 天