查看原文
其他

版本更新 | Qodana 2022.3 EAP :支持 .NET 和 Go,添加 100 多项新检查

Qodana JetBrains 2023-11-05


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


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


我们全新的 linter 汇集了 Rider 和 GoLand 的所有智能功能,使您能够发现异常代码和潜在错误、消除死代码、改进整体代码结构并在所有 .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 可以如何帮助您和您的业务,请与我们联系:

  • Qodana 产品团队(英文): 

    qodana-support@jetbrains.com

  • 中文销售支持: 

    sales.cn@jetbrains.com

  • 中文技术支持: 

    support.cn@jetbrains.com


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


您的 Qodana 团队


本博文英文原作者:Valerie Kuzmina


相关阅读

关于 Qodana


Qodana 是一款代码质量监控平台,可用于评估您拥有、协作或购买的代码的完整性。它将您所喜爱的 JetBrains IDE 中的所有智能功能以及诸如克隆检测和许可证审查等项目级检查引入到您的 CI/CD 管道中。


进一步了解 Qodana

⏬ 戳「阅读原文」了解更多信息

继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存