代码质量检测之checkstyle的安装使用

海燕技术栈 发表于 3月以前  | 总阅读数:310 次

安装使用

官方文档地址:https://checkstyle.sourceforge.io/

下载

下载地址:https://github.com/checkstyle/checkstyle/releases/

或使用maven引入:

<dependency>
    <groupId>com.puppycrawl.tools</groupId>
    <artifactId>checkstyle</artifactId>
    <version>10.12.7</version>
</dependency>

界面化运行

"D:\java17\bin\java.exe" -cp "D:\tool_configs\checkstyle-10.12.7-all.jar" com.puppycrawl.tools.checkstyle.gui.Main

运行界面如下:

打开一个.java文件

界面如下

认识左边的结构

COMPILATION_UNIT    1   0   COMPILATION_UNIT
    PACKAGE_DEF 1   0   package
    IMPORT  3   0   import
    IMPORT  4   0   import
    IMPORT  5   0   import
    IMPORT  6   0   import
    IMPORT  7   0   import
    IMPORT  8   0   import
    IMPORT  9   0   import
    IMPORT  10  0   import
    IMPORT  11  0   import
    IMPORT  12  0   import
    IMPORT  13  0   import
    IMPORT  14  0   import
    IMPORT  15  0   import
    IMPORT  16  0   import
    IMPORT  17  0   import
    IMPORT  18  0   import
    IMPORT  19  0   import
    IMPORT  20  0   import
    IMPORT  21  0   import
    IMPORT  22  0   import
    IMPORT  23  0   import
    IMPORT  24  0   import
    IMPORT  25  0   import
    IMPORT  26  0   import
    IMPORT  27  0   import
    IMPORT  28  0   import
    IMPORT  29  0   import
    IMPORT  30  0   import
    IMPORT  31  0   import
    IMPORT  33  0   import
    IMPORT  34  0   import
    IMPORT  35  0   import
    IMPORT  36  0   import
    IMPORT  37  0   import
    IMPORT  38  0   import
    CLASS_DEF   40  0   CLASS_DEF
    MODIFIERS   40  0   MODIFIERS
    LITERAL_PUBLIC  40  0   public
    LITERAL_CLASS   40  7   class
    IDENT   40  13  AIApp
    EXTENDS_CLAUSE  40  19  extends
    IDENT   40  27  Application
    OBJBLOCK    40  39  OBJBLOCK
    LCURLY  40  39  {
    METHOD_DEF  42  4   METHOD_DEF
    MODIFIERS   42  4   MODIFIERS
    TYPE    42  11  TYPE
    IDENT   42  16  checkCodeMenu
    LPAREN  42  29  (
    PARAMETERS  42  30  PARAMETERS
    RPAREN  42  53  )
    SLIST   42  54  {
    METHOD_DEF  51  4   METHOD_DEF
    METHOD_DEF  61  4   METHOD_DEF
    METHOD_DEF  84  4   METHOD_DEF
    METHOD_DEF  177 4   METHOD_DEF
    METHOD_DEF  231 4   METHOD_DEF
    METHOD_DEF  261 4   METHOD_DEF
    METHOD_DEF  297 4   METHOD_DEF
    METHOD_DEF  325 4   METHOD_DEF
    METHOD_DEF  365 4   METHOD_DEF
    METHOD_DEF  441 4   METHOD_DEF
    RCURLY  445 0   }

这是 Checkstyle GUI 解析的 Java 源文件的抽象语法树(AST)的部分内容。AST 是对代码结构的一种树形表示,它将源代码的结构以一种易于分析和处理的方式呈现。

以下是每个条目的解释:

  1. COMPILATION_UNIT: 表示整个 Java 编译单元,即一个 Java 文件。
  2. PACKAGE_DEF: 表示 Java 包的定义,即 package 语句。
  3. IMPORT: 表示导入语句,即 import 语句。
  4. CLASS_DEF: 表示 Java 类的定义,包括类的修饰符、类名、继承关系等。
  5. MODIFIERS: 表示修饰符,例如 public
  6. LITERAL_PUBLIC: 表示 public 关键字。
  7. LITERAL_CLASS: 表示 class 关键字。
  8. IDENT: 表示标识符,例如类名、方法名等。
  9. EXTENDS_CLAUSE: 表示类的继承关系,即 extends 关键字。
  10. OBJBLOCK: 表示代码块,包括类的主体。
  11. LCURLY: 表示左大括号 {
  12. METHOD_DEF: 表示方法的定义。
  13. TYPE: 表示数据类型。
  14. LPAREN: 表示左圆括号 (
  15. PARAMETERS: 表示方法的参数。
  16. RPAREN: 表示右圆括号 )
  17. SLIST: 表示语句块,包含在方法或代码块内的语句。
  18. RCURLY: 表示右大括号 }

这些条目组合在一起构成了 Java 源文件的结构。Checkstyle 使用 AST 来遍历和检查源代码,确保代码符合定义的规范。在这个例子中,可能是一个包含类定义和多个方法的 Java 文件。

checkstyle里面的Xpath Query是什么

Checkstyle 的 XPath Query 功能允许用户定义自定义规则并在代码中使用 XPath 表达式进行检查。这个功能允许开发者基于代码结构的 XPath 查询来定义检查规则,XPath 表达式用于定位和匹配源代码中的特定结构。以下是 Checkstyle XPath Query 的基本用法和示例

基本用法

XPath Query 的基本语法为

//XPath_Expression

其中,// 表示查找匹配的任意位置,XPath_Expression 是 XPath 表达式。

示例

查找所有类定义xpath //CLASS_DEF查找所有包含 System.out.println 的语句xpath //EXPR[matches(@text, 'System\.out\.println')]

使用属性

XPath 还支持使用元素的属性进行匹配。例如,可以使用 @token 属性匹配指定类型的元素。

//LITERAL[@token='abstract']

复合查询

可以使用逻辑运算符 andornot 来组合多个查询条件。

//CLASS_DEF[MODIFIERS/LITERAL_PUBLIC and not(MODIFIERS/LITERAL_STATIC)]

注意事项

XPath 查询功能需要在 Checkstyle 配置文件中启用。在配置文件中,使用 <module name="XPathCheck"/> 启用 XPath 检查器。xml <module name="XPathCheck"/>XPath 表达式通常基于 XML 结构,但在 Checkstyle 中,它用于匹配 AST(抽象语法树)中的代码结构。因此,XPath 表达式的使用方式可能与常规 XML 文档中的 XPath 表达式有所不同。Checkstyle 的 XPath Query 功能是强大的,但也需要一定的 XPath 知识。详细的 XPath 表达式语法和使用方法可以参考 XPath 的相关文档。

例子

让我们逐步解析这个表达式

/COMPILATION_UNIT/CLASS_DEF[./IDENT[@text='AIApp']]/OBJBLOCK/METHOD_DEF[./IDENT[@text='checkCodeMenu']]
/COMPILATION_UNIT

从根节点开始,查找名为 COMPILATION_UNIT 的元素。

/CLASS_DEF[./IDENT[@text='AIApp']]

在找到的 COMPILATION_UNIT 中,查找名为 CLASS_DEF 的子元素,并确保其中有一个子元素的名字为 IDENT 且其文本内容为 'AIApp'

/OBJBLOCK

在满足上述条件的 CLASS_DEF 中,查找名为 OBJBLOCK 的子元素。

/METHOD_DEF[./IDENT[@text='checkCodeMenu']]

OBJBLOCK 中,查找名为 METHOD_DEF 的子元素,并确保其中有一个子元素的名字为 IDENT 且其文本内容为 'checkCodeMenu'。这个 XPath Query 的整体作用是定位一个 Java 源代码文件中,包含一个类定义(CLASS_DEF)的 COMPILATION_UNIT,这个类的名字是 'AIApp',在这个类的 OBJBLOCK 中包含一个名为 'checkCodeMenu' 的方法(METHOD_DEF)。这种 XPath Query 可以用于 Checkstyle 中,作为自定义规则的一部分,用于检查代码中是否包含特定类和方法的定义,以确保符合团队的编码规范。

基于上面的步骤,我们就可以去定位代码了。

如何对Checkstyle进行简单配置

可以配置来检查和强制执行不同的编码规范和最佳实践。我们先来看看如何在IDEA中使用CheckStyle

下载插件

在idea的插件商店中安装下载CheckStyle-IDEA,如下图:

配置插件

进入editor->Inspections->搜索Checkstyle 全部勾上

修改检查配置

进入 Tools->Checkstyle

可以发现区域中包含了两部分的检测方案,分别是sun公司和Google的规范对应的配置。相关的介绍我们可以在官方文档中可以看到,地址分别是https://checkstyle.sourceforge.io/google_style.htmlhttps://checkstyle.sourceforge.io/sun_style.html

进行检测

在安装好了checkstyle之后,我们就可以在idea的界面看到相关的操作。

Alt text点击1处按钮,进入checkstyle的操作,选择2中的Google Checks,然后选择3代表的是启动分析,将会分析4对应的文件,最终将结果输出到窗口中。

分析结果

下面是一个简单Checkstyle 对 Java 代码进行了 Google 风格的检查,并给出了一系列的警告和错误


Checkstyle found 36 item(s) in 1 file(s)
YamlUtils.java : 36 item(s)
Package name 'com.demo123567.desktop.auto_tools.utils' must match pattern '^[a-z]+(\.[a-z][a-z0-9]*)*$'. (1:9) [PackageName]
缺少摘要javadoc。(6:0) [SummaryJavadoc]
'method def modifier' 缩进了4个缩进符,应为2个。(12:5) [Indentation]
'method def' 子元素缩进了8个缩进符,应为4个。(13:9) [Indentation]
'method def rcurly' 缩进了4个缩进符,应为2个。(14:5) [Indentation]
'method def modifier' 缩进了4个缩进符,应为2个。(16:5) [Indentation]
'method def' 子元素缩进了8个缩进符,应为4个。(17:9) [Indentation]
'method def' 子元素缩进了8个缩进符,应为4个。(18:9) [Indentation]
'method def rcurly' 缩进了4个缩进符,应为2个。(19:5) [Indentation]
'method def modifier' 缩进了4个缩进符,应为2个。(21:5) [Indentation]
'method def' 子元素缩进了8个缩进符,应为4个。(22:9) [Indentation]
'method def' 子元素缩进了8个缩进符,应为4个。(23:9) [Indentation]
'method def rcurly' 缩进了4个缩进符,应为2个。(24:5) [Indentation]
'method def modifier' 缩进了4个缩进符,应为2个。(26:5) [Indentation]
'method def' 子元素缩进了8个缩进符,应为4个。(27:9) [Indentation]
'method def rcurly' 缩进了4个缩进符,应为2个。(28:5) [Indentation]
'method def modifier' 缩进了4个缩进符,应为2个。(30:5) [Indentation]
'method def' 子元素缩进了8个缩进符,应为4个。(31:9) [Indentation]
'method def rcurly' 缩进了4个缩进符,应为2个。(32:5) [Indentation]
Javadoc的第一句缺少一个结束时期。(34:0) [SummaryJavadoc]
@标签应有非空说明。(37:0) [NonEmptyAtclauseDescription]
@标签应有非空说明。(38:0) [NonEmptyAtclauseDescription]
'method def modifier' 缩进了4个缩进符,应为2个。(40:5) [Indentation]
'method def' 子元素缩进了8个缩进符,应为4个。(41:9) [Indentation]
'method def rcurly' 缩进了4个缩进符,应为2个。(42:5) [Indentation]
'method def modifier' 缩进了4个缩进符,应为2个。(44:5) [Indentation]
'method def' 子元素缩进了8个缩进符,应为4个。(45:9) [Indentation]
'method def rcurly' 缩进了4个缩进符,应为2个。(46:5) [Indentation]
'method def modifier' 缩进了4个缩进符,应为2个。(48:5) [Indentation]
WhitespaceAround: '{' is not preceded with whitespace. (48:66) [WhitespaceAround]
'method def' 子元素缩进了8个缩进符,应为4个。(49:9) [Indentation]
',' 后应有空格。(49:61) [WhitespaceAfter]
'method def' 子元素缩进了8个缩进符,应为4个。(50:9) [Indentation]
'method def rcurly' 缩进了4个缩进符,应为2个。(51:5) [Indentation]
本行字符数 1,495个,最多:100个。(57:0) [LineLength]
注释应与第48行代码同样缩进4个缩进符,而不是0个。(65:1) [CommentsIndentation]

以下是对每个问题的简要解释:

  1. Package name 'com.demo123567.desktop.auto_tools.utils' must match pattern '^[a-z]+(.[a-z][a-z0-9])$'.
    • 包名不符合规范,应该是小写字母开头的小写字母和数字的组合。
  2. 缺少摘要 javadoc。
    • 在某个地方缺少了对方法或类的摘要 Javadoc 注释。
  3. 'method def modifier' 缩进了 4 个缩进符,应为 2 个。
    • 方法定义的修饰符缩进不符合规范,应该缩进 2 个空格。
  4. 'method def' 子元素缩进了 8 个缩进符,应为 4 个。
    • 方法定义的子元素(参数、方法体等)缩进不符合规范,应该缩进 4 个空格。
  5. 'method def rcurly' 缩进了 4 个缩进符,应为 2 个。
    • 方法定义的右大括号缩进不符合规范,应该缩进 2 个空格。
  6. Javadoc 的第一句缺少一个结束句点。
    • Javadoc 注释的第一句应该以一个结束句点结尾。
  7. @标签应有非空说明。
    • Javadoc 注释中的 @ 标签应该有非空说明。
  8. WhitespaceAround: '{' is not preceded with whitespace.
    • { 前面没有空格。
  9. ',' 后应有空格。
    • 逗号后应该有一个空格。
  10. 本行字符数 1,495 个,最多:100 个。
    • 一行代码的长度超过了最大限制。
  11. 注释应与第 48 行代码同样缩进 4 个缩进符,而不是 0 个。
    • 注释的缩进不符合规范,应该与相应的代码同样缩进。

这些问题主要涉及到代码格式、缩进、Javadoc 注释等方面的规范。我们可以根据这些提示逐一修复代码,以确保代码符合 Google 的编码规范。

本文由微信公众号海燕技术栈原创,哈喽比特收录。
文章来源:https://mp.weixin.qq.com/s/gMBIoB8v3wzWa0Gv6Z1ocw

 相关推荐

刘强东夫妇:“移民美国”传言被驳斥

京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。

发布于:8月以前  |  808次阅读  |  详细内容 »

博主曝三大运营商,将集体采购百万台华为Mate60系列

日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。

发布于:8月以前  |  770次阅读  |  详细内容 »

ASML CEO警告:出口管制不是可行做法,不要“逼迫中国大陆创新”

据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。

发布于:8月以前  |  756次阅读  |  详细内容 »

抖音中长视频App青桃更名抖音精选,字节再发力对抗B站

今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。

发布于:8月以前  |  648次阅读  |  详细内容 »

威马CDO:中国每百户家庭仅17户有车

日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。

发布于:8月以前  |  589次阅读  |  详细内容 »

研究发现维生素 C 等抗氧化剂会刺激癌症生长和转移

近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。

发布于:8月以前  |  449次阅读  |  详细内容 »

苹果据称正引入3D打印技术,用以生产智能手表的钢质底盘

据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。

发布于:8月以前  |  446次阅读  |  详细内容 »

千万级抖音网红秀才账号被封禁

9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...

发布于:8月以前  |  445次阅读  |  详细内容 »

亚马逊股东起诉公司和贝索斯,称其在购买卫星发射服务时忽视了 SpaceX

9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。

发布于:8月以前  |  444次阅读  |  详细内容 »

苹果上线AppsbyApple网站,以推广自家应用程序

据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。

发布于:8月以前  |  442次阅读  |  详细内容 »

特斯拉美国降价引发投资者不满:“这是短期麻醉剂”

特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。

发布于:8月以前  |  441次阅读  |  详细内容 »

光刻机巨头阿斯麦:拿到许可,继续对华出口

据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。

发布于:8月以前  |  437次阅读  |  详细内容 »

马斯克与库克首次隔空合作:为苹果提供卫星服务

近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。

发布于:8月以前  |  430次阅读  |  详细内容 »

𝕏(推特)调整隐私政策,可拿用户发布的信息训练 AI 模型

据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。

发布于:8月以前  |  428次阅读  |  详细内容 »

荣耀CEO谈华为手机回归:替老同事们高兴,对行业也是好事

9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。

发布于:8月以前  |  423次阅读  |  详细内容 »

AI操控无人机能力超越人类冠军

《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。

发布于:8月以前  |  423次阅读  |  详细内容 »

AI生成的蘑菇科普书存在可致命错误

近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。

发布于:8月以前  |  420次阅读  |  详细内容 »

社交媒体平台𝕏计划收集用户生物识别数据与工作教育经历

社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”

发布于:8月以前  |  411次阅读  |  详细内容 »

国产扫地机器人热销欧洲,国产割草机器人抢占欧洲草坪

2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。

发布于:8月以前  |  406次阅读  |  详细内容 »

罗永浩吐槽iPhone15和14不会有区别,除了序列号变了

罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。

发布于:8月以前  |  398次阅读  |  详细内容 »
 目录