File TAGS berisi definisi
Sebuah TAGS
file berisi daftar di mana fungsi dan kelas didefinisikan. Ini biasanya ditempatkan di root proyek dan terlihat seperti ini:
^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
Ini memungkinkan Emacs menemukan definisi. Navigasi dasar sudah ada di dalamnya find-tag
, tetapi etags-select
memberikan UI yang lebih baik bila ada beberapa kecocokan.
Anda juga dapat menggunakan file TAGS untuk pelengkapan kode. Misalnya, backend etag perusahaan menggunakan file TAGS .
File TAGS dapat dibuat dengan alat yang berbeda
ctags
(sebelumnya dikenal sebagai 'universal ctags' atau 'exuberant ctags') dapat menghasilkan file TAGS dan mendukung berbagai bahasa. Itu secara aktif dipertahankan di github.
Emacs dikirimkan dengan dua program yang menghasilkan file TAGS, yang disebut etags
dan ctags
. Emacs ' ctags
hanya etags
dengan antarmuka CLI yang sama dengan ctag universal. Untuk menghindari kebingungan, banyak distro yang mengganti nama program ini (misalnya ctags.emacs24
di Debian).
Ada juga alat khusus bahasa untuk membuat file TAGS, seperti jsctags
dan hasktags
.
Format file lainnya
ebrowse
adalah program C yang disertakan dengan Emacs. Ini mengindeks kode C / C ++ dan menghasilkan BROWSE
file. ebrowse.el menyediakan definisi dan penyelesaian find biasa. Anda juga dapat membuka BROWSE
file secara langsung di Emacs untuk mendapatkan gambaran umum tentang kelas / fungsi yang ditentukan basis kode.
GNU Global memiliki format database sendiri yang terdiri dari a GTAGS
, GRTAGS
dan GPATH
file. Anda dapat membuat file-file ini dengan gtags
perintah, yang mengurai kode C / C ++. Untuk bahasa lain, GNU Global dapat membaca file yang dibuat oleh ctag universal.
GNU Global juga menyediakan antarmuka CLI untuk mengajukan pertanyaan yang lebih rumit, seperti 'di mana simbol ini disebutkan?'. Ia dikirimkan dengan paket Emacs gtags.el, tetapi ggtags.el juga populer untuk mengakses basis data GNU Global.
Cscope memiliki semangat yang mirip dengan GNU Global: ia mengurai C / C ++ ke dalam format database-nya sendiri. Itu juga dapat menjawab pertanyaan seperti 'temukan semua penelepon / panggilan dari fungsi ini'.
Lihat juga diskusi HN ini yang membandingkan global dan cscope .
Proyek Klien / Server
rtags mem-parsing dan mengindeks C / C ++ menggunakan server persisten. Ini menggunakan pengurai clang, sehingga menangani C ++ dengan sangat baik. Ini dikirimkan dengan paket Emacs untuk melakukan kueri ke server.
google-gtags adalah proyek tempat file TAGS yang besar akan disimpan di server. Saat Anda menanyakan server, itu akan memberikan subset dari file TAGS yang relevan dengan pencarian Anda.
Semantik (CEDET)
Semantic adalah paket Emacs bawaan yang berisi parser untuk C / C ++, sehingga dapat menemukan definisi juga. Itu juga dapat mengimpor data dari file TAGS, database csope, dan sumber lainnya. CEDET juga menyertakan fungsionalitas gaya IDE yang menggunakan data ini, misalnya membuat diagram UML dari hierarki kelas.
GTags
proyek yang Anda tautkan cukup mati. Jika seseorang membicarakannyagtags
, mungkin yang mereka maksud adalah GNU Global.