ReSharper 2022.3 最新变化

ReSharper 2022.3 引入了对最新的 C# 11 功能的基础支持,包括 UTF-8 文字、file 局部类型、static virtual 成员、跨 span 的模式匹配等。 对于此版本,我们重做了代码高亮显示,为 NuGet 软件包引入了漏洞依赖项检测,并实现了以 GraphML 格式导入和导出类型和项目依赖项图。 此版本还提供了对 ARM64 上运行的 Microsoft Visual Studio 的早期支持。

下载

可免费试用 30 天

C# 11

我们正在最终确定对最新的 C# 11 功能的基本支持:

UTF-8 文字

我们添加了对 UTF-8 文字的基础支持。 代码分析现在会建议对文字使用 u8 后缀,而不是 System.Text.Encoding.UTF8.GetBytes() 方法或具有适当 UTF8 符号的字节数组。 还有一组针对 UTF-8 文字的编译器警告和错误。

file 局部类型

file 局部类型的基础支持包括对新语法的理解、类型的 file 可访问性修饰符、编译器警告和错误以及相应快速修复,例如为嵌套类指定 file 修饰符时的 Move class to outer scope(将类移动到外部范围)。 还新增了一项实用的上下文操作,可以将通用类型转换为 file 类型。

原始字符串

Rider 现在可以将常规字符串和逐字字符串转换为原始字符串。 这也意味着许多现有字符串功能可用于原始字符串

列表模式建议

在此版本中,我们引入了使用新的 C# 11 列表模式语法(而不是使用后续索引器访问表达式进行常规集合长度检查)来检查集合中相应条目的建议。

static virtual 成员

从 C# 11 开始,您可以对接口中的 static 成员使用 abstractvirtual 修饰符,并在类型形参受此接口约束的泛型代码中使用此类成员。 更新的 ReSharper 可以像处理普通多态成员一样处理多态 static 成员:

  • 装订区域上的继承标记。
  • 导航到实现/super 成员。
  • 生成缺失的实现。
  • override 关键字后的代码补全建议还包括接口成员,因此现在您可以轻松实现 abstract 或 virtual static 成员。

无符号右移 (>>>) 运算符

ReSharper 现在可以识别 C# 开发者为了对有符号数据类型执行无符号右移而必须编写的繁琐代码模式,并建议改用 C# 11 中的无符号右移 (>>>) 运算符。

跨 span 的模式匹配

解析字符的 Span 时,您可能会经常使用 MemoryExtensions.SequenceEqual 方法。 C# 11 为这种检查引入了一种简写形式。 您现在可以使用 isswitch 表达式将字符的 Spans 与字符串文字进行模式匹配。

ReSharper 现在建议使用 isswitch 表达式,而不是大量的 if 语句。

ref 字段和 scoped 关键字

从 C#11 开始,您可以在 ref 结构中声明 ref 字段。 ReSharper 支持此新语法规则,提供所有编译器错误和警告,在代码补全中显示 ref 关键字,并允许在构造函数中初始化此类字段。

ReSharper 还知晓新的 scoped 关键字,您可以在 by-refref struct 实参和局部变量上使用它。 支持包括新语法的正确解析、代码补全中的 scoped 关键字,以及在生成方法重写时保留 scoped 关键字。 它还会验证 scoped 修饰符的兼容性,并为重写、接口实现和委托转换中不匹配的 scoped 形参提供快速修复。

C# 11 和 .NET 7 还为语言的 ref 安全规则引入了更改。 这些更改控制 by-refref struct 变量可用的操作,以引入 ref 字段的方式在托管代码中提供 ref 安全性。 ReSharper 知晓这些更改,并将帮助您找到项目中需要更新的部分,并使用新的 scoped 关键字注解,以适应迁移到 C# 11 或 .NET 7 时的变化。

语言注入

在 2022.3 版本中,我们对语言注入支持引入了一些更改:

语言注入现在可以在 C# 11 原始字符串文字中使用。

ReSharper supports the [StringSyntax] attribute from .NET 7, along with its different syntaxes for language injection and code completion.

常规 C# 更新

全局导入装订区域标记

新增的装订区域标记图标可以向用户通知 C# 和 Razor 文件中的隐式命名空间导入。

在相应行上按 Alt+Enter,即可观察到隐式导入的完整列表以及相应 global using 指令所在源文件的信息。 选择特定导入命名空间后,ReSharper 可以导航到它被声明的位置,包括导航到 .csproj 项目文件中的 <Using Include="Some.NameSpace" /> 标记。

