`

【CodeReview Automation】编写自己的PMD规则

 
阅读更多
      什么样的代码叫做一个好的代码,相信每个人都有自己心中的一杆秤,而繁荣的Java社区也给了我们很多优秀的代码异味检测工具,Checkstyle,Findbug,PMD就是广为人知的几个。但是针对不同的问题,其中的异味和优秀实践各有不同,为了能够更好的Review迎合具体问题的代码,就需要我们能够在对问题有了了解之后,实现一些自己独有的代码检查规则,那么,以后我们针对这一问题的Code Review效率就会有明显提升。

PMD的工作原理
      PMD通过JavaCC 解析器把源代码解析为一颗AST(Abstract Syntax Tree),然后通过对这个语法树的特征辨识,从而识别出这份源代码是否有自定义的异味。在PMD的代码包中包含了通过源代码一个生成AST的小工具, 启动该工具,我们就可以查看一个类的AST结构了(在Windows直接运行bin目录下的designer.bat, Unix系统运行./run.sh designer)


编写一个自己的规则
1、定义规则
     没有任何行为的Enum都是坏味道
2、找出规则在AST中的特征
     AST是一个高度结构化的数据,代码上的变化都会在AST结构上留下痕迹,通过PMD designer可以发现,有行为的Enum和没有行为的Enum之间最大的差别就是在EnumBody这个节点下面没有任何方法声明语句MehodDeclaration的存在。
3、编写代码
     编写PMD的Rule必须引入PMD的包,
<dependency>
            <groupId>pmd</groupId>
            <artifactId>pmd</artifactId>
            <version>${pmd.version}</version>
            <scope>compile</scope>
        </dependency>

新的JavaRule必须继承AbstractJavaRule。
public class EnumWithoutBehavior extends AbstractJavaRule {
    @Override
    public Object visit(ASTEnumBody node, Object data) {
        if (!hasMethodDeclared(node)) addViolation(data, node);
        return data;
    }

    private boolean hasMethodDeclared(ASTEnumBody node) {
        return !node.findChildrenOfType(ASTMethodDeclaration.class).isEmpty();
    }
}


4、配置规则信息
代码写完之后,需要配置相应的rulesets.xml,该文件主要就是配置PMD运行时执行哪些规则,当触犯规则的时候应该显示什么样的错误信息
<?xml version="1.0"?>
<ruleset name="Mars Rover Rules"
         xmlns="http://pmd.sf.net/ruleset/1.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
        xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
    <description>
    </description>
    <rule name="EnumWithoutBehavior"
          message="Enumeration without any behavior"
          class="com.thoughtworks.cerberus.marsrover.java.EnumWithoutBehavior">
        <description></description>
        <priority>3</priority>
        <example></example>
    </rule>
</ruleset>
  • 大小: 67.7 KB
分享到:
评论

相关推荐

    PMD的规则文件

    **PMD规则文件详解** PMD(英文全称:Poor Man's Dynamic Code Analyzer)是一款开源的静态代码分析工具,主要用于检测Java源代码中可能存在的问题,如潜在的bug、不良的习惯以及可读性差的代码等。在软件开发过程...

    PMD集成myeclipse及PMD规则说明

    **集成PMD到MyEclipse** 是将PMD的功能嵌入到MyEclipse集成开发环境中,使得开发者在编写代码的同时就能实时接收到关于代码质量的反馈。这样可以避免在项目后期发现大量代码问题,节省时间和资源。MyEclipse作为一款...

    sonar5.4-PMD规则插件

    在给定的标题"sonar5.4-PMD规则插件"中,我们关注的是SonarQube 5.4版本中针对PMD(Poor Man's Static Code Analyzer)的插件。PMD是开源的Java源代码分析器,能够发现潜在的代码问题,如冗余代码、未使用的变量、...

    PMD规则集说明(java包)中文

    java代码静态分析工具 - PMD规则集说明(java包)中文 自己手工搜集,中英文说明,参数说明等

    JAVA PMD规则 详解

    通过一系列预定义的规则集,PMD可以帮助开发者编写出更高质量、更易维护的代码。BasicRules是PMD提供的一组核心规则,包含了每个开发人员都应该遵循的基本编程实践。 #### 二、重要规则解析 1. **EmptyCatchBlock...

    PMD工具使用说明中文版

    用户可以通过编写 XML 文件来定义自己的规则。PMD 规则编写需要满足一定的格式和语法要求,否则可能会导致规则无法生效。 4. PMD 的优点 PMD 是一款功能强大且易于使用的静态分析工具。PMD 可以帮助开发者检测 ...

    PMD_ruleset规则配置文件

    PMD_ruleset规则文件,已经最基本的验证进行了导入。在Eclipse导入即可

    静态分析工具PMD规则翻译合集

    4. **代码大小规则(Code Size Rules)**:代码大小规则集用来发现代码行数过多、方法过长、类过复杂等问题,以鼓励编写简洁且易于理解的代码。 5. **有争议的规则(Controversial Rules)**:这些规则由于某些原因...

    pmd-rules:自定义PMD规则

    **PMD规则详解:自定义PMD规则在Motech中的应用** PMD(Pattern Matching for Java)是一款开源的静态代码分析工具,它主要用于检测Java源代码中的潜在问题,如未使用的变量、空的循环体、复杂的表达式等。PMD通过...

    eclipse代码检查工具PMD规则列表

    自己整理的PMD检查的各个规则说明,其中打○的是我自己用的规则,大家自己按实际需要选择吧,有不对的地方请多多指教。

    PMD检测规则

    PMD是一款开源的静态代码检测工具,可以检查代码的质量问题,文件是对PMD检测规则进行说明,解压密码:PMD。

    代码审查code review.7z

    这里的资源主要是讲述了代码审查的必要性。...为什么要进行Code Review?  如何做Code Review? 如何使用工具进行Code Review? CheckStyle FindBugs PMD 使用工具进行Code Review的局限性 我们可以做得更好

    PMD的使用说明-简介、工作原理、安装运行、规则等

    如果预定义的规则不能满足特定需求,开发者可以通过实现PMD的Rule接口来创建自己的规则。这涉及到解析AST节点、定义匹配逻辑以及生成报告信息。 7. 结束语 PMD作为一款强大的静态代码分析工具,能够显著提高代码...

    在eclipse中修改checkstyle和pmd、FindBugs规则集的方法

    ### 在Eclipse中修改Checkstyle、PMD及FindBugs规则集的方法 #### 一、Checkstyle规则集的修改 **1. 替换Checkstyle规则集** 在Eclipse中更新Checkstyle规则集通常涉及几个步骤: - **备份现有配置**:首先确保...

    PMDPlugin for IDEA IDEA PMD插件

    1. **实时检查**:在IDEA中安装PMDPlugin后,开发者可以在编写代码的同时接收到PMD的检查结果,无需等待编译或构建过程,及时发现问题。 2. **定制规则集**:PMD支持自定义规则集,允许开发者根据团队的编码规范和...

    pmd-rulesets:Java应用程序的PMD规则

    总结,"pmd-rulesets"项目提供的定制PMD规则对于使用Undertow的Java开发者来说,是一个宝贵的资源,它可以帮助他们编写出更高质量、更符合框架最佳实践的代码。通过理解和应用这些规则,开发者可以确保他们的应用...

    在eclipse中修改checkstyle和pmd规则集的方法

    本文将详细介绍如何在Eclipse中修改Checkstyle和PMD的规则集。 首先,让我们了解这两个工具的基础知识: **Checkstyle** 是一个静态代码分析工具,它根据预定义或自定义的编码规范检查Java源代码,以发现潜在的...

    pmd代码检查工具使用

    * 代码 review:使用 PMD 来检测代码中的问题,以便在代码 review 过程中更好地发现问题。 * 自动化构建:使用 PMD 来自动检测代码中的问题,并在自动化构建过程中进行检查。 * 代码质量控制:使用 PMD 来检测代码中...

    PMD集成eclipse插件

    2. **自定义规则**: 开发者可以编写自己的规则,扩展PMD的功能,以适应特定项目的需求。 总的来说,**PMD集成Eclipse插件** 是一个强大的工具,能有效提升代码质量。通过熟练使用和配置,可以更好地遵循编程最佳...

    在eclipse中修改java格式化模板、checkstyle和pmd规则集的方法

    本教程将详细介绍如何在 Eclipse 中配置和替换 Checkstyle、PMD 的规则集,以及如何修改代码格式化模板。 首先,我们来了解一下 Checkstyle。Checkstyle 是一个开源项目,它提供了对 Java 代码风格的检查,包括但不...

Global site tag (gtag.js) - Google Analytics