ReSharper 2023.1 最新变化

ReSharper 2023.1 改进了对 C# 的支持,添加了一组检查来优化和加快处理不同类型集合的工作,以及在代码中引入 null 检查的多项可调整方法。 这个版本还带来了针对 C++20 模块的更新、第一批对 C++23 功能的支持,以及 C++ 的宏替换预览和 Call Tracking(调用跟踪)。 另外还包括对单元测试和代码清理用户体验的增强。

下载

可免费试用 30 天

C# 支持

减少集合中的查找次数

我们引入了一组检查和相应的快速修复,通过减少集合中的查找次数来优化和加快处理不同类型集合的工作:

  • 将条目添加到 HashSet 或其他实现 ISet 接口的集合之前移除 Contains(item) 检查。
  • 将条目添加到 Dictionary 或其他实现 IDictionary 接口的集合之前移除 ContainsKey(key) 检查。
  • 尽可能对 Dictionary 集合或从 Dictionary 继承的集合使用 TryAdd(key, value)
  • 尽可能对 IDictionary 集合使用 TryGetValue(key, out value)

null 检查模式的语法样式

我们提供了新的 Syntax style(语法样式)设置,帮助您在模式中实施一致的 not null 检查样式。 它由两个选项组成:空递归模式语法 { } 和否定模式 not null,后者为默认模式。 您随时可以在 ReSharper | Options | Code Editing | C# | Syntax Style(ReSharper | 选项 | 代码编辑 | C# | 语法样式)页面上调整行为。

使用 not null 模式有一个缺点,它不允许像递归模式 { LastName: { } lastName } 那样为检查值引入变量名。 我们在 not null 模式上添加了 Add pattern variable(添加模式变量)上下文操作,查找访问相同值的表达式(因为我们要引入一个变量名),并将所有表达式替换为新引入的名称,整合对相同值的所有访问。

null 检查的 ArgumentNullException.ThrowIfNull 样式

.NET 6.0 SDK 为 null 检查引入了新的 API – ArgumentNullException.ThrowIfNull。 我们的代码分析引擎从那时起就可以识别这种检查方式,但没有选项将此 API 用作 ReSharper 生成的 null 检查的默认样式。 在 2023.1 版本中,我们向 ReSharper | Options | Code Editing | C# | Null checking(ReSharper | 选项 | 代码编辑 | C# | Null 检查)添加了 ArgumentNullException.ThrowIfNull 模式。

提取通用属性模式

如果您大量使用属性模式匹配,请尝试我们的新检查和快速修复,当多个属性模式在代码流中一起出现时提取通用元素。 Extract common property pattern(提取通用属性模式)快速修复生成的代码可以将通用属性模式移动到更高级别的模式,帮助您减少代码重复。

移除空区域

C# 开发者通常依赖 #region 指令和 IDE 中的代码折叠来组织代码。 重构可能会留下一些空 #region,这会使代码在收起时看起来具有误导性。 借助这项新的代码检查,您将能够识别折叠状态的空 #region,并使用相应的快速修复清理代码。

替换 span.SequenceEqual(“str”)

代码分析有一项代码检查,该检查会建议将 span.SequenceEqual("stringLiteral") 替换为 span is "stringLiteral" – 这是比调用函数更清晰、更方便的 C# 语法解决方案。

为 lambda 插入返回值类型规范

C# 中的 lambda 表达式可以具有隐式类型形参和推断的返回值类型。 不过,添加显式类型可以阐明复杂重载解析场景中的代码。 从 C# 11 开始,还可以为 lambda 表达式添加返回值类型规范。 为此,我们在 ReSharper 2023.1 中引入了 Insert return type specification(插入返回值类型规范)上下文操作。 该操作可以应用于所有作用域,包括方法、类、文件、项目或整个解决方案。

Pattern is redundant(模式冗余)检查

C# or/and/not 模式适合紧凑值检查,但可能不如传统表达式(例如 ||/&&/!)容易识别。 如果遗漏圆括号,它们还可能产生难以发现的错误。 为了帮助解决这个问题,我们在 2023.1 版本中引入了新代码分析,可以就复杂模式中的“死”检查向您发出警告。

