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 etagse ctags. Emacs' ctagsè solo etagscon la stessa interfaccia CLI ctags universali. Per evitare confusione, molte distribuzioni rinominano questi programmi (ad esempio ctags.emacs24su Debian).
Esistono anche strumenti specifici per la lingua per la generazione di file TAGS, come jsctagsehasktags .
Altri formati di file
ebrowseè un programma C fornito con Emacs. Indicizza il codice C / C ++ e genera un BROWSEfile. 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, GRTAGSe GPATHfile. 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.
GTagsprogetto a cui ti sei collegato è quasi morto. Se qualcuno ne sta parlandogtags, probabilmente si sta riferendo a GNU Global.