ReSharper 2022.2 最新变化

ReSharper 2022.2 包括对 C# 11 功能的支持,例如 required 成员、checked 用户自定义运算符、原始字符串和列表模式。 解决方案级分析大幅优化了内存消耗。 此外,新版本还具有 Virtual Formatter,允许您以首选格式查看代码而无需重新格式化磁盘上的源代码,以及 Disk Cleanup(磁盘清理)工具,用于移除 ReSharper 在处理代码期间生成的临时文件。

下载

可免费试用 30 天

C# 11

此版本引入了对 C# 11 预览中更多功能的支持。

required 成员

在 C# 11 中,classstructrecord 类型能够声明 required 成员列表。 此列表包含所有必须在类型实例初始化期间初始化的必需属性和字段。 类型自动从其基类型继承这些列表,移除样板代码、重复代码,提供无缝体验。

除了能够检测 classstructrecord 类型中成员的 required 关键字之外,ReSharper 还为 required 关键字提供了额外支持:

  • 代码补全中具有 required 关键字。
  • 大多数编译器错误和警告均可用。
  • required 修饰符已添加到 ReSharper | Options | Code Editing | C# | Syntax Style(ReSharper | 选项 | 代码编辑 | C# | 语法样式)页面的 Modifiers order(修饰符顺序)中。

新增的 Add initializer for required members(为 required 成员添加初始值设定项)快速修复适用于已创建类型对象但尚未初始化成员的情况。 它自动为对象生成所有缺少的 required 成员,您只需用有意义的数据填充成员的值。

checked 用户自定义运算符

checked 用户自定义运算符可以帮助开发者创建对算术溢出是有效概念的类型进行运算的用户自定义运算符。 ReSharper 可以显示所有编译器错误和警告。 为了完全支持 checked 用户自定义运算符,ReSharper 带来了更多检查和上下文操作。

更新的 Unchecked/checked context is redundant(unchecked/checked 上下文冗余)检查能够在此上下文中使用 checked 运算符时将其纳入考量。

如果您有一组用户自定义运算符并且其中部分已有 checked 版本,ReSharper 会帮助您将 checked 运算符传播到整个集合。 新检查 The operator does not have a matching checked operator while other operators do(运算符没有匹配的 checked 运算符而其他运算符有)将告知您哪些运算符尚无 checked 运算符,并建议自动生成 checked 版本的快速修复。

如果您还没有在代码库中使用 checked 运算符但想开始添加,可以使用新上下文操作 Create matching checked operator(创建匹配 checked 运算符)。 它适用于每个用户自定义运算符,可在 Alt+Enter 菜单中一键生成运算符的 checked 版本。

原始字符串

C# 11 引入了原始字符串的概念,以此改进将其他语言或文本格式嵌入 C# 代码中的功能。

