如何让Haskero警告非详尽的模式匹配

时间:2018-02-13 15:22:00

标签: haskell visual-studio-code intero haskero

我目前正在评估 Visual Studio代码中的Haskero作为替代Haskell编辑器而不是 Atom Atom-Haskell。到目前为止, Haskero 似乎很有希望,但我想念我通常从 Atom-Haskell 获得的编译器警告。

作为说明问题的一种方式,请考虑这个简单的重复:

重现步骤

  1. 已安装 Haskero 打开 Visual Studio代码
  2. 添加新的Haskell文件:Repro.hs
  3. 将以下内容添加到文件
  4. 保存
  5. 文件内容:

    module Repro where
    
    foo :: Maybe a -> a
    foo (Just x) = x
    

    预期行为

    编辑应该警告:

    的效果
    Pattern match(es) are non-exhaustive
    In an equation for `foo': Patterns not matched: Nothing
    

    Atom-Haskell 这样做。

    实际行为

    什么都没发生。 Problems 视图仅表明:

      

    到目前为止,工作区中未检测到任何问题。

    更多细节

    上面重现的步骤是我能想到的最简单的步骤,但是当我创建一个完整的Stack项目并确保我在根目录中运行stack build intero时,我看到相同(缺乏)的行为我的项目目录。

    我的环境是:

    • Windows 10 Pro x64
    • 堆栈版本1.6.3,Git版本b27e629b8c4ce369e3b8273f04db193b060000db(5454提交)x86_64 hpack-0.20.0
    • Visual Studio代码版本1.20.0
    • Haskero版本1.3.1
    • Atom版本1.23.3 x64
    • language-haskell 版本1.17.3

1 个答案:

答案 0 :(得分:2)

看起来你必须告诉Haskero对致命错误发出警告(注意-Werror标志):

"haskero.intero.ghciOptions": [
    "-Wall",
    "-Werror"
]

enter image description here

然而,我无法理解为什么我们必须这样做,因为这是开箱即用的:

stack ghci --with-ghc intero "--ghci-options=-Wall" --no-build --no-load

enter image description here

这似乎是Haskero在Visual Studio Code中启动Intero的方式,而在GHCi中我可以看到警告而不通过-Werror ......

出于好奇,我已经尝试过hsdev 0.3.1.2和Sublime Haskell 91e0d29,并且似乎是开箱即用的工作:

enter image description here

希望有所帮助。