有两种使用 Shake 的方法,使用batch
or needHasChanged
。rubocop
对于您的情况,如果存在 lint 违规,我假设只是错误,因此标准的一次一个规则将是:
"*.rb-lint" %> \out -> do
need [out -<.> "rb"]
cmd_ "rubocop" (out -<.> "rb")
writeFile' out ""
利用batch
该函数batch
将自身描述为:
当一个命令的启动成本很高时很有用——例如apt-get install foo bar baz
比三个单独的调用便宜很多apt-get install
。
代码大致是:
batch 3 ("*.rb-lint-errors" %>)
(\out -> do need [out -<.> "rb"]; return out) $
(\outs -> do cmd_ "rubocop" [out -<.> "rb" | out <- outs]
mapM_ (flip writeFile' "") pits)
利用needHasChanged
该函数needHasChanged
将自身描述为:
Likeneed
但返回自上次成功构建调用规则以来重建的依赖项列表。
所以你会写:
"stamp.lint" *> \out -> do
changed <- needHasChanged listOfAllRubyFiles
cmd_ "rubocop" changed
writeFile' out ""
比较
的优点batch
是它能够并行运行多个批次,并且您可以设置批次数量的上限。相比之下needHasChanged
更简单但非常实用。对于很多问题,两者都是合理的解决方案。这两个功能都是最近添加到 Shake 的,因此请确保您使用的是 0.17.2 或更高版本,以确保它具有所有必要的错误修复。