我正在寻找代码林特,类型查询,自动类型插入和misc助手使用与vim (如自动完成)。
经过一些研究后,我发现了许多类似的工具,它们可以做我想做的事。
的主要问题是,这些基本上都是同一个工具吗?
当我做一些测试时,我发现只有ghc是开箱即用的(对于代码lint,没有尝试任何类型助手函数)
$ cat test.hs
main = putStrLn "test"
$ ghc-mod check test.hs
test.hs:1:1:Warning: Top-level binding with no type signature: main :: IO ()
$ hdevtools check test.hs
Run from outside a project, using implicit global project config
$ hlint test.hs
No hints我是否需要为hlint和hdevtools创建任何配置文件?
$ hdevtools --version
hdevtools: version 0.1.4.1 (ghc-8.0.1-x86_64-linux, cabal-1.24.0.0)
$ hlint --version
HLint v1.9.35, (C) Neil Mitchell 2006-2016
$ ghc-mod --version
ghc-mod version 5.6.0.0 compiled by GHC 8.0.1
$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 8.0.1所有工具都是由stack install安装的,我在$PATH中安装了/home/wizzup/.local/bin
发布于 2016-10-19 18:56:34
ghc-mod向您的$PATH安装一个名为ghc-mod的二进制文件,它能够加载和查询包数据库和源代码(还有一个名为ghc-modi的“交互式”版本,它从标准的$PATH中读取命令并继续运行)。它使用GHC和Cabal来做到这一点。进展停顿了一段时间,但现在又回到了繁忙的状态。有Emacs/Vim/崇高软件包,它们知道如何与ghc-mod对话,并为最终用户提供各种类似IDE的特性:打字、漏洞、程序/验证搜索、查找-定义。
hdevtools是一个受ghc-mod启发的较新的项目。它在架构上很相似--运行一个带有每个编辑器包的持久后台服务器。它被设计成完全取代ghc-mod。ghc-mod和hdevtools之间的区别似乎是哲学的。hdevtools的ghc功能较少,但(在我的经验中)速度要快得多。粗略地看了一下代码基础:hdevtools似乎依赖GHCi来实现类似GHCi的服务器,能够快速地重新加载代码。也许这就是取得好成绩的关键决定?我肯定我过于简单化了。
hlint是非常不同的。这是一个古老的项目(2006年由Haskell社区长老之一Neil发起)。它能够检测出典型的Haskell坏习惯(例如使用concat . map而不是concatMap),并且在某些情况下可以轻松地将它们重构掉。它依赖于将Haskell代码解析为AST的haskell-src-exts。我认为hlint甚至不需要对代码库进行完整的类型检查:它可以单独查看抽象语法树来建议更改和声音警报。您通常会选择ghc-mod或hdevtools,并将它们与hlint一起使用以获得完整的Haskell体验。
我们还应该花点时间提到FP Complete的intero项目,该项目运行ghci,类似于hdevtools。但是,只有当您的编辑器是Emacs并且使用堆栈时,它才能工作。我无法找到关于它与ghc-mod或hdevtools有何不同的好文档;一种假设是,它旨在给Emacs用户提供更好的体验,因为您经常会遇到hdevtools/ghc-mod会因为编译器或编辑器包不匹配而顽固地拒绝运行的情况。使用intero,您可以使用Elisp的一个小片段起床并运行。
这是一堆老烂摊子!
https://stackoverflow.com/questions/40131384
复制相似问题