Ctags: gtags tidak menghormati file .ctags

Dibuat pada 8 Des 2017  ·  25Komentar  ·  Sumber: universal-ctags/ctags

Saya telah membangun global dengan universal-ctags. Saya dapat memverifikasi bahwa ketika menjalankan ctags --version saya mendapatkan versi universal-ctags dan bukan yang lain.

Saya telah membuat file .ctags yang berisi:

-exclude=foo

Saat menjalankan gtags, saya tidak melihatnya menghormati file .ctags. alih-alih, lanjutkan dan ekstrak tag untuk semua yang ada di direktori kerja.

Apa yang saya lakukan salah?

Semua 25 komentar

Universal-ctags tidak membaca .ctags. Lihat bagian FILES dari halaman manual ctags.1.

Apakah Anda mengacu pada ini?

/ctags.cnf (on MSDOS, MSWindows only)
/etc/ctags.conf
/usr/local/etc/ctags.conf
$HOME/.ctags
$HOME/ctags.cnf (on MSDOS, MSWindows only)
.ctags
ctags.cnf (on MSDOS, MSWindows only)

If any of these configuration files exist, each will be expected to contain a set of default options which are read in the order listed when ctags starts, but before the CTAGS environment variable is read or any command line options are read. This makes it possible to set up site-wide, personal or project-level defaults. It is possible to compile ctags to read an additional configuration file before any of those shown above, which will be indicated if the output produced by the --version option lists the "custom-conf" feature. Options appearing in the CTAGS environment variable or on the command line will override options specified in these files. Only options will be read from these files. Note that the option files are read in line-oriented mode in which spaces are significant (since shell quoting is not possible). Each line of the file is read as one command line parameter (as if it were quoted with single quotes). Therefore, use new lines to indicate separate command-line arguments.

Saya melihat .ctags sebagai salah satu kemungkinan!

Agaknya, yang dia maksud adalah halaman manual saat ini .

Terima kasih codebrainz untuk menanggapi. Jadi saya membuat file ini:
/pathtorepo/ctags.d/.ctags

yang termasuk -R --excludes yang saya butuhkan.

Saat menjalankan perintah ini dari direktori repo:

ctags --verbose

Ini memberitahu saya bahwa itu mengharapkan masukan.

Ketika saya melakukannya

ctags --vertbose --options=ctags.d/.ctags

itu melakukan hal yang benar dan mengekstrak tag dari semua repo kecuali pengecualian dalam file .ctags.

Apa yang saya lakukan salah?

Saya perlu ctags untuk menghormati ctags.d/.ctags (atau file apa pun yang diperlukan) ketika hanya menjalankan "ctags".

Alasannya adalah saya menggunakan ggtags di dalam emacs dan ggtags membutuhkan ggtags bekerja berdampingan dengan ctags.

Jadi pada dasarnya saya ingin mencapai keadaan ketika saya bisa melakukan "gtags" pada command Prompt dan secara otomatis:

  1. Gunakan universal-ctags
  2. menghormati file universal-ctags (ctags.d/.ctags)

Bagaimana saya bisa melakukannya?

Bagaimana dengan /pathtorepo/.ctags.d/exclude.ctags ?
Lihat pohon sumber universal-ctags itu sendiri. Anda dapat menemukan direktori .ctags.d di dalamnya.
https://github.com/universal-ctags/ctags/tree/master/.ctags.d

Maaf untuk memperbarui komentar saya berulang kali.

u-ctags harus memuat /pathtorepo/.ctags.d/exclude.ctags saat menjalankan u-ctags di /pathtorepo.
Jangan ragu untuk membuka kembali ini jika u-ctags tidak memuat kecualikan.ctags Anda.

masatake, terima kasih atas tanggapannya. Tampaknya file pengecualian sedang diambil tetapi saya punya beberapa pertanyaan:

  1. ini mem-parsing file yang tidak dikecualikan:
    ctags --verbose --options=.ctags
    tapi ini tidak:
    ctags --verbose
    meskipun dikatakan mengambil file pengecualian, tetapi saya mendapatkan pesan ini:

ctags: Tidak ada file yang ditentukan. Coba "ctags --help".

