如何为Haskell项目生成TAGS?

时间:2012-04-07 21:10:13

标签: haskell ctags

我正在寻找相当于Haskell的ctags。我试过了hasktags,但它有一些问题:

enumerator的源文件夹中,运行hasktags .给出:

hasktags: tags: openFile: resource busy (file is locked)

当我运行vim -t enumFile时,会发生错误:

E431: Format error in tags file "tags"
Before byte 4085
E426: tag not found: enumFile

我也尝试了gasbag,但它不能在ghc-7.0.4上编译。

2 个答案:

答案 0 :(得分:13)

您使用的是Mac OS X(或Windows,见下文),不是吗? 在这种情况下,hasktags -c(仅创建Vi格式标签)可以解决您的问题。

这不是唯一的解释,但这是在OS X系统上发生的事情:

  • 默认情况下,hasktags假设您需要vi和Emacs的两个标记。
  • 因此,它尝试创建tags(对于Vi)和TAGS(对于Emacs)
  • 但是,OS X与Unix不同,默认情况下不区分大小写。因此,你不能在那里同时拥有这两个文件。
  • 而不是用另一个文件覆盖一个文件,由于某种原因,hasktags会遇到冲突,可能是因为它在关闭“other”之前打开了一个文件。我希望这是由于懒惰的I / O,正如Evan Laforge所解释的那样。

更新:正如评论所指出的,Windows也不区分大小写,因此可能会出现类似的问题。

答案 1 :(得分:9)

hasktags有一些错误,其中一个是它使用惰性IO,这往往会给那些资源带来繁忙的错误。

碰巧,我刚刚在http://hackage.haskell.org/package/fast-tags

写了一个标签程序

其他选项是hothasktags,它生成合格的Module.function标签和lushtags,旨在与花哨的类似IDE的vim标签栏集成。根据我的经验,hothasktags一旦无法解析文件就会生成巨大的标签文件和lushtags崩溃。两者都使用haskell-src-exts,这意味着它们是准确的,但如果它们无法解析您的文件就会崩溃,并且无法处理.hsc文件。 fast-tags有自己的解析器,这意味着它没有这些问题,但也更容易解析错过标签或伪造标签的错误。

正如您所注意到的那样,gasbag(和htags)使用haskell-src,这意味着它们只适用于Haskell 98.

免责声明:如果TAGS指的是emacs标签,那么快速标签还没有这样做,但如果有人关心它会很容易添加。