你正在使用的golang/tools的版本是什么?
~/tools $ git rev-parse HEAD
a30bf2db82d4f645ded9030efbbf6d4fbe5e70eb
建议
目前,在 golang/tools
中的分析驱动程序仅对根包打印诊断信息。如果不更改 golang/tools
存储库或从头开始开发驱动程序,我们无法改变这种行为,因为这种行为是写在 internal
包中的。
如果能够为依赖项发出诊断信息,某些分析可能会更有利,因为依赖项中的问题也可能是在根包中的问题。
因此,我想通过向 golang.org/x/tools/go/analysis/internal/checker.Run
添加参数以及向 golang.org/x/tools/go/analysis/singlechecker.Run
和 golang.org/x/tools/go/analysis/multichecker.Run
添加命令行参数来实现为外部包发出诊断信息的功能。这样可以吗?还是有其他原因导致该选项不在这些包中?
谢谢。
4条答案
按热度按时间rnmwe5a21#
@matloob @alandonovan
hfsqlsce2#
(通过“外部包”,我假设你指的是依赖关系。)
驱动程序仅在需要从分析较低级别的包中获取事实时,才在依赖项上运行请求的分析器(以及由于
Requires
间接需要的任何内容);大多数分析器实际上不需要查看除根之外的其他包。这个命令的某个变体不就能做到你需要的吗?
kognpnkq3#
@matloob, @alandonovan
我测试了命令并理解了这个解决方法(递归地对所有依赖项进行lint检查)。非常感谢您的建议🙇
然而,我发现了一些差异。
我将这个解决方法与my copied and modified driver进行了比较,如下所示。
我不知道
wc
返回的行数差异的原因(可能是依赖项版本之间的差异?),但是性能差异可能是因为当前驱动程序会同时以根和依赖项的方式双重检查依赖项。这种性能差异可能无法通过这个解决方法来解决,我们应该准备优化分析的选项吗?
jgovgodb4#
感谢报告。我对它变慢并不感到惊讶。区别在于:
#1 和 #3 很容易解释。#2 则不容易。这就是为什么我不想添加一个标志的原因。
如果您有动力的话,对 #3 进行性能分析是个好主意,看看是否可以轻松地提高性能。