Tapi kenapa? Bukankah seharusnya bertindak seperti:
ctags --verbose --options=.ctags
dan hanya mengurai semua yang ada di direktori saat ini kecuali yang dikecualikan?

  1. Bagaimana cara mendapatkan gtags menggunakan universal-ctags dan mengambil file yang dikecualikan?
    Ketika saya menjalankan gtags, ia mem-parsing semuanya dan mengabaikan file exception.ctags meskipun global dibangun --with-universal-ctags

Tentang 1. Saya membutuhkan informasi tentang lingkungan untuk menjawab pertanyaan tersebut.

Saya buruk dalam bahasa Inggris. Saya harap output berikut dapat memberi tahu Anda semua yang Anda butuhkan.

Tolong, periksa apakah Anda benar-benar menggunakan u-ctags.

$ ./ctags --version | grep Universal
Universal Ctags 0.0.0(248cffc9), Copyright (C) 2015 Universal Ctags Team
Universal Ctags is derived from Exuberant Ctags.

u-ctags memuat file yang memiliki .ctags sebagai sufiks di bawah ./.ctags.d.

$  ls -l .ctags.d
-rw-r--r--. 1 jet jet 104 Oct 14 02:46 exclusion.ctags

Opsi --verbose memberi tahu Anda file mana yang dimuat.

$ ./ctags --verbose 2>&1 | grep 'Considering option file'
Considering option file .ctags.d/exclusion.ctags: reading...

Direktori atau file dapat ditentukan dengan --options . Jika sebuah direktori diberikan,
file yang memiliki .ctags sebagai sufiks di bawah direktori akan dimuat.
Namun, file yang sama tidak dimuat dua kali.

$ ./ctags --verbose --options=.ctags.d 2>&1 | grep 'Considering option file'
Considering option file .ctags.d/exclusion.ctags: reading...
Considering option file .ctags.d/exclusion.ctags: already considered

File tanpa akhiran tidak dimuat kecuali jika file tersebut ditentukan dengan --options secara eksplisit.

$ touch ./.ctags.d/please-load-me
$ ./ctags --verbose  2>&1 | grep 'Considering option file'
Considering option file .ctags.d/exclusion.ctags: reading...
$ mv ./.ctags.d/please-load-me ./.ctags.d/please-load-me.ctags
$ ./ctags --verbose  2>&1 | grep 'Considering option file'
Considering option file .ctags.d/exclusion.ctags: reading...
Considering option file .ctags.d/please-load-me.ctags: reading...

Itu saja. Silakan, lihat halaman manual. Jika halaman manual tidak ditulis dengan baik, harap pertimbangkan untuk membuat permintaan tarik dan tunjukkan bagaimana kami dapat memperbaikinya.

Tentang 2, saya minta maaf tapi saya tidak tahu baik tentang gtags.

Saya pikir kita akan mendapatkan pertanyaan seperti ini berulang kali. Apa yang bisa saya lakukan sebelum mendapatkan pertanyaan?

Jika Anda masih memuat $HOME/.ctgs, Anda tidak akan mendapatkan pertanyaan ini. Kompatibilitasnya bagus, dan saya tidak mengerti mengapa Anda berhenti memuat file itu. Komit ce0617a7be7a4d33a09ac60f21b8a9ce26690853 mengubah ini tanpa menyebutkan alasannya.

Sekarang saya harus memindahkan file saya dan memperbarui rekaman saya tentang file konfigurasi.

Komit adalah bagian dari #1519, jadi alasannya dijelaskan di sana.

Melanggar kompatibilitas adalah ide yang buruk. Namun, saya akan melakukannya sekali, hanya sekali (saya harap) ketika merilis versi awal u-ctags. Saya pikir yang terakhir adalah format file tag. Yang paling penting dilakukan oleh @b4n. Yang harus saya lakukan adalah assigning version 3 tags file format dan membuat dokumen untuk itu.

