effectivejava:基于 JavaParser 的代码检查与分析工具项目

Run queries on your Java code to check if it meets the criteria suggested by the book Effective Java. And some others.

分支6Tags3
当前项目代码仓暂无内容

【有效 Java 检查工具】

构建状态

有效 Java 是一个用于检查 Java 代码库的工具,您可以以三种不同的方式使用它:

  • 作为 Java 语法检查器。只需指定要检查的目录,它就会输出一系列警告和改进建议。
  • 通过命令行运行查询。它可以告诉您代码库中使用的单例类型,或者有多少构造函数具有10个或更多参数。这种模式可以轻松与其他工具集成。
  • 运行交互式查询。这允许一次性解析代码库,然后运行不同查询来发现有关其有趣的事实。

该项目命名为 "有效 Java" ,因为许多查询和检查源自阅读《Effective Java》一书。还将实现其他查询(欢迎提出您喜欢的查询!)。

在阅读那本书时,我认为虽然许多原则是众所周知的,但在大型代码库中应用它们却很少见。我认为在实践中应用这些原则比看起来更难,而这样的工具可以帮助不断改进代码库。

如何最简单地安装?

发布页面 下载独立的 JAR 文件。 无需依赖项,所有内容都已打包在 JAR 文件中。 请随意重命名(effectivejava-0.1.0-SNAPSHOT-standalone.jar 实在有些冗长...)

代码检查模式:如何使用

只需运行:

# 此命令生成 JAR 文件
lein jar
# 注意 0.1.3 是当前版本,将来可能会更改
java -jar effectivejava-0.1.3-SNAPSHOT-standalone.jar -l -d "<myJavaProjectDir>"

您可能会看到类似于以下的输出:

org.springframework.jdbc.core.SqlInOutParameter : This class has too many constructors (7). Consider using static factory methods or the Builder pattern

如果在代码库根目录下运行此命令,可以省略 -d 选项。

命令行模式:如何使用

假设您想要知道哪些类有5个或以上构造函数,可以运行以下命令:

java -jar effectivejava-0.1.3-SNAPSHOT-standalone.jar -q mc -d "<myJavaProjectDir>" -t 5

您可以期待类似的输出:

Considering 109 Java files
japa.parser.ast.expr.ArrayCreationExpr  :  5
japa.parser.ast.body.MethodDeclaration  :  5
japa.parser.ast.body.BaseParameter  :  5
japa.parser.ast.body.FieldDeclaration  :  5

交互模式:如何使用(开发中!)

可以通过 -i 选项启动交互模式。

java -jar effectivejava-0.1.3-SNAPSHOT-standalone.jar -i

典型的交互可能如下所示:

> load "."
Loading .
Java files loaded: 440
> mc th 5
Command not implemented:  :MC

如最后一行所示,虽然主要逻辑已经存在,但我们仍缺少一些部分。 这将很快得到修复。

可以运行哪些查询?

我刚刚开始,所以目前只实现了少数查询:

  • _mc=多个构造函数_: 查找包含与给定阈值相同或更多数量构造函数的类
  • _mcp=构造函数参数过多_: 查找包含与给定阈值相同或更多数量参数的构造函数
  • _st=单例类型_: 检查类型是否实现单例模式,并区分三种类型(公共字段,静态工厂方法,单例枚举)
  • _u=实用程序类_: 查找只有静态方法的类,并确保它们恰好有一个不带参数的私有构造函数

已实施的有效 Java(书籍)项目

项目 状态
项目 1 完成
项目 2 待办
项目 3 完成
项目 4 完成
项目 5 待办
项目 6 待办
项目 7 完成
项目 8 计划于v0.2
项目 9 计划于v0.2
项目 10 完成
项目 11 待办
...项目 78 待办

开发信息

项目是用 Clojure 编写的,使用了名为 JavaParser 的 Java 库。

还需要 Leiningen,Clojure 的构建工具。它应该会为您下载 Clojure。

开发指南

我们使用 kibiteastwood 监控代码质量。

运行 eastwood 时排除无限使用命名空间的检查:

lein eastwood "{:exclude-linters [:unlimited-use]}"

为了验证代码格式正确,使用 cljfmt。可按以下方式运行:

# 验证潜在的样式问题
lein cljfmt check
# 自动修复它们
lein cljfmt fix

我们使用 lein-ancient 来检查我们的依赖项是否最新。

与这本书有什么关系?

我在读这本书,很多建议在理论上似乎很显然,但我猜在我的大型代码库中可能隐藏了一些违规情况。我很好奇有多少违规行为,并且需要一种自动化的方式来找到它们。 我还想学习 Clojure。 而且我有个空闲的周日。 所以...

还有什么呢?

希望你喜欢我的这个小项目。请随时打开问题并提问!

贡献者

David Ortiz 是常规贡献者:他开始修复 bug,设置 Travis 并提供了许多其他改进。

项目介绍

Run queries on your Java code to check if it meets the criteria suggested by the book Effective Java. And some others.

定制我的领域