Los archivos TAGS contienen definiciones
Un TAGS
archivo contiene una lista de dónde se definen las funciones y clases. Por lo general, se coloca en la raíz de un proyecto y tiene este aspecto:
^L
configure,3945
as_fn_success () { as_fn_return 0; }^?as_fn_success^A180,5465
as_fn_failure () { as_fn_return 1; }^?as_fn_failure^A181,5502
as_fn_ret_success () { return 0; }^?as_fn_ret_success^A182,5539
as_fn_ret_failure () { return 1; }^?as_fn_ret_failure^A183,5574
Esto permite a Emacs encontrar definiciones. La navegación básica está incorporada find-tag
, pero etags-select
proporciona una interfaz de usuario más agradable cuando hay varias coincidencias.
También puede utilizar archivos TAGS para completar el código. Por ejemplo, el backend etags de la empresa usa archivos TAGS .
Los archivos TAGS se pueden crear con diferentes herramientas
ctags
(anteriormente conocido como 'ctags universales' o 'ctags exuberantes') puede generar archivos TAGS y admite la más amplia gama de idiomas. Se mantiene activamente en github.
Emacs viene con dos programas que generan archivos TAGS, llamados etags
y ctags
. Emacs ctags
tiene etags
la misma interfaz CLI que los ctags universales. Para evitar confusiones, muchas distribuciones cambian el nombre de estos programas (por ejemplo, ctags.emacs24
en Debian).
También existen herramientas específicas del idioma para generar archivos TAGS, como jsctags
y hasktags
.
Otros formatos de archivo
ebrowse
es un programa en C enviado con Emacs. Indexa el código C / C ++ y genera un BROWSE
archivo. ebrowse.el proporciona la definición y finalización de búsqueda habitual. También puede abrir el BROWSE
archivo directamente en Emacs para obtener una descripción general de las clases / funciones definidas en una base de código.
GNU Global tiene su propio formato de base de datos, que consiste en una GTAGS
, GRTAGS
y el GPATH
archivo. Puede generar estos archivos con el gtags
comando, que analiza el código C / C ++. Para otros lenguajes, GNU Global puede leer archivos generados por ctags universales.
GNU Global también proporciona una interfaz CLI para hacer preguntas más sofisticadas, como "¿dónde se menciona este símbolo?". Se envía con un paquete de Emacs gtags.el, pero ggtags.el también es popular para acceder a las bases de datos globales de GNU.
Cscope es similar en espíritu a GNU Global: analiza C / C ++ en su propio formato de base de datos. También puede responder preguntas como "encontrar todas las personas que llaman / destinatarios de esta función".
Vea también esta discusión de HN que compara global y cscope .
Proyectos cliente / servidor
rtags analiza e indexa C / C ++ utilizando un servidor persistente. Utiliza el analizador de clang, por lo que maneja C ++ realmente bien. Se envía con un paquete Emacs para consultar el servidor.
google-gtags era un proyecto en el que un archivo TAGS grande se almacenaría en un servidor. Cuando consultara al servidor, le proporcionaría un subconjunto del archivo TAGS que era relevante para su búsqueda.
Semántica (CEDET)
Semantic es un paquete integrado de Emacs que contiene un analizador para C / C ++, por lo que también puede encontrar definiciones. También puede importar datos de archivos TAGS, bases de datos csope y otras fuentes. CEDET también incluye una funcionalidad de estilo IDE que utiliza estos datos, por ejemplo, generar diagramas UML de jerarquías de clases.
GTags
proyecto al que se vinculó está bastante muerto. Si alguien habla degtags
, probablemente se esté refiriendo a GNU Global.