2012-04-07 49 views
13

我正在尋找一個等同於Haskell的ctags。我試過hasktags,但它有一些問題:如何爲Haskell項目生成標籤?

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上編譯。

回答

8

hasktags有一些錯誤,其中之一是它使用惰性IO,這往往會導致這些資源繁忙的錯誤。

碰巧,我只是寫了一個標籤計劃,在http://hackage.haskell.org/package/fast-tags

其他選項是hothasktags,這使得合格module.function的標籤,並lushtags,其目的是用花哨的IDE像vim tagbar整合啄。根據我的經驗,hothasktags只要無法解析文件就會生成巨型標籤文件和lushtags崩潰。兩者都使用haskell-src-exts,這意味着它們是準確的,但如果它們無法解析文件並且無法處理.hsc文件,則會崩潰。快速標籤有其自己的解析器,這意味着它沒有這些問題,但也更容易解析錯誤標籤或僞造標籤的錯誤。

正如你注意到,氣囊(及htags)使用哈斯克爾-SRC,這意味着他們只能在哈斯克爾98.工作

免責聲明:如果TAGS你的意思是emacs的標籤,快速標籤沒有做這些呢,儘管如果有人在意它很容易添加。

+0

哇,快速標籤真的很快,而且工作!謝謝 – fqsxr 2012-04-08 07:30:37

13

您正在使用Mac OS X(或Windows,見下文),是不是? 在這種情況下,hasktags -c(僅創建Vi格式標籤)將解決您的問題。

這並不是唯一的解釋,但在這裏是一個OS X系統上會發生什麼:

  • 在默認情況下,hasktags假設你想爲vi和Emacs的兩個標籤。
  • 因此,它將嘗試創建兩個tags(對於VI)和TAGS(爲Emacs)
  • 然而,OS X,Unix的不同,是由默認不區分大小寫。因此你不能在這裏有兩個文件。
  • 而不是覆蓋另一個文件,出於某種原因hasktags運行到衝突,可能是因爲它在關閉「其他」之前打開一個文件。正如Evan Laforge解釋的那樣,我認爲這是憑藉懶惰的I/O。

更新:通過評論指出,Windows7也情況下可能出現不敏感的,所以類似的問題。

+1

根據我的經驗,這種涉及不區分大小寫的解釋在MS Windows上也是如此。我使用的是Emacs,所以我使用-e,這也很好。但省略選項會導致錯誤。這是hasktags-0.68.2。它看起來不像一個懶惰的IO或錯誤問題,因爲其他答案暗示 – tinlyx 2013-05-29 06:15:14

+0

@TingL:我認爲惰性IO解釋了爲什麼你得到那個特定的錯誤信息(「資源忙」);否則你只會得到沒有錯誤和一個'tags'文件(稍後創建的文件),它只能用於一個編輯器而不用另一個。 – Blaisorblade 2013-05-29 22:45:08