ReSharper 2021.1 最新变化

ReSharper 2021.1 带来代码分析更新、ASP.NET 路由模板支持、元组组件 Rename 重构等。

下载

可免费试用 30 天

代码分析

合并更多模式

Merge into pattern 检查现在可以处理更多代码模式。 null 检查与其他检查融合成单一的模式检查:

conditional?.Access 表达式的检查改写为嵌套模式匹配:

合并检查,减少 if 语句嵌套:

最后,您可以将模式扩展为完整的形式,从而将其合并到简单的 var (a,b) 析构模式中:

更多 C# 9.0 支持

我们为 C# 9.0 记录添加了更多支持。 Extract interfaceExtract superclass 重构现在支持 record 声明,File Layout 也支持 XML 文档相关功能。

我们引入一套新的检查和操作。 迁移代码以使用具有位置参数和隐式属性声明的记录时,针对 record 声明中属性的 Redundant explicit property declaration 可以提供帮助。 已添加相应的快速修复 Remove explicit property

如果您决定将 record 变成 classTo class 操作将处理位置参数和主构造函数。 To record 操作适用于相反的流程。

需要将位置参数和主构造函数重写为普通属性、构造函数和显式 Deconstruct() 方法时,可以使用 To explicit constructor 上下文操作。

为了保持整洁:Redundant 'record' type declaration body 检查和相应的快速修复将用分号代替空的 record 类型声明体。

Find usages 现在可以搜索记录的主构造函数的用法和隐式 Deconstruct() 方法的用法。

内联临时变量

我们引入了一个新检查 Inline temporary variable。 有时,您可能会在程序中以不同的名称反复使用相同的值。 这样的代码可以变得更加透明吗? 当然可以,交给 ReSharper 就够了。

如果临时变量应该初始化为其他值或稍后在代码中突变,它甚至可以帮助您发现错误。

其他新功能

逻辑 not 模式可以帮助您使类型检查更易读。 ReSharper 建议放弃 !() 语法,改用 not 模式。

在可以简化代码的时候,ReSharper 现在将建议使用范围运算符代替 SliceSubstring

现在,Namespace does not correspond to file location 检查在具有顶层代码的文件中被禁止。

新增一项检查,用于确认是否可以使用计算所得属性替换自动属性,同时增加一个快速修复来进行替换。

对于 C# 10.0 支持,我们做出了一些初步改善,并让 ReSharper 支持常量字符串插值功能。

敬请期待详细说明 2021.1 代码分析的特别博文!

ASP.NET Core 路由模板

路由模板在 MVC 应用程序中广泛使用,用于配置 HTTP 请求与应用程序的可执行端点的匹配方式。 在 2021.1 中,我们引入了对路由模板的支持:ReSharper 现在提供结构化导航、检查和快速修复。 来看几个示例。

最基本的检查可以确定路由模板语法错误:误将总括的参数路由放在模板中间,将总括的参数声明为可选,或为可选参数添加默认值,等等。

路由参数产生了许多值得注意的案例。 在控制器和操作中声明具有相同名称的参数会发生什么? ReSharper 将对此发出警告。

另一方面,参数可能会丢失。 在这种情况下,ReSharper 会建议您从控制器的特性或操作中添加。 如果存在类型约束,它将用于推断参数的类型。

约束非常适合代码分析。 ReSharper 会检查所应用的约束本身是否正确,以及参数是否实际满足约束。

ReSharper 还会尝试根据约束分析参数类型是否可以更严格,并可能建议更改参数类型。 如果需要使用其他类型的参数,取消建议即可。

ReSharper 也可以理解自定义约束。 如果在某些情况下无法识别,请使用 JetBrains.Annotations 提供的 [RouteParameterConstraint] 特性为您的约束类添加注解。

标准包的其他功能包括代码补全、结构导航和代码重新排列。

重命名路由参数不再需要手动进行:使用 Rename 重构即可。

以上现在均适用于基于特性的路由。 我们很想听听您对这一更新的反馈。

有关 ASP.NET Core 路由模板的更多详细信息,请阅读这篇博文

元组中的 Rename

命名元组始于 C# 7,但重命名组件至今仍然是手动操作。 是时候改变了 - 您现在可以立即调用重构。

导航

新的导航操作 – Navigate to Windows Explorer。 您可以在 Navigate | Navigate to 菜单中找到它,或者按 Ctrl+Shift+A 输入其名称。 如果要对文件本身进行操作,如复制文件或复制仓库内的路径,或者要通过 Windows Explorer 的 Git 扩展查看文件的 VCS 历史记录,均可使用此功能。

性能

虽然我们为“进程外”模式将 ReSharper 拆解并重组,但我们从未停止尽可能修复特定性能问题。 以下是一些亮点。

  • 我们加快了在大型解决方案内 Razor 文件中的输入速度。
  • 我们加快了在运行 ReSharper 分析器的任何大文件中的输入速度。
  • 我们改进了调试器数据提示的性能和响应速度。
  • 我们优化了 ReSharper 处理共享文档的方式,减少了内存占用。
  • 我们对 JavaScript 和 TypeScript 单元测试进行了性能改进。

格式设置和代码样式

我们添加了一些新设置:

  • 现在,您可以选择是否在目标类型的 new() 括号前和括号内设置空格。
  • 您可以在赋值运算符之前指定换行。
  • 您可以减少缩进标签语句。

对于自定义命名规则,我们更新了应用顺序:更具体的规则现在会优先应用。

最后,我们为 Format Selection 添加了新的操作。 现在,您可以让 ReSharper 仅调整所选代码的缩进,而不执行整个重新格式化进程。

我们还修复了一系列错误 - 详见我们的问题跟踪器

EditorConfig

EditorConfig 在 .NET 社区中越发流行,我们也在不断改进其与 ReSharper 的合作方式。 这是我们所做的更改:

  • 我们改进了 ReSharper 从 EditorConfig 中读取命名规则设置并将用户定义的命名规则写入 EditorConfig 的方式。
  • 如果在 EditorConfig 中重写了命名规则,ReSharper 会在命名设置页面上显示通知。
  • 我们在 EditorConfig 中添加了对 csharp_indent_case_contents_when_block 选项的支持。

单元测试

  • We’ve implemented support for VSTest adapters – a feature that allows you to discover and run tests from a third party framework. 现在,您不会受到我们开箱支持的框架的限制。 在 ReSharper | Options | Tools | Unit Testing | Test Frameworks | VSTest 中启用该功能。
  • 我们在 Visual Studio 2019 的 Universal Windows Platform 项目中实现了 MSTest 支持。
  • 关于“生成的进程”问题:有时测试运行程序完成了工作,但它启动的进程仍在生效。 在这种情况下,我们为默认操作过程添加了一个设置。 现在,您可以在该怎么做、什么都不做和终止生成的进程之间进行选择。 在被问及进程的问题并决定如何处理时,您的决定会被保存到 ReSharper | Options | Tools | Unit Testing | Test Runner。 如果错误,您可以随时将其删除。
  • 我们在 NUnit 中为 AutoFixture 库实现了一套检查。 ReSharper 现在会检查测试值类型是否正确,验证 [InlineAutoData] 特性中是否有多余的参数,并在测试类或方法上没有 [TestFixture][Test] 特性时发出警告。
  • 我们将对 QUnit 的支持升级到了 2.14.0 版。

支持 C++

ReSharper C++ 2021.1 引入了对多个 C++20 和 C++17 新语言功能的支持:非类型模板参数中的类类型、C++20 类模板参数推导规则以及作为函数类型一部分的 noexcept。 基本代码补全和后缀补全模板中还提供了协程的新代码补全项:co_awaitco_yieldco_return

C++ 语法样式

我们引入了语法样式设置的集合为语法构造强制执行所选的代码样式。 通过支持的检查、快速修复以及 Apply Syntax StyleCleanup selection 上下文操作,您可以轻松地将新样式应用到代码库并保持新代码的一致性。

其他更新

  • 我们添加了用 Copy FQN 功能复制 GitHub 链接的操作。 从主菜单 (ReSharper | Edit) 或使用 Ctrl+Shift+A 调用 Copy Fully-qualified name 时,ReSharper 会进行复制并打开上下文菜单,供您选择非默认格式外的多种格式。 现在,此菜单包括 GitHub 链接。
  • 如果您在 C#、VB.NET 或 JavaScript 的字符串中使用正则表达式(甚至在 Razor 页面中),您可能会选择扩展/收缩选择功能,该功能现在也可以在注入中使用。
  • 我们为元组转换添加了类型转换提示。
  • 新的 Body 约束可用于 File Layout 中的方法。 它允许您为块体方法和表达式体方法指定不同的规则。

dotTrace 和 dotMemory 中新的主屏幕 dotUltimate

我们重新设计了 dotTrace 和 dotMemory 的主屏幕, 现在配置和启动新的分析会话、使用快照以及执行其他基本操作变得更加轻松。

下载

可免费试用 30 天