Ctags: Tidak mendeteksi simbol dari httpd (regresi)

Dibuat pada 13 Des 2016  ·  8Komentar  ·  Sumber: universal-ctags/ctags

Halo,

Ctag universal terbaru (249c3c0c2a974ab03f7c307684563239096399a8) tidak mendeteksi simbol ap_os_create_privileged_process dalam kode ini (include/ap_mpm.h dari httpd 2.4.18):

AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
    const request_rec *r,
    apr_proc_t *newproc,
    const char *progname,
    const char * const *args,
    const char * const *env,
    apr_procattr_t *attr,
    apr_pool_t *p);

Perintah ini mengembalikan output kosong:

ctags -x --C-kinds=fpvx --languages=+C --language-force=C include/ap_mpm.h|grep ap_os_create_privileged_process

Namun, edisi universal ctag dari 7 Mei 2016 (e5b7a2508db6e1374ea78a300cc9b45f4b26b02a) mendeteksinya dengan benar:

ctags -x --C-kinds=fpvx --languages=+C --language-force=C include/ap_mpm.h|grep ap_os_create_privileged_process
ap_os_create_privileged_process prototype   107 include/ap_mpm.h AP_DECLARE(apr_status_t) ap_os_create_privileged_process(

Saya bahkan tidak dapat memperbaikinya dengan opsi -I . Ini perlu menggunakan parser OldC dalam kasus ini.

Terima kasih.

Semua 8 komentar

Maaf terlambat. Saya punya pertanyaan. e5b7a25 ditemukan oleh git membagi dua? atau tidak?
Saya pikir bug ini dapat diperkenalkan ketika @pragmaware bekerja pada atribut untuk fungsi yang saya minta untuk diperbaiki. Yang ini dan #1241 mungkin menemukan bug yang sama.

Ini adalah bug tetapi mungkin sulit untuk diperbaiki, saya kira.

Saya tidak punya waktu untuk memperbaikinya sekarang, tetapi bug ini berdampak pada kehidupan saya sehari-hari. Saya akan menemukan waktu pula.
Ketika saya menemukan waktu, saya akan memberikan ini kepada saya. Itu berarti sampai bidang penerima tugas nihil, @pragmaware , Anda memiliki perubahan untuk memperbaikinya :-P.

Mungkin parser dapat memiliki heuristik untuk hal-hal semacam ini, tetapi yah, saya membiarkan @pragmaware memutuskan apakah itu layak/dapat dilakukan tanpa merusak banyak hal.

Tetapi dengan preprocessor barunya, Anda dapat dengan mudah memperbaiki masalah dengan -D 'AP_DECLARE(t)=t' :

$ ./ctags -x --C-kinds=+p -D 'AP_DECLARE(t)=t' /tmp/1242.c
ap_os_create_privileged_process prototype     1 /tmp/1242.c      AP_DECLARE(apr_status_t) ap_os_create_privileged_process(

Ya, bagian parser itu awalnya terlalu "permisif", lalu saya membuatnya terlalu ketat. Saya kira saya harus menemukan cara untuk membuatnya pergi ke suatu tempat di tengah. Saya akan mencoba untuk memperbaikinya sekarang.

@pragmaware , terima kasih.

Bisakah Anda meminta menulis tentang opsi -D untuk http://docs.ctags.io/en/latest/parser-cxx.html .
Ini bukan pertama kalinya kami memberi tahu pengguna opsi -D .

Ditutup melalui #1245

Ctags 6e839be606cbc750e6e6a7e6d16fe375adbef5ca mendeteksi simbol mandiri ini dengan baik. Tetapi file header awal berisi pembukaan berikut untuk simbol ini:

AP_DECLARE_HOOK(int, mpm, (apr_pool_t *pconf, apr_pool_t *plog, server_rec *server_conf))

/**
 * comment ...
 */

AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
    const request_rec *r,
    apr_proc_t *newproc,
    const char *progname,
    const char * const *args,
    const char * const *env,
    apr_procattr_t *attr,
    apr_pool_t *p);

Dan untuk beberapa alasan ctags tidak mendeteksinya dalam kasus ini. Masalah ini mungkin terkait dengan #1251.

Hm, kasus ini cukup sulit untuk diperbaiki tanpa merusak kasus lainnya.
Artinya, versi parser yang lebih lama menangkap yang ini tetapi rusak di tempat lain....

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

jespinal picture jespinal  ·  8Komentar

jayceekay picture jayceekay  ·  13Komentar

songouyang picture songouyang  ·  15Komentar

masatake picture masatake  ·  18Komentar

blackb1rd picture blackb1rd  ·  8Komentar