Les fichiers TAGS contiennent des définitions
Un TAGS
fichier contient une liste des emplacements de définition des fonctions et des classes. Il est généralement placé à la racine d'un projet et ressemble à ceci:
^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
Cela permet à Emacs de trouver des définitions. La navigation de base est intégrée à find-tag
, mais etags-select
fournit une interface utilisateur plus agréable lorsqu'il y a plusieurs correspondances.
Vous pouvez également utiliser des fichiers TAGS pour compléter le code. Par exemple, le backend etags de l'entreprise utilise des fichiers TAGS .
Les fichiers TAGS peuvent être créés par différents outils
ctags
(anciennement connu sous le nom de «ctags universels» ou «ctags exubérants») peut générer des fichiers TAGS et prend en charge la plus large gamme de langues. Il est activement maintenu sur github.
Emacs est livré avec deux programmes qui génèrent des fichiers TAGS, appelés etags
et ctags
. Emacs ' ctags
est juste etags
avec la même interface CLI que les ctags universels. Pour éviter toute confusion, de nombreuses distributions renomment ces programmes (par exemple ctags.emacs24
sur Debian).
Il existe également des outils spécifiques au langage pour générer des fichiers TAGS, tels que jsctags
et hasktags
.
Autres formats de fichiers
ebrowse
est un programme C livré avec Emacs. Il indexe le code C / C ++ et génère un BROWSE
fichier. ebrowse.el fournit la définition et la complétion habituelles de la recherche. Vous pouvez également ouvrir le BROWSE
fichier directement dans Emacs pour avoir un aperçu des classes / fonctions définies dans une base de code.
GNU mondial a son propre format de base de données, qui se compose d'un GTAGS
, GRTAGS
et le GPATH
fichier. Vous pouvez générer ces fichiers avec la gtags
commande, qui analyse le code C / C ++. Pour les autres langages, GNU Global peut lire les fichiers générés par les ctags universels.
GNU Global fournit également une interface CLI pour poser des questions plus sophistiquées, comme «où est mentionné ce symbole?». Il est livré avec un package Emacs gtags.el, mais ggtags.el est également populaire pour accéder aux bases de données GNU Global.
Cscope est similaire dans l'esprit à GNU Global: il analyse C / C ++ dans son propre format de base de données. Il peut également répondre à des questions telles que «trouver tous les appelants / appelants de cette fonction».
Voir aussi cette discussion HN comparant global et cscope .
Projets client / serveur
rtags analyse et indexe C / C ++ à l'aide d'un serveur persistant. Il utilise l'analyseur clang, donc il gère très bien C ++. Il est livré avec un package Emacs pour interroger le serveur.
google-gtags était un projet dans lequel un gros fichier TAGS serait stocké sur un serveur. Lorsque vous interrogiez le serveur, il fournissait un sous-ensemble du fichier TAGS correspondant à votre recherche.
Sémantique (CEDET)
Semantic est un package Emacs intégré qui contient un analyseur pour C / C ++, afin qu'il puisse également trouver des définitions. Il peut également importer des données à partir de fichiers TAGS, de bases de données csope et d'autres sources. CEDET inclut également une fonctionnalité de style IDE qui utilise ces données, par exemple la génération de diagrammes UML de hiérarchies de classes.
GTags
projet auquel vous vous êtes lié est assez mort. Si quelqu'un en parlegtags
, il fait probablement référence à GNU Global.