Shake 是否可以更改源文件?

Is it possible for Shake to change a source file?

当运行使用带有"auto-correction"选项的格式化程序和linting工具等工具时,Rule的输入和输出可能是同一个文件;例如:

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

-- OR

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

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

在 Shake 中没有生成替换源文件的规则的原则性方法。给定源代码格式化程序,其他任何东西都不是很有用。 Shake 假设在编译过程中输入不会改变。传递 --lint 很可能会导致 lint 错误,并且它与 Cloud Shake 不兼容。官方建议是在调用 shake.

之前在单独的非摇动过程中进行此类更改

但是,如果它对您有用并且有用,我就不会过分担心。该模式在 Shake 中进行了测试,这是很多人都在做的事情。您可以使用 historyDisable.

按文件关闭云缓存