Saya memiliki masalah yang sama dengan poster aslinya, menggunakan ~/.ctags.d/*.ctags dan (secara lokal) ./.ctags.d/*.ctags .
Saya menggunakan GNU Global 6.6.3, dikompilasi dengan dukungan Universal Ctags. GTAGSCONF menunjuk ke default gtags.conf jalur instalasi dan GTAGSLABEL adalah new-ctags .

Saya juga melihat melalui kode sumber di Global's /plugin-factory/exuberant-ctags.c (digunakan untuk memanggil Universal Ctags; mulai dari baris 193) tetapi sepertinya Universal Ctags dipanggil tanpa opsi yang akan menonaktifkan pemuatan .ctags.d/*.ctags .

Jika saya lebih suka melaporkan ini ke pengembang Global, tolong beri tahu saya dan saya akan melakukannya. :)

Untuk mereproduksi:

git clone -b tests --single-branch https://github.com/janEbert/julia-ctags.git
cd julia-ctags
mkdir -p ~/.ctags.d
mkdir -p .ctags.d
ln -s $PWD/ctags ~/.ctags.d/julia.ctags  # or cp if you want to be safe
ln -s $PWD/ctags ./.ctags.d/julia.ctags
gtags
global greet  # returns nothing

Bagaimana kalau memanggil ctags secara langsung seperti:

$ new-ctags --version
$ new-ctags -o - JULIA-FILE

Apakah Anda mendapatkan hasil yang diharapkan?

Ya, memanggil Universal Ctags ( uctags di mesin saya; GTAGSLABEL bukan nama biner) langsung berfungsi dengan sempurna, dengan atau tanpa file .ctags yang ditentukan melalui --options .
Jadi Universal Ctags menggunakan file ~/.ctags.d tetapi entah bagaimana perilaku ini tidak ditransfer ke Global.

Tolong, jangan gunakan --options. uctags harus memuat ~/.ctags.d/julia.ctags dan ./.ctags.d/julia.ctags tanpa menentukan --options.

Jadi yang saya ingin Anda jalankan adalah:

$ uctags --version
$ uctags -o - JULIA-FILE

Saya ingin melihat output perintah.

BTW, apakah Anda menggunakan ctags di GNU/Linux?

Maaf, saya tidak jelas. uctags menggunakan konten ~/.ctags.d sesuai keinginan, meskipun saya tidak memberikan flag --options . Namun, jika saya menggunakan gtags dengan uctags sebagai backend, ~/.ctags.d _tidak_ digunakan.

Ya, saya menggunakannya di GNU/Linux, khususnya Ubuntu. Outputnya adalah sebagai berikut:

$ uctags --version
Universal Ctags 0.0.0(1a94658c), Copyright (C) 2015 Universal Ctags Team
Universal Ctags is derived from Exuberant Ctags.
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
  Compiled: Jul 29 2019, 13:42:51
  URL: https://ctags.io/
  Optional compiled features: +wildcards, +regex, +iconv, +option-directory, +xpath, +packcc
$ uctags -o - testfile.jl
CtagsTest   testfile.jl /^module CtagsTest$/;"  f
ImmutablePoint  testfile.jl /^struct ImmutablePoint{T}$/;"  f
MutablePoint    testfile.jl /^mutable struct MutablePoint{T}$/;"    f
addcoment   testfile.jl /^addcoment(string::AbstractString, comment, spaces=1) = begin  # Maybe write without `begin`?$/;"  f
addone! testfile.jl /^function addone!(x::T) where {T <: Number}$/;"    f
deprecated_returnsquarepower    testfile.jl /^deprecated_returnsquarepower() = 2.0$/;"  f
multiply    testfile.jl /^multiply(x, y) = x * y$/;"    f
multiply    testfile.jl /^multiply(x, y...) = begin$/;" f
printgreeting   testfile.jl /^    function printgreeting(x)$/;" f
square  testfile.jl /^function square(x)$/;"    f

Sunting: Dikompilasi versi Universal Ctags yang lebih baru, output tetap sama.

Output tidak menunjukkan fungsi greet yang saya gunakan dalam contoh untuk mereproduksi lebih lanjut di atas . Ini karena pengurai usang di cabang yang saya tautkan kepada Anda – ganti saja global greet dengan global square dan itu tetap tidak akan memberikan hasil.

ok Sebagai program yang berdiri sendiri, uctags bekerja dengan baik.

Anda menggunakan GNU/Linux. Bagus! Saya dapat membantu Anda lebih banyak lagi.

Silakan, instal paket strace. Saya tidak tahu Ubuntu dengan baik tetapi, apt-get mungkin perintah untuk menginstal strace.

Lalu lari

$ strace -s 4096 -f -e execve,execveat gtags

Saya ingin melihat outputnya.

ok Sebagai program yang berdiri sendiri, uctags bekerja dengan baik.

Ya, ini bekerja dengan sangat baik secara mandiri!

Anda menggunakan GNU/Linux. Bagus! Saya dapat membantu Anda lebih banyak lagi.

Maaf saya tidak menyebutkan itu sebelumnya.

$ strace -s 4096 -f -e execve,execveat gtags
execve("/usr/local/bin/gtags", ["gtags"], 0x7ffe7e8d0fe8 /* 83 vars */) = 0
strace: Process 2210 attached
[pid  2210] execve("/usr/bin/sort", ["/usr/bin/sort", "-k", "1,1"], 0x562714c855b0 /* 84 vars */) = 0
strace: Process 2211 attached
[pid  2211] execve("/usr/bin/sort", ["/usr/bin/sort", "-k", "1,1"], 0x562714c97410 /* 84 vars */) = 0
[pid  2210] +++ exited with 0 +++
[pid  2209] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2210, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
[pid  2211] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2211, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
+++ exited with 0 +++

