Incluya etiquetas de proveedor para ruby-mode y ggtags

Pregunta:

Estoy intentando instalar y configurar el paquete ggtags . Principalmente, lo uso para proyectos ruby ​​on rails ( enh-ruby-mode ).

Puedo generar ctags que incluyen todos los archivos del proveedor para mi proyecto con el siguiente comando:

ctags -R --languages=ruby --exclude=.git --exclude=log . $(bundle list --paths)

¿Cómo puedo configurar el paquete ggtags para lograr lo mismo?

Yo uso OS X, con exuberant-ctags y complementos de pygments .

Creo que necesito agregar algunas configuraciones a ~/.globalrc o al ~/.globalrc de la raíz del gtags.conf , pero no conozco la configuración.

Respuesta:

A continuación, se explica cómo utilizar global instalación global desde un repositorio de Ubuntu. La versión que tuve en 6.6.3-2.

Primero, copie la configuración de ejemplo en su directorio de inicio. Un comentario en la parte superior hace que parezca que esto es innecesario, pero eso no es cierto. La configuración predeterminada que tiene es muy diferente y no reconoce los archivos .rb en absoluto, AFAICT.

cat /usr/share/doc/global/examples/gtags.conf.gz | gzip -d >~/.globalrc

En segundo lugar, debe elegir el mecanismo subyacente. Pygments suena muy bien, pero genera entradas de "otros símbolos", no definiciones, que es lo que normalmente necesitamos.

universal-ctags podría ser la mejor opción, pero la versión de Global parece necesitar una recompilación para usarla (ya sea la versión apt o snap). exuberant-ctags funciona fuera de la caja, sin embargo. La versión antigua 5.9~svn20110310-1 .

Ahora, como se explica en la documentación y en este número, normalmente necesitaría ejecutar gtags --gtagslabel= en cada directorio de gemas:

for d in $(bundle list --paths); do
    if [ -d $d ]; then
        echo "$d";
        (cd $d && find . -type f -name "*.rb" | gtags --gtagslabel=ctags -f -)
    fi
done

El uso de find aquí es para evitar incluir archivos JS, etc., principalmente debido a los activos minificados. Pero puede crear una enumeración más inteligente.

Para usar los índices de todos estos directorios, necesita configurar env var GTAGSLIBPATH al valor apropiado durante una sesión de Emacs. Dado que es diferente para cada proyecto, e incluso cambia con el tiempo, tal vez el mejor enfoque sea llamar manualmente a un comando en el directorio del proyecto que lo hará por usted. Aquí tienes uno que puedes usar:

(defun set-gtagslibpath-to-bundle-paths ()
  (interactive)
  (let ((paths
         (split-string
          (with-output-to-string
            (process-file-shell-command "bundle list --paths" nil
                                        standard-output))
          "\n")))
    (while (and paths
                (string-match-p "\\`The dependency'" (car paths)))
      (setq paths (cdr paths)))
    (setenv "GTAGSLIBPATH"
            (mapconcat #'identity paths ":"))))

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım