本文档介绍了 The Algorithms Java 仓库中使用的代码质量工具和标准。这些工具有助于维护代码质量、强制执行编码规范、识别潜在错误并确保整个代码库的一致格式。
有关整体项目配置的信息,请参阅项目配置。
该仓库采用了多种自动化工具来确保代码质量
来源: checkstyle.xml pmd-exclude.properties .clang-format .github/workflows/clang-format-lint.yml
Checkstyle 是一款开发工具,可帮助程序员编写符合编码标准的 Java 代码。它自动化了检查 Java 代码的过程,使人们免于重复性工作。
该仓库使用基于 Sun 编码规范的自定义 Checkstyle 配置,该配置在 checkstyle.xml 中定义。该配置的严重级别设置为“error”,这意味着违规将导致构建失败。
Checkstyle 强制执行的关键规则
配置文件中目前有几条规则被注释掉,并标记有 TODO 注释,表明它们未来可能会被强制执行。
PMD 是一款源代码分析工具,用于查找常见的编程缺陷,例如未使用的变量、空 catch 块、不必要的对象创建和复杂的代码。
该仓库包含一个 PMD 排除文件 pmd-exclude.properties,其中指定了要从 PMD 分析中排除的类和规则。这有助于避免误报或标准规则不适用于特定代码的情况。
排除文件主要针对许多类排除了 UselessParentheses 规则。此规则会标记不必要的括号,但在某些数学或复杂表达式中,即使不是严格必需的,额外的括号也可能提高可读性。
| 包类型 | 被排除的类示例 |
|---|---|
| 密码算法 | AffineCipher、DES、RSA |
| 数据结构 | AdjacencyMatrixGraph、FibonacciHeap、DoublyLinkedList |
| 数学算法 | Complex、Gaussian、LinearDiophantineEquationsSolver |
| 排序算法 | CircleSort、DutchNationalFlagSort、WiggleSort |
排除配置如下所示
com.thealgorithms.ciphers.DES=UselessParentheses
com.thealgorithms.datastructures.lists.DoublyLinkedList=UselessParentheses
来源: pmd-exclude.properties1-65
Clang Format 是一款根据可配置样式指南自动格式化代码的工具。尽管其名称源于 C/C++ 生态系统,但它也支持 Java 格式化。
该仓库在 .clang-format 中使用了详细的 Clang Format 配置,指定了代码的格式化方式。这确保了整个代码库的一致代码风格。
主要格式化规则包括
该仓库使用 GitHub Actions 自动检查所有代码是否遵循 Clang Format 规则,这些规则定义在 .github/workflows/clang-format-lint.yml 中。
此工作流在每次推送到仓库和拉取请求时运行,确保 src 目录中的所有 Java 文件都遵循格式化规则。
来源: .clang-format1-137 .github/workflows/clang-format-lint.yml1-17
虽然共享文件中未提供 SpotBugs 的具体配置文件,但它在构建系统图中被提及为项目中使用的代码质量工具之一。
SpotBugs 检查 Java 字节码以检测以下缺陷模式:
代码质量工具已集成到开发工作流中,以确保所有贡献的代码质量一致。
仓库对代码质量的承诺体现在类的实现中。让我们看看质量工具强制执行的一些模式:
工具类遵循一致的模式,使用 final 类修饰符和私有构造函数
类和方法使用 Javadoc 进行了充分文档化
每个实现类都有使用 JUnit Jupiter 的相应测试类
来源: src/main/java/com/thealgorithms/bitmanipulation/NonRepeatingNumberFinder.java1-36 src/main/java/com/thealgorithms/bitmanipulation/NumbersDifferentSigns.java1-31 src/test/java/com/thealgorithms/bitmanipulation/NonRepeatingNumberFinderTest.java1-37
Checkstyle、PMD、SpotBugs 和 Clang Format 的结合为 The Algorithms Java 仓库维护高质量代码提供了一个全面的系统。这些工具强制执行一致的编码风格,检测潜在错误,确保遵循最佳实践,并维护可读、文档良好的代码。
通过将这些工具集成到 CI 流水线中,该项目确保所有贡献都符合既定的质量标准,为用户和贡献者创建了一个更易于维护和可靠的代码库。