我使用 vim 作为我的编辑器和 Syntastic 插件。我试图了解将 pylint 与 Bazel 等工具一起使用的惯用方式。
pylint 有一个 init-hook 命令行参数,可用于动态操作 sys.hook。我正在考虑编写一个包装脚本来执行此操作,但我不确定如何确定作为“init-hook”命令传递的正确内容。
我知道的最好方法是pylint作为测试的一部分运行。
理想情况下,您应该为每个文件制定一个 linting 规则,这样当该文件更改时,您只需重新整理该文件。但这可能是不切实际的。
规模的另一端是有一个规则来检查项目中的所有文件。即使只有一个文件更改,该规则也会重新整理所有文件。所以这是低效的。
在我看来,一个好的中间立场是每个 Bazel 包的一个 linting 规则。
@local_pylint_config//:pylint例如,假设您的工作区中有 pylint 作为二进制文件,我建议使用以下模式:
sh_test(
name = "lint_test",
srcs = ["lint_test.sh"], # this doesn't have to do anything
data = ["lint_files.out"],
)
genrule(
name = "lint_files",
srcs = glob(["**/*.py"]),
outs = ["lint_files.out"],
tools = ["@local_pylint_config//:pylint"],
cmd = "$(location @local_pylint_config//:pylint) $(SRCS) >&/dev/null && md5sum $$(echo $(SRCS) | sort) > $@",
)
Run Code Online (Sandbox Code Playgroud)
笔记:
/dev/null以减少构建噪音。md5sum我仅仅touch'ed 输出文件,输出的内容将独立于源的内容,因此下游测试规则不会重新运行。... && date > $@而不是校验和源也足够好,因为如果任何源文件发生更改,Bazel 将重建 genrule(并因此重新整理源文件),产生不同的输出,因为届时当前时间将有改变了。然而,使用校验和是确定性的。| 归档时间: |
|
| 查看次数: |
1799 次 |
| 最近记录: |