首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hlint,hdevtools和ghc-mod有什么不同?

hlint,hdevtools和ghc-mod有什么不同?
EN

Stack Overflow用户
提问于 2016-10-19 12:26:58
回答 1查看 2.2K关注 0票数 11

我正在寻找代码林特,类型查询,自动类型插入和misc助手使用与vim (如自动完成)。

经过一些研究后,我发现了许多类似的工具,它们可以做我想做的事。

  • 赫林特
  • 杂耍工具
  • ghc-mod

的主要问题是,这些基本上都是同一个工具吗?

当我做一些测试时,我发现只有ghc是开箱即用的(对于代码lint,没有尝试任何类型助手函数)

代码语言:javascript
复制
$ 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创建任何配置文件?

代码语言:javascript
复制
$ 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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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-modghc-modhdevtools之间的区别似乎是哲学的。hdevtools的ghc功能较少,但(在我的经验中)速度要快得多。粗略地看了一下代码基础:hdevtools似乎依赖GHCi来实现类似GHCi的服务器,能够快速地重新加载代码。也许这就是取得好成绩的关键决定?我肯定我过于简单化了。

hlint是非常不同的。这是一个古老的项目(2006年由Haskell社区长老之一Neil发起)。它能够检测出典型的Haskell坏习惯(例如使用concat . map而不是concatMap),并且在某些情况下可以轻松地将它们重构掉。它依赖于将Haskell代码解析为AST的haskell-src-exts。我认为hlint甚至不需要对代码库进行完整的类型检查:它可以单独查看抽象语法树来建议更改和声音警报。您通常会选择ghc-modhdevtools,并将它们与hlint一起使用以获得完整的Haskell体验。

我们还应该花点时间提到FP Complete的intero项目,该项目运行ghci,类似于hdevtools。但是,只有当您的编辑器是Emacs并且使用堆栈时,它才能工作。我无法找到关于它与ghc-modhdevtools有何不同的好文档;一种假设是,它旨在给Emacs用户提供更好的体验,因为您经常会遇到hdevtools/ghc-mod会因为编译器或编辑器包不匹配而顽固地拒绝运行的情况。使用intero,您可以使用Elisp的一个小片段起床并运行。

这是一堆老烂摊子!

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40131384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档