​打造企业自己代码规范IDEA插件(中)

本文介绍了如何利用PMD和AST开发自定义代码规范,通过XPath规则检查代码中如System.out的日志输出。文章详细阐述了规则编写、错误提示、使用PMD-Designer验证规则以及集成到IDEA插件的过程,并提供了一个实际示例。读者可参考相关代码链接进一步实践。
摘要由CSDN通过智能技术生成

一些基本概念

在开始独立研发公司自己的代码规范检查规则之前,先介绍一些相关的基本概念。阿里巴巴代码规范很多规则其实都是基于开源框架PMD进行的研发。PMD用官方的话语介绍来说:PMD是一个源代码分析器。它可以发现常见的编程缺陷,如未使用的变量、空catch块、不必要的对象创建等。它支持多种语言。它可以用自定义规则进行扩展。它使用JavaCC和Antlr将源文件解析为抽象语法树(AST),并对其运行规则以查找冲突。规则可以用Java编写,也可以使用XPath查询。开源代码库:https://github.com/pmd/pmd

这里涉及到一个很关键的概念——AST 抽象语法树(Abstract Syntax Tree)。AST运用场景其实非常多,日常我们研发过程中错误提示、代码高亮、代码格式化、代码转译等等实现的基础都基于AST。简单说,会通过词法分析和语法分析将代码转化成一种类似树样层次结构来进行描述,当然这种描述可以用XML格式。文字描述比较抽象,不妨看一个“Hello world”的具体AST语法树(Java 1.8),这样就很容易进行理解了。

在这里插入图片描述

另外一个概念XPath 是一门在XML 文档中查找信息的语言。本身和代码解析没有关系,但当AST通过XML格式描述时,XPath能够很好完成对相关节点进行查找。两者的结合就能进行违规代码的检查,这就是XPath规则代码规范检查基本原理。此外,与其配套的PMD-Designer规则可视化工具也很好用。

例如阿里巴巴代码规范中 PackageNamingRule 就是非常典型的XPath规则。包名只能由小写字母、数字来组成,具体的XPath:

private static final String XPATH = "//PackageDeclaration/Name"
    + "[not (matches(@Image, '^[a-z0-9]+(\\.[a-z][a-z0-9]*)*$'))]"; 

下面先写个规则的例子来感受下自定义规则具体的操作;从检查代码中System.out 类似的日志输出开始。

Example :检查代码中System.out 类似的日志输出。

步骤一,运用PMD-Designer 来辅助编写具体XPath的检查规则;这个工具也可以验证各种代码写法下,规则是否都能起到很好的作用。最终XPath 具体规则如下:

//Name[starts-with(@Image, 'System.out.print') or starts-with(@Image, 'System.err.print')]

步骤二,新建一个具体的规则类,继承AbstractXpathRule ;其中AbstractXpathRule 本身是继承 PMD 中 XPathRule,主要扩展了多语言的设计。详细如下:

package com.alibaba.p3c.pmd.lang.java.rule.
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值