2

当运行带有“自动更正”选项的格式化程序和 linting 工具等工具时,a 的输入和输出Rule可能是同一个文件;例如:

  "//*.hs" %> \out ->
    cmd_ "ormolu" "-m" "inplace" out

-- OR

  batch 10 ("//*.hs" %>)
    ( \out -> do
      cmd_ "ormolu" "-m" "inplace" out
      pure out
    )
    (cmd_ "hlint")

这似乎“正确”工作(如果源文件已编辑并已更改,则规则将重新运行need),但我们不确定这是一个愉快的巧合还是shake按设计工作 - 特别是当我们开始考虑缓存结果时shakeShare或者在未来的Cloud Shake。这是处理此类规则的最佳方法,还是有更好的方法?

4

1 回答 1

1

没有原则性的方法可以生成替换 Shake 中的源文件的规则。给定一个源代码格式化程序,其他任何东西都不是很有用。Shake 假设在编译过程中输入不会改变。传递可能--lint会导致 lint 错误,并且与 Cloud Shake 不兼容。官方建议是在您致电之前,在单独的非 Shake 通行证中进行此类更改shake

但是,如果它对您有用并且有用,我不会过分担心。该模式在 Shake 中进行了测试,很多人都会这样做。您可以使用 .针对每个文件关闭云缓存historyDisable

于 2019-09-06T15:06:11.410 回答