Pliki TAGS zawierają definicje
TAGS
Plik 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-select
zapewnia ł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 etags
i ctags
. Emacs ctags
ma taki etags
sam interfejs CLI, jak uniwersalne ctagi. Aby uniknąć nieporozumień, wiele dystrybucji zmienia nazwy tych programów (np. W ctags.emacs24
Debianie).
Istnieją również narzędzia specyficzne dla języka do generowania plików TAGS, takie jak jsctags
i hasktags
.
Inne formaty plików
ebrowse
to program w C dostarczany z Emacsem. Indeksuje kod C / C ++ i generuje BROWSE
plik. ebrowse.el zapewnia typową definicję i zakończenie wyszukiwania. Możesz także otworzyć BROWSE
plik 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
, GRTAGS
i GPATH
pliku. Możesz wygenerować te pliki za pomocą gtags
polecenia, 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.
GTags
projekt, z którym się łączyłeś, jest dość martwy. Jeśli ktoś o tym mówigtags
, prawdopodobnie odnosi się do GNU Global.