我最近一直在研究 checkstyle,作为标准编码约定研究的一部分。尽管它看起来非常适合全新的项目,但它似乎对现有项目的采用存在巨大障碍,因为它似乎不提供仅检查新代码或编辑代码的方法。也许我错了?

如果您的代码库从未有过编码标准,那么一次性使整个代码库符合标准可能需要付出巨大的努力。随着代码的自然发展,允许它随着时间的推移逐步完成似乎是一种更合理的方法。但这对于 checkstyle 来说似乎不可能。

我认为这必须与源代码控制系统相结合才能成为可能。Checkstyle 可以实现这一点吗?或者还有其他工具可以提供此功能吗?

有帮助吗?

解决方案

据我所知,Checkstyle 旨在分析源代码,而不考虑其历史或修订。

添加这种功能意味着脚本检查样式分析,以向其提供代表增量的确切文件子集。

但是,某些类型的检查可能会在分析中失败或遗漏,例如 重复代码检查.

因此,对于这种增量分析,您不仅需要限制源集,还需要限制要执行的规则集,因为其中一些规则仅对所有源有意义。


那么,为什么不能对每个文件运行完整检查,然后根据源代码控制系统管理的更改来过滤结果呢?存在这样的东西吗?

据我所知,尤其是像这样的插件 eclipse-cs 对于日食:如果他们分析文件,他们将显示所有警告,即使源代码管理提到该文件自给定修订版以来尚未更改。

只有外部脚本才能执行此操作:
原理很简单(尽管执行时可能有点慢):

  • 对于每个文件,进行比较以检查是否已进行修改
  • 如果是,
    • 做一个 svn blame 使用包含最后更改的修订号来注释行。
    • 然后用checkstyle分析该文件。
  • 然后,该脚本可以过滤当前正在修改的行(或给定修订后修改的所有行)的警告。

其他提示

我们开发了 Checkstyle插件 for SCM-Manager ,一个管理git,subversion和mercurial资源库的工具。如果激活,则可以根据Checkstyle规则检查已提交的源代码。如果检查发现错误,则中止提交。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top