什么样的代码叫做一个好的代码,相信每个人都有自己心中的一杆秤,而繁荣的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(英文全称:Poor Man's Dynamic Code Analyzer)是一款开源的静态代码分析工具,主要用于检测Java源代码中可能存在的问题,如潜在的bug、不良的习惯以及可读性差的代码等。在软件开发过程...
**集成PMD到MyEclipse** 是将PMD的功能嵌入到MyEclipse集成开发环境中,使得开发者在编写代码的同时就能实时接收到关于代码质量的反馈。这样可以避免在项目后期发现大量代码问题,节省时间和资源。MyEclipse作为一款...
在给定的标题"sonar5.4-PMD规则插件"中,我们关注的是SonarQube 5.4版本中针对PMD(Poor Man's Static Code Analyzer)的插件。PMD是开源的Java源代码分析器,能够发现潜在的代码问题,如冗余代码、未使用的变量、...
java代码静态分析工具 - PMD规则集说明(java包)中文 自己手工搜集,中英文说明,参数说明等
通过一系列预定义的规则集,PMD可以帮助开发者编写出更高质量、更易维护的代码。BasicRules是PMD提供的一组核心规则,包含了每个开发人员都应该遵循的基本编程实践。 #### 二、重要规则解析 1. **EmptyCatchBlock...
用户可以通过编写 XML 文件来定义自己的规则。PMD 规则编写需要满足一定的格式和语法要求,否则可能会导致规则无法生效。 4. PMD 的优点 PMD 是一款功能强大且易于使用的静态分析工具。PMD 可以帮助开发者检测 ...
PMD_ruleset规则文件,已经最基本的验证进行了导入。在Eclipse导入即可
4. **代码大小规则(Code Size Rules)**:代码大小规则集用来发现代码行数过多、方法过长、类过复杂等问题,以鼓励编写简洁且易于理解的代码。 5. **有争议的规则(Controversial Rules)**:这些规则由于某些原因...
**PMD规则详解:自定义PMD规则在Motech中的应用** PMD(Pattern Matching for Java)是一款开源的静态代码分析工具,它主要用于检测Java源代码中的潜在问题,如未使用的变量、空的循环体、复杂的表达式等。PMD通过...
自己整理的PMD检查的各个规则说明,其中打○的是我自己用的规则,大家自己按实际需要选择吧,有不对的地方请多多指教。
PMD是一款开源的静态代码检测工具,可以检查代码的质量问题,文件是对PMD检测规则进行说明,解压密码:PMD。
这里的资源主要是讲述了代码审查的必要性。...为什么要进行Code Review? 如何做Code Review? 如何使用工具进行Code Review? CheckStyle FindBugs PMD 使用工具进行Code Review的局限性 我们可以做得更好
如果预定义的规则不能满足特定需求,开发者可以通过实现PMD的Rule接口来创建自己的规则。这涉及到解析AST节点、定义匹配逻辑以及生成报告信息。 7. 结束语 PMD作为一款强大的静态代码分析工具,能够显著提高代码...
### 在Eclipse中修改Checkstyle、PMD及FindBugs规则集的方法 #### 一、Checkstyle规则集的修改 **1. 替换Checkstyle规则集** 在Eclipse中更新Checkstyle规则集通常涉及几个步骤: - **备份现有配置**:首先确保...
1. **实时检查**:在IDEA中安装PMDPlugin后,开发者可以在编写代码的同时接收到PMD的检查结果,无需等待编译或构建过程,及时发现问题。 2. **定制规则集**:PMD支持自定义规则集,允许开发者根据团队的编码规范和...
总结,"pmd-rulesets"项目提供的定制PMD规则对于使用Undertow的Java开发者来说,是一个宝贵的资源,它可以帮助他们编写出更高质量、更符合框架最佳实践的代码。通过理解和应用这些规则,开发者可以确保他们的应用...
本文将详细介绍如何在Eclipse中修改Checkstyle和PMD的规则集。 首先,让我们了解这两个工具的基础知识: **Checkstyle** 是一个静态代码分析工具,它根据预定义或自定义的编码规范检查Java源代码,以发现潜在的...
* 代码 review:使用 PMD 来检测代码中的问题,以便在代码 review 过程中更好地发现问题。 * 自动化构建:使用 PMD 来自动检测代码中的问题,并在自动化构建过程中进行检查。 * 代码质量控制:使用 PMD 来检测代码中...
2. **自定义规则**: 开发者可以编写自己的规则,扩展PMD的功能,以适应特定项目的需求。 总的来说,**PMD集成Eclipse插件** 是一个强大的工具,能有效提升代码质量。通过熟练使用和配置,可以更好地遵循编程最佳...
本教程将详细介绍如何在 Eclipse 中配置和替换 Checkstyle、PMD 的规则集,以及如何修改代码格式化模板。 首先,我们来了解一下 Checkstyle。Checkstyle 是一个开源项目,它提供了对 Java 代码风格的检查,包括但不...