2012-04-07 20 views
13

Estoy buscando un ctags equivalente a Haskell. Probé hasktags, pero tiene algunos problemas:¿Cómo generar TAGS para proyectos de Haskell?

En la carpeta de origen del enumerator, ejecute hasktags . da:

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

Y cuando corro vim -t enumFile, se produce un error:

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

I también intenté gasbag, pero no se compila en ghc-7.0.4.

Respuesta

8

hasktags tiene algunos errores, uno de los cuales es que usa IO perezoso, que tiende a dar a esos recursos errores de ocupación.

Da la casualidad de que acabo de escribir un programa de etiquetas, en http://hackage.haskell.org/package/fast-tags

Otras opciones son hothasktags, lo que hace etiquetas módulo.función cualificados, y lushtags, que está diseñado para integrarse con una fantasía Tagbar vim IDE-como cosita. En mi experiencia hothasktags genera archivos de etiquetas gigantes y colisiones de lushtags tan pronto como no puede analizar un archivo. Ambos usan haskell-src-exts, lo que significa que son precisos, pero fallarán si no pueden analizar su archivo y no pueden tratar con archivos .hsc. fast-tags tiene su propio analizador, lo que significa que no tiene esos problemas, pero también es más vulnerable a los errores de análisis que faltan etiquetas o dan etiquetas falsas.

Como habrá notado, bolsa de gas (y htags) utilizan Haskell-src lo que significa que sólo funcionan en Haskell 98.

responsabilidad: si por las etiquetas que quiere decir etiquetas emacs, rápido-etiquetas no hacen los que, sin embargo, aunque si a alguien le importa sería fácil de agregar.

+0

¡wow, fast-tags es muy rápido y funciona! Gracias – fqsxr

13

Estás utilizando Mac OS X (o Windows, ver más abajo), ¿verdad? En ese caso, hasktags -c (que solo crea etiquetas de formato Vi) solucionaría su problema.

esa no es la única explicación, pero aquí es lo que ocurre en un sistema OS X:

  • por defecto, hasktags supone que desea ambas etiquetas para vi y Emacs.
  • por lo tanto, trata de crear tanto tags (por Vi) y TAGS (por Emacs)
  • sin embargo, OS X, a diferencia de Unix, es por caso por defecto insensible. Por lo tanto, no puede tener ambos archivos allí.
  • en lugar de sobrescribir un archivo con el otro, por alguna razón hasktags se ejecuta en un conflicto, probablemente debido a que abre un archivo antes de cerrar el "otro". Esperaría eso en virtud de la E/S perezosa, según lo explicado por Evan Laforge.

Actualización: como ha señalado un comentario, Windows es también el caso, podrían surgir problemas similares de manera insensible.

+1

Esta explicación que involucra la insensibilidad de mayúsculas y minúsculas también es cierta en MS Windows, según mi experiencia. Estoy usando Emacs, así que uso -e, que también funciona bien. Pero omitir la opción incurre en el error. Esto es a partir de hasktags-0.68.2.No se ve como un IO perezoso o problema de error como la otra respuesta sugerida – tinlyx

+0

@TingL: Creo que IO lento explica por qué recibes ese mensaje de error específico ("recurso ocupado"); de lo contrario, simplemente no obtendría ningún error y un archivo 'tags' (el que se crearía más adelante) y solo funcionaría con un editor y no con el otro. – Blaisorblade

Cuestiones relacionadas