Generando el archivo de etiquetas emacs para un proyecto de Ruby on Rails
ruby-on-rails rvm (4)
Esto parece que podría ser relevante:
- http://lists.gnu.org/archive/html/bug-gnu-emacs/2011-11/msg00079.html
- http://lists.gnu.org/archive/html/bug-gnu-emacs/2012-03/msg00550.html
En particular, tenga en cuenta el comentario en el segundo enlace, sugiriendo que este error ha existido desde Emacs 22.
Suponiendo que no está ejecutando Emacs 24, parece que debe aplicar ese parche a etags.el (y byte-recompilar).
(Si está utilizando una versión de Emacs 24 que contenía este error, obviamente debería actualizar a la última versión previa a la prueba).
Estoy generando un archivo de etiquetas para emacs para mi proyecto Ruby on Rails con el siguiente comando:
ctags -f TAGS --extra=-f --languages=-javascript --exclude=.git --exclude=log -e -R . $(rvm gemdir)/gems/
Cuando trato de encontrar etiquetas (usando M-.) Algunas etiquetas funcionan bien, pero con muchas otras etiquetas me aparecen errores como:
tag-find-file-of-tag-noselect: File /Users/simao/Documents/sp/ofe/° ¡ not found
etags-goto-tag-location: Rerun etags: `^class Tools::FilteringSteps'' not found in /Users/simao/Documents/sp/ofe/lib/geo_db.rb
¿Cómo está generando etiquetas para sus proyectos RoR con emacs? ¿Alguna vez viste este problema antes?
Esta es la salida de ctags --version
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
Compiled: Mar 9 2012, 15:47:35
Addresses: <[email protected]>, http://ctags.sourceforge.net
Optional compiled features: +wildcards, +regex
Mi versión de emacs:
GNU Emacs 24.0.95.1 (x86_64-apple-darwin, NS apple-appkit-1038.36) of 2012-04-02
Si está utilizando Git, le recomiendo que siga esta configuración desde Effortless CTags para construir automáticamente sus archivos de etiquetas cuando realice operaciones de git:
http://tbaggery.com/2011/08/08/effortless-ctags-with-git.html
Incluso si no estás usando Git, puedes probar su comando para construir los CTags:
ctags --tag-relative -Rf.git/tags.$$ --exclude=.git --languages=-javascript,sql
Además, te recomiendo que configures un alias para la instalación de paquetes para especificar una ruta para que tus gemas se agrupen en el subdirectorio de tu proyecto, como:
alias bi=''bundle install --path vendor''
(Nota: asegúrese de .gitignore ese directorio). Esto te permitirá saltar directamente a la fuente de cada una de tus gemas, y evitar que tu archivo de etiqueta se hinche con todas las gemas en tu sistema.
Si, si, si. ;-)
¿Por qué te importa no usar ctags en primer lugar? Ctags es un gran proyecto y admite muchos idiomas (como 50). Pero el soporte de Ruby es muy débil, el analizador no está en buenas condiciones y no se ha cambiado desde hace 4 años.
- Ctags no trata con: módulo A :: B
- Ctags no etiqueta (al menos algunos de) los métodos del operador como ==
- Ctags no admite etiquetas calificadas, -type = +
- Ctags no genera etiquetas para constantes o atributos.
Desafortunadamente, todos los demás (encontré 2) los generadores ctags de Ruby están desactualizados (no son compatibles con Ruby 1.9+) o son muy lentos. ¡Pero hay una solución! Se llama ripper-tags . https://github.com/tmm1/ripper-tags
gem install ripper-tags
cd your_project/
ripper-tags -R # for vim
ripper-tags -R -f TAGS # for emacs
Este proyecto aprovecha la API incorporada de Ruby parser llamada Ripper. Es rápido y funciona como se espera. Es casi tan rápido como ctags, pero da los resultados más precisos. Advertencia: NO es compatible con Ruby 1.8.
Si te gustan las etiquetas ripper y quieres que todas las etiquetas se generen automáticamente en la instalación de gemas, puedes consultar mis etiquetas ripper que hacen eso. Desafortunadamente, no es compatible con Emacs en este momento (se acepta el parche, es bastante fácil de hacer). Más información en: https://github.com/lzap/gem-ripper-tags