ReSharper 具有基本的原始字符串支持,包括编译器错误和正确解析以及 """ 语法的颜色高亮显示、双引号对和内插字符串内的占位符({{...}} 语法)。

列表模式

C# 11 进一步扩展了语言中可用的集合模式。 C# 将允许类列表结构(例如数组、字符串和类 List<T> 集合)的匹配。

ReSharper 2022.2 完全支持具有错误检查、代码补全和代码分析的列表模式。 我们仍在推进代码检查的相关工作,这将用于在现有代码和其他重构操作中建议使用列表模式。

更多 C# 11 功能

更多 C# 11 功能

  • ReSharper 2022.2 完全支持新的无符号右移运算符 (>>>),包括对用户定义运算符 >>> 重载的支持。
  • ReSharper 2022.2 支持简化 Span<char> 值的使用以替代字符串实例,因为在 C# 11 中,字符串常量可以直接与 Span<char>ReadOnlySpan<char> 类型的值进行模式匹配。

解决方案级分析优化

在此版本中,我们显著优化了开启解决方案级分析模式时 ReSharper 的内存使用,无论是内存流量(内存分配的数量)还是内存消耗。

解决方案级分析引擎使用内存存储解决方案中的问题列表,并为执行解决方案级使用报告(代码检查,如“public 成员从未使用”)而存储类型/成员使用信息。 “热”使用数据表示它需要在编辑代码期间不断更新,并且不能卸载到磁盘上。 如果解决方案包含大量类型和类型成员,这可能会消耗大量内存。 经过对内存中所存储数据的研究,我们找出了允许删除重复数据/规范化数据的模式。 我们还通过专用集合类型进一步减小了工作集。 这些优化实现了 5-10 倍的内存消耗改进和更快的解决方案级分析加载。

代码分析

顶级语句

.NET 6 引入了使用 C# 9 顶级语句的新项目模板。 顶级语句简化了 Program 类或 public static void Main(string[] args) 方法的声明。 但有时,显式启动 class Program 是必要做法或更优解。 ReSharper 2022.2 添加了新的上下文操作 To explicit 'Program' class(到显式 'Program' 类),用于执行对旧样式的转换。

同时,如果您拥有现有 Program 启动类并希望迁移到顶级语句,可以使用新的 Convert to top-level code(转换为顶级代码)上下文操作。

INotifyPropertyChanged 支持的更新

在此版本中,我们重做了 INotifyPropertyChanged 支持。 它不再依赖于外部注解来检测常见 INotifyPropertyChanged API,我们由此能够自动支持更多的 MVVM 框架和 INotifyPropertyChanged 基类。 我们现在可以发出 SetField 方法,该方法能够为 INotifyPropertyChanged 通知实现最简洁的语法。

现在还可以为类型或文件中的所有属性添加 property change(属性更改)通知。

Alt+Enter 菜单中的重构

为了使重构更加醒目,我们研究了最常用的重构,并在 Alt+Enter 菜单中引入了依赖于当前上下文的相关上下文操作。

我们添加了在所选代码段上调用 Alt+Enter 菜单时的 Extract method(提取方法)上下文操作。

Change Signature(更改签名)、Transform Parameters(变换形参)、Convert to extension method(转换为扩展方法)和 Convert Property To Method(将属性转换为方法)重构现在都可用作成员签名的上下文操作。

关于使用 nameof 运算符的更多建议

ReSharper 2022.2 现在可以识别 WPF 项目中 DependencyProperty 的注册,并建议使用 nameof 运算符来捕获相应的 CLR 属性名称。 更新的内置实时模板将发出 nameof 而不是字符串文字。

ReSharper 通常无法识别代码中指定某些代码实体名称(如成员或类型名称)的特定字符串文字的特殊含义。 对此,我们为字符串文字引入了新的 Capture element name(捕获元素名称)上下文操作,其标识符可以引用包含字符串文字的上下文中的代码实体。

结构化搜索和替换

来自结构化搜索和替换 (SSR) 模式的快速修复现在可应用于文件、文件夹、项目或整个解决方案范围。 这会影响 ReSharper | Options | Code Inspection | Custom Patterns(ReSharper | 选项 | 代码检查 | 自定义模式)页面上创建的用户自定义模式、ReSharper 内置代码检查以及基于 SSR 的相应修正。

其他

ReSharper 2022.2 现在会在代码中检测到分配模式,并建议更多具有模式匹配的惯用 C# 代码。

ReSharper 2022.2 现在能够将 ?: 表达式下的部分 is 模式替换为 ?? 表达式下更简洁的 as,有效消除了临时变量。

虚拟格式设置

新引入的 Virtual Formatter 让您无需重新格式化磁盘上的源代码即可在所需格式下查看代码。 例如,您现在可以虚拟对齐列中的形参或增加缩进。 此功能的目标是提高代码的可读性和可维护性,让它对视障和神经多样性开发者更易访问。 要启用具有预定义设置的 Virtual Formatter,请转到 ReSharper | Options | Environment | Inlay Hints | General(ReSharper | 选项 | 环境 | 嵌入提示 | 常规)。 要进一步根据特定规范定制格式,请选中 Use dedicated Virtual Formatter style settings(使用专用 Virtual Formatter 样式设置)复选框并点击 C#。

磁盘清理

您现在可以移除 ReSharper 在处理代码期间生成的临时文件。 Options(选项)中新增的页面可供:

  • 观察 ReSharper 可以移除的一组默认路径和文件。
  • 为待移除的文件添加自定义路径模板。
  • 指定多少天后 ReSharper 将各路径模板的文件视为过期。
  • 检查各路径模板匹配的文件占用了多少空间。
  • 设置定期运行的过期文件自动清理(默认值为 1 天)。
  • 为不同范围手动运行清理。

JavaScript 和 TypeScript 支持

许多人可能已经发现 ReSharper 中的 JavaScript 和 TypeScript 支持已经过时且速度缓慢。 在当前实现中,很难紧跟 TS 语言变化并快速支持新版本,因此我们正在寻找一种更好的方式来支持这些语言。 经过长时间的内部讨论,我们决定暂停当前的 JS 和 TS 支持。 因此,我们在此版本中默认禁用了 TS/JS 支持。 如果您仍想使用,可以在此处重新启用:ReSharper | Options | Environment | Products & Features | the "JavaScript and TypeScript" checkbox(ReSharper | 选项 | 环境 | 产品和功能 | “JavaScript 和 TypeScript”复选框)。

Unreal Engine

ReSharper C++ 引入了特定于蓝图的嵌入提示,显示代码背后的整体情况:

  • 查看派生蓝图类和所有继承者的列表。
  • 发现 UFunction 在蓝图中的实现并搜索所有此类情况。
  • 快速检查 UProperty 的状态,包括其是否已被覆盖以及在蓝图文件中设置了什么值。

我们还引入了检查,展示代码中使用的特定于蓝图的函数说明符与蓝图本身之间是否存在不一致。

对原生系统调用的改进支持 dotUltimate

现在,dotTrace 在 Timeline Call Tree(时间线调用树)中提供原生系统调用的更多详细信息,包括 Windows 内核调用 (ntoskrnl.exe)、设备驱动程序调用 (*.sys) 等。

采用 StyleCop.Analyzers 的设置

ReSharper 现在可以检测项目是否引用了 StyleCop.Analyzers 软件包,并从 stylecop.json.ruleset 文件读取其设置。 文件标题和缩进设置提取自 stylecop.json,StyleCop 规则根据有效的 .ruleset 文件设置应用。

ReadyToRun 和 NGen 程序集

  • ReadyToRun (R2R)NGen 程序集在 Assembly Explorer 中的显示方式已得到改进。 现在,每个程序集的名称旁边都会显示一个小的处理器符号图标和 ngenR2R 标签。
  • Metadata 树具有 ReadyToRun 头。
下载

可免费试用 30 天