PMD 6.35.0 发布,多语言静态代码自动分析工具

来源: OSCHINA
编辑: Alias_Travis
2021-06-01

PMD 是一个代码分析器,能够帮助发现常见的编程问题,比如未使用的变量、空的 catch 块、不必要的对象创建等等。最初仅支持 Java 代码,目前还可支持 JavaScript、Salesforce.com Apex 和 Visualforce、PLSQL、Apache Velocity、XML 和 XSL 。

PMD 6.35.0 正式发布,本次更新内容如下:

Javascript 模块现在至少需要 Java 8:

我们使用了最新版本的 JavaScript 实现 Rhino 用于解析 JavaScript 代码,至少需要 Java 8。因此我们决定将 pmd-javascript 模块也升级到 Java 8。这意味着,从现在开始,需要一个 Java 8 或更高版本的运行时,以便来分析 JavaScript 代码。PMD 核心仍然只需要 Java 7。

新规则:

此版本附带 3 个新的 Java 规则:

  • [JUnit5TestShouldBePackagePrivate](<https://pmd.github.io/pmd-6.35.0/pmd_rules_java_bestpractices.html#junit5testshouldbepackageprivate>) 强制执行以下约定:JUnit 5 测试应该具有最小的可见性。您可以像下面这样尝试此规则:

    <rule ref="category/java/bestpractices.xml/JUnit5TestShouldBePackagePrivate" />

  • [CognitiveComplexity](<https://pmd.github.io/pmd-6.35.0/pmd_rules_java_design.html#cognitivecomplexity>) 使用 cognitive complexity 指标来查找过于复杂的代码。该度量标准以多种方式改进了类似的循环复杂性,可以像下面这样尝试此规则:

    <rule ref="category/java/design.xml/CognitiveComplexity" />

  • [MutableStaticState](<https://pmd.github.io/pmd-6.35.0/pmd_rules_java_design.html#mutablestaticstate>) 查找非最终的非私有静态字段。这些字段破坏了封装,因为可以

    在程序中的任何位置修改这些字段。可以像下面这样尝试此规则:

    <rule ref="category/java/design.xml/MutableStaticState" />

修改后的规则:

  • Java 规则 CompareObjectsWithEquals 现在有一个新属性 typesThatCompareByReference。通过这个属性,你可以配置应该通过引用进行比较被列入白名单的类型。默认情况下,java.lang.Enum 和 java.lang.Class 是允许的,但是你可以在这里添加自定义类型。 此外,现在还允许对常量进行比较;

废弃的规则:

  • Java 规则 DefaultPackage 已经被弃用,取而代之的是 CommentDefaultAccessModifier;
  • Java 规则 CloneThrowsCloneNotSupportedException 已被弃用,没有替换;

修复的问题:

  • apex
    • #3183: [apex] ApexUnitTestMethodShouldHaveIsTestAnnotation 在帮助方法中出现误报;
    • #3243: [apex] 遍历 AST 时正确处理 findBoundary 核心;
  • core
    • #2639: [core] 如果路径中的目录不存在,则不创建 PMD CLI 输出文件;
    • #3196: [core] 废弃 ThreadSafeReportListener;
  • doc
    • #3230: [doc] 删除语言索引页的 "Edit me" 按钮;
  • dist
    • #2466: [dist] 分发存档不包括所有批处理脚本;
  • java
    • #3269: [java] 修复 MethodTypeResolution 中的 NPE;
  • java-design
    • #2780: [java] 文档中的 DataClass 例子导致了错误的漏报;
    • #2987: [java] 新规则:公共和受保护的静态字段必须是最终的;
    • #2329: [java] Java 的 Cognitive complexity 规则;
  • javascript:
    • #699: [javascript] 更新 Rhino 库至 1.7.13;
    • #2081: [javascript] 解析 Javascript 文件时出现 OutOfMemoryError 故障;
    • ……

更多详情可查看:https://github.com/pmd/pmd/releases/tag/pmd_releases%2F6.35.0

展开阅读全文
5 收藏
分享
加载中
更多评论
0 评论
5 收藏
分享
返回顶部
顶部