ReSharper 还提供来自 _Imports.razor 的全局导入,并允许导航到相应的导入定义。

格式字符串补全

通过在 .NET 7 中添加 Int128UInt128 数字类型,我们更新了代码补全格式说明符建议。

我们还添加了缺少的对 .NET 6 中 DateOnlyTimeOnly 日期/时间类型以及 .NET 5 中引入的 Half 半精度浮点数字类型的支持。

表达式的普通模式

有时在重构之后,模式匹配表达式可能会变成普通的递归模式。 此时可能不值得使用递归模式语法,因此 ReSharper 现在提供将模式重写为更简单表达式的操作,同时保留原始模式匹配语义。

针对 void 表达式的代码补全提示

在调用后输入时,偶尔可能没有任何有意义的建议。 如果调用返回 void 的方法时调用没有产生任何值,就会发生这种情况。 这通常需要一些 IDE 操作后才能意识到(返回并导航到方法声明,或将鼠标悬停在调用上)。 在此版本中,我们针对此类返回 void 的调用引入了 void 提示条目,为您提供有关调用产生的类型的即时反馈。 如果缺少分号,接受此 void 条目将在调用后添加一个分号。

代码高亮显示

ReSharper 2022.3 中的代码高亮显示和波浪线得到了大修。 由于内部逻辑差异,ReSharper 曾经与 Microsoft Roslyn 的代码样式分析器发生冲突,导致其显示重叠高亮显示,在不同的位置绘制相同的高亮显示,或者双重波浪线。 大多数此类情况背后的逻辑差异现已得到解决,对于极少数异常,会提示错误并就如何解决冲突提出明确建议。

安全性

在解决方案中使用开源 NuGet 软件包时,项目都有暴露于安全漏洞的风险。 虽然 NuGet 提供了一些筛选此类威胁的外部工具,但在 IDE 中使用这样的工具在设计时捕获漏洞会更加方便。 因此,我们在 ReSharper 中引入了漏洞依赖项检测。 从这个版本开始,受影响的依赖项将在 .csproj.vbproj 文件中高亮显示。

对 Visual Studio 2022 ARM64 的支持

ReSharper 现在可以集成到 ARM 设备上的 Microsoft Visual Studio 中。 我们为所有基本开发工作流提供初步支持,ReSpeller 的拼写检查除外。

安装程序已经更新,包括对 x64 和 ARM64 的支持。 将根据机器的处理器架构自动安装正确版本。

对 Windows ARM64 的支持

dotPeek、dotMemory、dotTrace 和 dotCover 以及 ReSharper 命令行工具现在也支持 Windows ARM64。

反编译器

ReSharper 2022.3 中的嵌入式反编译器支持:

  • 接口中的 static abstractstatic virtual 成员;
  • 通用特性;
  • 用户定义的 checked 运算符;
  • 无符号右移运算符。

IL Viewer

IL Viewer 工具窗口现在能够将代码反编译为不同级别的 C# 语言构造。 有两个可用的 C# 级别:高级 – 使用最新语言功能简化了某些语法构造,低级 – 用于您想知道这些语法构造如何脱糖的情况。

依赖关系图

ReSharper 现在允许您以 GraphML 格式保存和导入类型和项目依赖关系图,保留将图表用作代码映射和快速浏览依赖项的功能。

Dynamic Program Analysis

Dynamic Program Analysis (DPA) 添加了新检查,可让您发现与数据库使用相关的各种问题,例如:

  • 命令执行时间长
  • 数据库连接过多
  • 同时执行的数据库命令过多
  • 命令返回的记录过多

新检查适用于所有使用 Entity Framework Core 和 SQL Server 的 .NET 数据提供程序的应用程序。

C++20 模块

ReSharper C++ 2022.3 添加了对 C++20 模块的实验性支持。 我们更新了语言引擎和大量 ReSharper C++ 功能,以配合新编译模型,同时支持命名模块和头单元。

ReSharper C++ 2022.3 最新变化

Clang-format 集成

ReSharper C++ 2022.3 提供了与 clang-format 的无缝集成。 您现在可以在 ReSharper 自己的格式设置引擎与用于格式化文件的内置或自定义 clang-format 二进制文件之间切换。 ReSharper C++ 在单独的进程中运行 clang-format,确保与行业标准格式化程序完全兼容,提供更好的性能和更广泛的格式设置选项。

下载

可免费试用 30 天