2012-04-07 11 views
13

Ich bin auf der Suche nach einem Ctags gleichbedeutend mit Haskell. Ich habe versucht, hasktags, aber es einige Probleme haben:Wie generiert man TAGs für Haskell-Projekte?

Im Quellordner von enumerator, laufen hasktags . gibt:

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

Und wenn ich vim -t enumFile laufen, tritt ein Fehler auf:

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

I auch versucht gasbag, aber es kompiliert nicht auf ghc-7.0.4.

Antwort

8

hasktags hat einige Bugs, von denen einer ist, dass es Lazy IO verwendet, das dazu neigt, diese Ressource beschäftigt Fehler zu geben.

Wie es passiert, ich schrieb gerade ein Tags Programm, bei http://hackage.haskell.org/package/fast-tags

Weitere Optionen sind hothasktags, die qualifizierte Module.function Tags macht und lushtags, die ausgelegt ist, mit einem schicken IDE-like vim Tagbar zu integrieren Ding. Meiner Erfahrung nach erzeugt Hothasktags riesige Tag-Dateien, und die Software versagt, sobald eine Datei nicht analysiert werden kann. Beide verwenden haskell-src-exts, was bedeutet, dass sie genau sind, aber zum Absturz führen, wenn sie Ihre Datei nicht analysieren können und nicht mit .hsc-Dateien umgehen können. Fast-Tags hat seinen eigenen Parser, was bedeutet, dass es diese Probleme nicht hat, aber auch anfälliger für das Parsen von Fehlern ist, die Tags übersehen oder gefälschte Tags geben.

Wie Sie bemerkt haben, gasbag (und htags) verwenden haskell-src, das bedeutet nur, sie auf Haskell arbeiten 98.

Haftungsausschluss: wenn durch TAGS Sie Emacs-Tags bedeuten, schnell Tags nicht diejenigen tun, noch, wenn es jemanden interessiert, wäre es leicht hinzuzufügen.

+0

Wow, Fast-Tags ist wirklich schnell und funktioniert! Danke – fqsxr

13

Sie verwenden Mac OS X (oder Windows, siehe unten), nicht wahr? In diesem Fall würde hasktags -c (die nur Vi-Format-Tags erstellt) Ihr Problem beheben.

Das ist nicht die einzige Erklärung ist, aber hier ist das, was auf einem OS X-System passiert:

  • standardmäßig hasktags vorausgesetzt, dass Sie beide Tags für vi und Emacs wollen.
  • so versucht sie beide tags (für Vi) und TAGS (für Emacs) jedoch
  • zu erstellen, OS X, im Gegensatz zu Unix, ist standardmäßig Groß- und Kleinschreibung. Daher können Sie nicht beide Dateien dort haben.
  • Anstatt eine Datei mit der anderen zu überschreiben, läuft hasktags aus irgendeinem Grund in einen Konflikt, wahrscheinlich weil er eine Datei öffnet, bevor er die "andere" schließt. Ich würde erwarten, dass das dank der faulen I/O, wie von Evan Laforge erklärt, ist.

aktualisieren: wie durch einen Kommentar darauf hingewiesen, Windows ist auch Groß- und Kleinschreibung, so ähnliche Probleme auftreten könnten.

+1

Diese Erklärung mit Berücksichtigung der Groß- und Kleinschreibung ist auch auf MS Windows, nach meiner Erfahrung. Ich benutze Emacs, also benutze ich -e, was auch gut funktioniert. Aber das Weglassen der Option verursacht den Fehler. Dies ist wie von hasktags-0.68.2.Es sieht nicht wie ein Lazy IO oder Bug Problem aus, wie die andere Antwort vorgeschlagen – tinlyx

+0

@TingL: Ich denke, Faul IO erklärt, warum Sie diese spezifische Fehlermeldung erhalten ("Ressource beschäftigt"); andernfalls würden Sie einfach keinen Fehler und eine "Tag" -Datei (die später erstellte) erhalten und es würde nur mit einem Editor funktionieren und nicht mit dem anderen. – Blaisorblade

Verwandte Themen