Output dari strace memberitahu gtags tidak memanggil uctags.

Terima kasih banyak. Saya minta maaf untuk masalah.
Kemudian tulis ke pengembang GLOBAL!
Terima kasih lagi! Ctag Universal sangat bagus. :)

Hei, aku mencoba sedikit. Saya tidak yakin apakah saya harus menulis surat kepada Anda atau Shigio.

GNU Global menggunakan pengaturan langmap dalam file GTAGSCONF untuk memfilter proses file gtags dan juga meneruskan pengaturan tersebut ke Universal Ctags.

Pada satu titik saya telah menambahkan ekstensi file untuk Julia (.jl) ke konfigurasi Global, namun, Universal Ctags berhenti dengan peringatan:
Bahasa tidak dikenal "[daftar langmaps]"

Masalah muncul karena Universal Ctags terlebih dahulu mem-parsing argumennya dan kemudian memuat opsi di .ctags.d . Saya memodifikasi Global untuk secara eksplisit meneruskan --options=[...].ctags _before_ melewati opsi --langmap .
Setelah itu semuanya bekerja dengan sempurna sekali lagi dan saya mendapatkan tabel Global.

Seperti yang saya katakan, saya tidak yakin apakah ini sesuatu yang ingin Anda ubah (sehingga file .ctags.d diproses sebelum argumen ke Universal Ctags) atau apakah saya harus mengajukan laporan ke Global.

Masalah muncul karena Universal Ctags terlebih dahulu mem-parsing argumennya dan kemudian memuat opsi di .ctags.d.

Saya tidak menerapkannya.
Hanya beberapa pengecualian, Universal-ctags memuat .ctags.d/*.ctags lalu mem-parsing opsi cmdline.
Seperti yang saya tulis di halaman manual ctags-optlib.7, Anda dapat menggunakan opsi --_echo=MSG untuk memahami dan men-debug bagaimana u-ctags memuat file konfigurasi.

 [yamato@slave]~% ls ~/.ctags.d 
config.ctags
[yamato@slave]~% cat ~/.ctags.d/config.ctags
--_echo=hello from dot-ctags


[yamato@slave]~% u-ctags --_echo="hello from cmdline" --_force-quit
u-ctags: Notice: hello from dot-ctags
u-ctags: Notice: hello from cmdline

Lihat halaman manual ctags.1. Saya tidak mengerti mengapa Anda ingin meneruskan --options ke ctags.
Menempatkan julia.ctags ke ~/.ctags.d mungkin cukup untuk tujuan Anda. u-ctags memuat julia.ctags secara otomatis. Jadi Anda tidak perlu menentukan --options secara eksplisit.

Oke, barusan saya tes lagi dan saya juga tidak mendapatkan error lagi. Maaf sekali lagi telah mengganggu Anda.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat