TAGS-Dateien enthalten Definitionen
Eine TAGS
Datei enthält eine Liste, in der Funktionen und Klassen definiert sind. Es befindet sich normalerweise im Stammverzeichnis eines Projekts und sieht folgendermaßen aus:
^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
Dadurch kann Emacs Definitionen finden. Die grundlegende Navigation ist in integriert find-tag
, etags-select
bietet jedoch eine schönere Benutzeroberfläche, wenn mehrere Übereinstimmungen vorhanden sind.
Sie können auch TAGS-Dateien zur Code-Vervollständigung verwenden. Zum Beispiel Backend etags des Unternehmens verwendet Tags Dateien .
TAGS-Dateien können mit verschiedenen Tools erstellt werden
ctags
(früher als "universelle ctags" oder "üppige ctags" bekannt) kann TAGS-Dateien generieren und unterstützt die unterschiedlichsten Sprachen. Es wird aktiv auf Github gepflegt.
Emacs wird mit zwei Programmen geliefert, die TAGS-Dateien generieren, etags
und ctags
. Emacs ctags
hat nur etags
die gleiche CLI-Schnittstelle wie universelle ctags. Um Verwirrung zu vermeiden, benennen viele Distributionen diese Programme um (z ctags.emacs24
. B. unter Debian).
Es gibt auch sprachspezifische Tools zum Generieren von TAGS-Dateien wie jsctags
und hasktags
.
Andere Dateiformate
ebrowse
ist ein C-Programm, das mit Emacs geliefert wird. Es indiziert C / C ++ - Code und generiert eine BROWSE
Datei. ebrowse.el bietet die übliche Suchdefinition und -vervollständigung. Sie können die BROWSE
Datei auch direkt in Emacs öffnen , um einen Überblick über die Klassen / Funktionen zu erhalten, die in einer Codebasis definiert sind.
GNU Globale hat seine eigene Datenbank - Format, das eine besteht aus GTAGS
, GRTAGS
und GPATH
Datei. Sie können diese Dateien mit dem gtags
Befehl generieren , der C / C ++ - Code analysiert. Für andere Sprachen kann GNU Global Dateien lesen, die von universellen ctags generiert wurden.
GNU Global bietet auch eine CLI-Schnittstelle zum Stellen komplexerer Fragen, z. B. "Wo wird dieses Symbol erwähnt?". Es wird mit einem Emacs-Paket gtags.el geliefert, aber ggtags.el ist auch für den Zugriff auf GNU Global-Datenbanken beliebt.
Cscope ähnelt im Geiste GNU Global: Es analysiert C / C ++ in ein eigenes Datenbankformat. Es kann auch Fragen wie "Alle Anrufer / Anrufer dieser Funktion finden" beantworten.
Siehe auch diese HN-Diskussion zum Vergleich von Global und Cscope .
Client / Server-Projekte
rtags analysiert und indiziert C / C ++ unter Verwendung eines persistenten Servers. Es verwendet den Clang-Parser, sodass C ++ sehr gut funktioniert. Es wird mit einem Emacs-Paket geliefert, mit dem der Server abgefragt werden kann.
google-gtags war ein Projekt, bei dem eine große TAGS-Datei auf einem Server gespeichert wurde. Wenn Sie den Server abfragen, wird eine Teilmenge der TAGS-Datei bereitgestellt, die für Ihre Suche relevant ist.
Semantik (CEDET)
Semantic ist ein integriertes Emacs-Paket, das einen Parser für C / C ++ enthält, sodass auch Definitionen gefunden werden können. Es kann auch Daten aus TAGS-Dateien, csope-Datenbanken und anderen Quellen importieren. CEDET enthält auch Funktionen im IDE-Stil, die diese Daten verwenden, z. B. das Generieren von UML-Diagrammen von Klassenhierarchien.
GTags
Projekt, mit dem Sie verbunden sind, ziemlich tot. Wenn jemand darüber sprichtgtags
, bezieht er sich wahrscheinlich auf GNU Global.