ReSharper 2023.1 改进了对 C# 的支持,添加了一组检查来优化和加快处理不同类型集合的工作,以及在代码中引入 null 检查的多项可调整方法。 这个版本还带来了针对 C++20 模块的更新、第一批对 C++23 功能的支持,以及 C++ 的宏替换预览和 Call Tracking(调用跟踪)。 另外还包括对单元测试和代码清理用户体验的增强。
可免费试用 30 天
我们引入了一组检查和相应的快速修复,通过减少集合中的查找次数来优化和加快处理不同类型集合的工作:
HashSet
或其他实现 ISet
接口的集合之前移除 Contains(item)
检查。 Dictionary
或其他实现 IDictionary
接口的集合之前移除 ContainsKey(key)
检查。 Dictionary
集合或从 Dictionary
继承的集合使用 TryAdd(key, value)
。 IDictionary
集合使用 TryGetValue(key, out value)
。 我们提供了新的 Syntax style(语法样式)设置,帮助您在模式中实施一致的 not null
检查样式。 它由两个选项组成:空递归模式语法 { }
和否定模式 not null
,后者为默认模式。 您随时可以在 ReSharper | Options | Code Editing | C# | Syntax Style(ReSharper | 选项 | 代码编辑 | C# | 语法样式)页面上调整行为。
使用 not null 模式有一个缺点,它不允许像递归模式 { LastName: { } lastName }
那样为检查值引入变量名。 我们在 not null
模式上添加了 Add pattern variable(添加模式变量)上下文操作,查找访问相同值的表达式(因为我们要引入一个变量名),并将所有表达式替换为新引入的名称,整合对相同值的所有访问。
.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# 语法解决方案。
C# 中的 lambda 表达式可以具有隐式类型形参和推断的返回值类型。 不过,添加显式类型可以阐明复杂重载解析场景中的代码。 从 C# 11 开始,还可以为 lambda 表达式添加返回值类型规范。 为此,我们在 ReSharper 2023.1 中引入了 Insert return type specification(插入返回值类型规范)上下文操作。 该操作可以应用于所有作用域,包括方法、类、文件、项目或整个解决方案。
C# or/and/not
模式适合紧凑值检查,但可能不如传统表达式(例如 ||/&&/!
)容易识别。 如果遗漏圆括号,它们还可能产生难以发现的错误。 为了帮助解决这个问题,我们在 2023.1 版本中引入了新代码分析,可以就复杂模式中的“死”检查向您发出警告。
我们继续改进对 C# 11 列表模式的支持。 借助新增的 Convert to list pattern(转换为列表模式)上下文操作,您可以将集合长度检查转换为列表模式语法。 它适用于所有可以检查集合长度的上下文。
在宏上悬停鼠标时,您现在可以在工具提示中看到宏扩展,带有完整的语法高亮显示和正确的代码格式设置。 您仍然可以使用 Substitute macro call(替换宏调用)上下文操作直接在代码中查看宏展开,但即时预览使宏操作更简单。 此外,在 Quick Documentation(快速文档)弹出窗口 (Ctrl+Shift+F1) 中,您可以点击替换预览中的实体并查看其文档。
Call tracking(调用跟踪)已登陆 ReSharper C++! 您现在可以在传入调用层次结构中查看和浏览调用链。 在调用跟踪结果窗口中,您可以双击层次结构条目来导航到编辑器中的相应调用,或者展开节点以检查其传入调用。
现在,使用工具栏中的 Run(运行)按钮运行测试时,也将考虑在 Session(会话)和 Explorer(资源管理器)工具窗口内应用于单元测试树的文本搜索筛选器。 只有满足搜索条件的节点才会在列表中保留并运行。
我们改进了 ReSharper 处理项目中文件重命名的方式。 从这个版本开始,重命名解决方案中的文件时,会出现一个对话框,其中包含重命名所有相关符号(类、接口等)以匹配更改的选项。
现在,只要引用的 API 保持有效且不变,ReSharper 插件就会自动从一个版本迁移到下一个版本。
内置 API 验证器将检查安装的插件的二进制兼容性并迁移可行的插件。 如果插件使用的 API 不再出现在 SDK 中,插件作者也会从 JetBrains Marketplace 收到自动通知。
由于 ReSharper 中对 CSS 需求的很少,我们越发难以优先跟上这门语言的最新版本。 因此,我们决定暂停对 CSS 的支持,直到我们找到更好的方式来支持这门语言。
从 ReSharper 2023.1 开始,CSS 支持将默认禁用。 如果您仍想使用该语言,可以在此处重新启用:ReSharper | Options | Environment | Products & Features | the "CSS" checkbox(ReSharper | 选项 | 环境 | 产品和功能 |“CSS”复选框)。
ReSharper 和 .NET 工具目前支持 7 个主要版本的 Visual Studio,从 2010 到最新的 2022。 从 2023.1 开始,我们将放弃对两个最旧版本 Visual Studio 2010 和 Visual Studio 2012 的支持。
可免费试用 30 天