I file TAGS contengono definizioni
UN TAGS
file contiene un elenco di dove vengono definite le funzioni e le classi. Di solito è posizionato nella radice di un progetto e ha questo aspetto:
^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
Ciò consente a Emacs di trovare le definizioni. La navigazione di base è integrata confind-tag
, maetags-select
fornisce un'interfaccia utente migliore quando ci sono più corrispondenze.
Puoi anche utilizzare file TAGS per il completamento del codice. Per esempio, il backend etags dell'azienda utilizza file TAGS .
I file TAGS possono essere creati da diversi strumenti
ctags
(precedentemente noto come 'universal ctags' o 'exuberant ctags') può generare file TAGS e supporta la più ampia gamma di lingue. È mantenuto attivamente su GitHub.
Emacs viene fornito con due programmi che generano file TAGS, chiamati etags
e ctags
. Emacs' ctags
è solo etags
con la stessa interfaccia CLI ctags universali. Per evitare confusione, molte distribuzioni rinominano questi programmi (ad esempio ctags.emacs24
su Debian).
Esistono anche strumenti specifici per la lingua per la generazione di file TAGS, come jsctags
ehasktags
.
Altri formati di file
ebrowse
è un programma C fornito con Emacs. Indicizza il codice C / C ++ e genera un BROWSE
file. ebrowse.el fornisce la solita definizione e completamento della ricerca. Puoi anche aprire il fileBROWSE
file direttamente in Emacs per avere una panoramica delle classi / funzioni definite in codebase.
GNU globale ha un proprio formato di database, che consiste in una GTAGS
, GRTAGS
e GPATH
file. Puoi generare questi file con l'estensionegtags
comando, che analizza il codice C / C ++. Per altre lingue, GNU Global può leggere file generati da ctags universali.
GNU Global fornisce anche un'interfaccia CLI per porre domande più sofisticate, come "dove è menzionato questo simbolo?". Viene fornito con un pacchetto Emacs gtags.el, ma ggtags.el è anche popolare per accedere ai database GNU Global.
Cscope è simile nello spirito a GNU Global: analizza C / C ++ nel proprio formato di database. Può anche rispondere a domande come "trova tutti i chiamanti / chiamati di questa funzione".
Vedi anche questa discussione HN che confronta global e cscope .
Progetti client / server
rtags analizza e indicizza C / C ++ utilizzando un server persistente. Usa il parser clang, quindi gestisce molto bene il C ++. Viene fornito con un pacchetto Emacs per interrogare il server.
google-gtags era un progetto in cui un file TAGS di grandi dimensioni sarebbe stato archiviato su un server. Quando hai interrogato il server, questo forniva un sottoinsieme del file TAGS pertinente alla tua ricerca.
Semantica (CEDET)
Semantic è un pacchetto Emacs integrato che contiene un parser per C / C ++, quindi può anche trovare definizioni. Può anche importare dati da file TAGS, database csope e altre fonti. CEDET include anche funzionalità in stile IDE che utilizza questi dati, ad esempio la generazione di diagrammi UML di gerarchie di classi.
GTags
progetto a cui ti sei collegato è quasi morto. Se qualcuno ne sta parlandogtags
, probabilmente si sta riferendo a GNU Global.