Java Kotlin News Releases

Qodana 2022.3 EAP 现已发布:适用于 .NET 和 Go 并包含超过 100 项新检查的 Qodana

Read this post in other languages:
English, Français, 한국어

我们很高兴地宣布 Qodana 2022.3 EAP 已正式发布。 此版本的平台带来了对 .NET 和 Go 的支持。 我们还为已经支持的语言添加了 100 多项新检查。 不过,Qodana 2022.2 映像更加稳定,因为 Qodana 2022.3 EAP 仍处于起步阶段。

继续阅读以了解详情,并率先体验一些令人兴奋的新功能!


开始使用 QODANA

我们全新的 linter 汇集了 RiderGoLand 的所有智能功能,使您能够发现异常代码和潜在错误、消除死代码、改进整体代码结构并在所有 .NET 和 Go 项目中引入编码最佳做法!

Qodana for .NET

Qodana 几乎支持 Rider 提供的所有 .NET 检查。 由于检查名目繁多,请参阅 Rider 文档以详细了解所有检查。 同时,下文也提供了 Qodana 可以运行的 .NET 检查的一些示例。

lock 顺序不一致

使用 lock 实现线程安全的主要问题之一是需要避免死锁,即线程同时阻塞彼此继续执行而导致进度中断。 借助这项新检查,Qodana 将在运行时高亮显示可能会导致死锁的循环。

访问被修改的捕获变量

当变量在外部被修改时,Qodana for .NET 会检测从匿名方法对捕获变量的访问。

当委托类型返回 ‘void’ 时避免使用 ‘async’ lambda

这项检查可以检测 ‘async’ lambda 表达式:任何未被 lambda 处理的异常都不会影响调用方线程,也不会被 catch 子句捕获。

类型检查和转换可以合并

仅在 Expression 的运行时类型与 Type 兼容且 Expression 的结果不是 null时,类型测试 is 运算符才会以其经典形式 (Expression is Type) 返回 true

当我们使用 is 在转换前检查兼容性时,如下例所示,我们至少会遇到两个问题:

  • 我们无端执行了两次类型检查,如果在循环内执行,这会影响性能。
  • 如果 objnull 则程序执行不会进入 if 语句,这一事实对于阅读此代码的人而言并不清晰直观。

Qodana 会检测到此问题并建议您直接在 Rider 中进行修正。

Lambda 表达式/匿名方法不应捕获包含上下文

传递给由 ‘[RequireStaticDelegate]’ 特性注解的形参的 lambda 表达式/匿名方法不得捕获包含上下文(局部变量、本地函数、‘this’ 引用),以避免堆分配。

要针对 .NET 配置 linter 并运行分析,请参阅 Qodana 文档

Qodana for Go

Qodana 2022.3 支持 GoLand 提供的所有检查。 要查看完整列表,请参阅 GoLand 文档。 以下是一些 Qodana 现在支持的 Go 检查示例。

占位符实参 ‘d.DeletedCount’ 具有错误类型 ‘int64’ (%s)

这项检查可以报告 fmt.Printffmt.Println 以及类似格式设置和打印函数的错误用法。

在它们的格式字符串中,格式设置函数使用格式设置动词,例如 %s%d%v 等。

如果格式设置动词使用不正确,则格式设置函数的结果将包含错误。

未处理的错误

这项检查可以报告对不处理 error 类型调用结果的函数和方法的调用。

此类函数的 API 意味着它们的执行可能会失败并返回错误。 不处理错误结果的调用可能表明 API 遭到滥用。

未使用的依赖项

这项检查可以报告项目中未使用的依赖项。 定期扫描未使用的依赖项是一种很好的做法,因为它可以缩减项目的库大小并提高可维护性。

要查看 Qodana 的实际运作情况并尝试使用这些新检查,请随时跳转到我们的文档并了解如何为 Go 配置 linter。

新检查

除了针对 .NET 和 Go 添加了新的 linter,Qodana 2022.3 还为您带来了超过 100 项针对现有 linter 的新检查。 我们来看一下最突出的几项 Java、Kotlin 和 Python 检查示例。

Java 和 Kotlin 检查

我们为 Qodana for JVM Community 和 Qodana for JVM 添加了超过 40 项新检查。

DataFlowIssue

这项检查可以基于数据流分析报告始终违反为 null 性协定、可能抛出异常或冗余的代码构造。

EscapedSpace

Java 15 引入了字符串转义序列 s 以使文本块中的尾随空格可见。 在大多数其他情况下,尤其是在正则表达式中,此转义序列很容易与正则表达式的 s(表示空格)混淆。 在 Java 字符串文字中,必须将它改写为 "\s"

MismatchedJavadocCode

这项检查可以报告方法的 Javadoc 明显与方法签名相矛盾的情况,例如当方法返回字符串时注释却说“returns true”。

Destructure

这项检查可以报告 Kotlin 中可以析构的声明。

UnresolvedRestParam

现在,Qodana 可以检测 REST 服务中是否存在不一致的方法声明(例如与 @Get 注解中的占位符不匹配的 @PathParam 形参),因为这些会在运行时抛出异常。 

ReactiveStreamsThrowInOperator

这项新检查可以检测 Reactor/RxJava 运算符代码中的 throw 语句,而非返回指定的错误值,从而防止错误被进一步处理。 例如,它会忽略它们或将它们替换为后备值。

 

请注意,此版本的 Qodana 还带来了 IntelliJ IDEA 2022.3 和 Android Studio – Electric Eel | 2022.1.1 中针对 Android 的所有新检查。

Python 检查

我们还在 Qodana for Python 中添加了一些针对 Google App Engine 的检查,这些检查会在问题导致生产环境发生故障之前将其高亮显示。 例如,现在您可以检测:

  • 与 Google App Engine 服务器允许的查询限制不符的 GQL 查询。
  • 没有索引的 GQL 查询。
  • 受 Google App Engine 沙盒限制的 Python 功能的用法。
  • 无法通过 CGI 处理程序实现线程安全的情况。

要从分析中排除特定检查,您可以自定义默认检查配置文件或创建一个全新的配置文件。 您可能还希望执行对您的编码准则至关重要的检查。 查看我们的 Qodana 文档获取更多信息。

以上就是 Qodana 2022.3 EAP 的全部内容! 我们希望您喜欢这个新版本。 如果您对未来的博客主题有建议,或者想详细了解 Qodana 可以如何帮助您和您的业务,请在此处发表评论,在 Twitter 上提及我们,或发送电子邮件至 qodana-support@jetbrains.com 与我们联系。

祝您开发愉快并轻松保持代码整洁!

您的 Qodana 团队

 

本博文英文原作者:

Sue

Valerie Kuzmina

Discover more