我最近开始帮助一个年轻的团队帮助改进他们的开发实践,并希望他们在每次提交之前运行checkstyle。不幸的是,他们的代码充满了错误,实现它的唯一可扩展方法是每次都在一小部分文件上运行checkstyle。
从战略上讲,我想只对那些在VCS中修改过的文件运行checkstyle。我写了一个gradle脚本来实现这一点,但它似乎没有用。任何人都有关于如何实现这一目标的提示?
apply plugin: 'checkstyle'
def getChangedFiles = { ->
try {
def stdout = new ByteArrayOutputStream()
exec {
commandLine 'git', 'diff', '--name-only'
standardOutput = stdout
}
return stdout.toString().trim().split("\n")
}
catch (ignored) {
return null;
}
}
task checkstyle(type: Checkstyle) {
configFile file("${project.rootDir}/quality/checkstyle/uncommon-checkstyle.xml")
configProperties = [
'checkstyle.cache.file': rootProject.file('build/checkstyle.cache'),
'checkstyleSuppressionsPath': file("${project.rootDir}/quality/checkstyle/suppressions.xml").absolutePath
]
source 'src'
String[] split = getChangedFiles()
for (int i=0; i<split.length; i++){
include split[i]
println split[i]
}
exclude '**/build/**' // Exclude everything inside build folders.
exclude '**/test/**' // Exclude tests
exclude '**/androidTest/**' // Exclude android test files.
ignoreFailures = false // Don't allow the build to continue if there are warnings.
classpath = files()
}
checkstyle {
toolVersion '6.19' // set Checkstyle version here
}
打印命令显示getChangedFiles()正在返回正确的文件集,并且我已经检查过以确保包含的文件也是准确的,但checkstyle本身似乎并没有在它们上运行
答案 0 :(得分:0)
我认为,您真正想要的是过滤掉已更改文件中发现的违规行为。
Checkout Violations Lib以及该自述文件中提到的插件。有离线执行此操作的插件,或将其与pull请求集成。
答案 1 :(得分:0)
最近,我写了一个基于checkstyle的工具,仅支持对代码行的增量更改进行样式检查,您可以将此工具添加到Git预提交钩子中,以在每次提交之前触发检查。
有关详细信息,请参见:https://github.com/yangziwen/diff-checkstyle
尽管现在提出您的问题为时已晚,但我仍然希望这对以后有帮助。