Convert to list pattern(转换为列表模式)上下文操作

我们继续改进对 C# 11 列表模式的支持。 借助新增的 Convert to list pattern(转换为列表模式)上下文操作,您可以将集合长度检查转换为列表模式语法。 它适用于所有可以检查集合长度的上下文。

C++ 支持

宏替换预览

宏替换预览

在宏上悬停鼠标时,您现在可以在工具提示中看到宏扩展,带有完整的语法高亮显示和正确的代码格式设置。 您仍然可以使用 Substitute macro call(替换宏调用)上下文操作直接在代码中查看宏展开,但即时预览使宏操作更简单。 此外,在 Quick Documentation(快速文档)弹出窗口 (Ctrl+Shift+F1) 中,您可以点击替换预览中的实体并查看其文档。

调用跟踪

调用跟踪

Call tracking(调用跟踪)已登陆 ReSharper C++! 您现在可以在传入调用层次结构中查看和浏览调用链。 在调用跟踪结果窗口中,您可以双击层次结构条目来导航到编辑器中的相应调用,或者展开节点以检查其传入调用。

ReSharper C++ 2023.1 最新变化

UX/UI 更改

更新对话框

ReSharper 2023.1 引入了重做的更新对话框,其中包含最新版本的更改说明,让您可以更好地决定下载还是跳过更新。

新快捷键对话框

从 2023.1 版本开始,首次启动 ReSharper 时,您将看到 Keyboard Shortcuts(键盘快捷键)屏幕,可以在其中选择想要使用的快捷键方案。

代码清理

Reformat inactive preprocessor branches in file(重新格式化文件中停用的预处理程序分支)是我们在 ReSharper 2023.1 中引入的新任务类型。 这项任务使您能够重新格式化停用的预处理程序分支。 它一次只能应用于整个文件,并且仅适用于 C# 源。

这项任务无法重新格式化隐藏在始终为 false 的预处理程序指令 #if 后的代码。 这种限制的两个最明显示例是 #if false ... #endif#define A #if !A ... #endif 构造。

单元测试

现在,使用工具栏中的 Run(运行)按钮运行测试时,也将考虑在 Session(会话)和 Explorer(资源管理器)工具窗口内应用于单元测试树的文本搜索筛选器。 只有满足搜索条件的节点才会在列表中保留并运行。

Rename(重命名)重构

我们改进了 ReSharper 处理项目中文件重命名的方式。 从这个版本开始,重命名解决方案中的文件时,会出现一个对话框,其中包含重命名所有相关符号(类、接口等)以匹配更改的选项。

macOS 和 Linux 上的 dotTrace 测试版 dotUltimate

独立版本的 dotTrace 现已登陆 Linux 和 macOS。 现在,您可以在这些操作系统上执行完整的分析工作流,包括收集和分析性能快照。

插件迁移

现在,只要引用的 API 保持有效且不变,ReSharper 插件就会自动从一个版本迁移到下一个版本。

内置 API 验证器将检查安装的插件的二进制兼容性并迁移可行的插件。 如果插件使用的 API 不再出现在 SDK 中,插件作者也会从 JetBrains Marketplace 收到自动通知。

其他

CSS 支持默认关闭

由于 ReSharper 中对 CSS 需求的很少,我们越发难以优先跟上这门语言的最新版本。 因此,我们决定暂停对 CSS 的支持,直到我们找到更好的方式来支持这门语言。

从 ReSharper 2023.1 开始,CSS 支持将默认禁用。 如果您仍想使用该语言,可以在此处重新启用:ReSharper | Options | Environment | Products & Features | the "CSS" checkbox(ReSharper | 选项 | 环境 | 产品和功能 |“CSS”复选框)。

结束针对 Visual Studio 2010 和 2012 的开发

ReSharper 和 .NET 工具目前支持 7 个主要版本的 Visual Studio,从 2010 到最新的 2022。 从 2023.1 开始,我们将放弃对两个最旧版本 Visual Studio 2010 和 Visual Studio 2012 的支持。

了解详情

下载

可免费试用 30 天