Pliki TAGS zawierają definicje
TAGSPlik zawiera listę funkcji i klas, gdzie są zdefiniowane. Zwykle jest umieszczany w katalogu głównym projektu i wygląda następująco:
^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
Dzięki temu Emacs może znaleźć definicje. Podstawowa nawigacja jest wbudowana find-tag, ale etags-selectzapewnia ładniejszy interfejs użytkownika w przypadku wielu dopasowań.
Możesz również użyć plików TAGS do uzupełniania kodu. Na przykład zaplecze etags firmy używa plików TAGS .
Pliki TAGS można tworzyć za pomocą różnych narzędzi
ctags(wcześniej znane jako „uniwersalne tagi” lub „żywiołowe znaczniki”) mogą generować pliki TAGS i obsługują najszerszy zakres języków. Jest aktywnie utrzymywany na githubie.
Emacs jest dostarczany z dwoma programami, które generują pliki TAGS, o nazwie etagsi ctags. Emacs ctagsma taki etagssam interfejs CLI, jak uniwersalne ctagi. Aby uniknąć nieporozumień, wiele dystrybucji zmienia nazwy tych programów (np. W ctags.emacs24Debianie).
Istnieją również narzędzia specyficzne dla języka do generowania plików TAGS, takie jak jsctagsi hasktags.
Inne formaty plików
ebrowseto program w C dostarczany z Emacsem. Indeksuje kod C / C ++ i generuje BROWSEplik. ebrowse.el zapewnia typową definicję i zakończenie wyszukiwania. Możesz także otworzyć BROWSEplik bezpośrednio w Emacsie, aby uzyskać przegląd klas / funkcji zdefiniowanych w bazie kodu.
GNU Globalny ma swój własny format bazy danych, która składa się z GTAGS, GRTAGSi GPATHpliku. Możesz wygenerować te pliki za pomocą gtagspolecenia, które analizuje kod C / C ++. W przypadku innych języków GNU Global może czytać pliki generowane przez uniwersalne ctagi.
GNU Global zapewnia również interfejs CLI do zadawania bardziej wyrafinowanych pytań, takich jak „gdzie wspomniany jest ten symbol?”. Jest dostarczany z pakietem Emacsa gtags.el, ale ggtags.el jest również popularny do uzyskiwania dostępu do baz danych GNU Global.
Cscope jest podobny w duchu do GNU Global: przetwarza C / C ++ do własnego formatu bazy danych. Może także odpowiadać na pytania typu „znajdź wszystkich dzwoniących / dzwoniących do tej funkcji”.
Zobacz także tę dyskusję HN porównującą globalne i cscope .
Projekty klient / serwer
rtags analizuje i indeksuje C / C ++ przy użyciu trwałego serwera. Używa parsera clang, więc bardzo dobrze radzi sobie z C ++. Jest dostarczany z pakietem Emacsa do wysyłania zapytań do serwera.
google-gtags to projekt, w którym duży plik TAGS był przechowywany na serwerze. Kiedy odpytywałeś serwer, dostarczył podzbiór pliku TAGS, który był odpowiedni dla twojego wyszukiwania.
Semantyczny (CEDET)
Semantic to wbudowany pakiet Emacsa, który zawiera parser dla C / C ++, więc może również znaleźć definicje. Może również importować dane z plików TAGS, baz danych csope i innych źródeł. CEDET zawiera również funkcjonalność w stylu IDE, która wykorzystuje te dane, np. Generowanie diagramów UML hierarchii klas.
GTagsprojekt, z którym się łączyłeś, jest dość martwy. Jeśli ktoś o tym mówigtags, prawdopodobnie odnosi się do GNU Global.