File TAGS berisi definisi
Sebuah TAGSfile 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-selectmemberikan 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 etagsdan ctags. Emacs ' ctagshanya etagsdengan antarmuka CLI yang sama dengan ctag universal. Untuk menghindari kebingungan, banyak distro yang mengganti nama program ini (misalnya ctags.emacs24di Debian).
Ada juga alat khusus bahasa untuk membuat file TAGS, seperti jsctagsdan hasktags.
Format file lainnya
ebrowseadalah program C yang disertakan dengan Emacs. Ini mengindeks kode C / C ++ dan menghasilkan BROWSEfile. ebrowse.el menyediakan definisi dan penyelesaian find biasa. Anda juga dapat membuka BROWSEfile 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, GRTAGSdan GPATHfile. Anda dapat membuat file-file ini dengan gtagsperintah, 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.
GTagsproyek yang Anda tautkan cukup mati. Jika seseorang membicarakannyagtags, mungkin yang mereka maksud adalah GNU Global.