Ctags: httpd(回帰)からシンボルを検出しません

作成日 2016年12月13日  ·  8コメント  ·  ソース: universal-ctags/ctags

こんにちは、

最新のユニバーサルctags(249c3c0c2a974ab03f7c307684563239096399a8)は、このコード(httpd2.4.18のinclude / ap_mpm.h)でシンボルap_os_create_privileged_processを検出しません。

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);

このコマンドは空の出力を返しました:

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

ただし、2016年5月7日以降のユニバーサルctagsのエディション(e5b7a2508db6e1374ea78a300cc9b45f4b26b02a)は、それを正しく検出しました。

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(

-Iオプションでこれを修正することすらできません。 この場合、 OldCパーサーを使用する必要があります。

ありがとうございました。

全てのコメント8件

遅れてすみません。 質問があります。 e5b7a25はgitbisectによって見つかりましたか? か否か?
このバグは、 @ pragmawareが修正を依頼した関数の属性に取り組んだときに

これはバグですが、修正が難しいかもしれません。

今は修正する時間がありませんが、このバグは私の日常生活に影響を与えています。 とにかく時間を見つけます。
時間があれば、これを割り当てます。 つまり、担当者フィールドがnil( これを修正するための変更があります

パーサーはこの種のことについてヒューリスティックを持っているかもしれませんが、まあ、私は@pragmawareに、多くのことを壊すことなく、それが価値がある/実行

しかし、彼の新しいプリプロセッサを使用すると、 -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(

はい、パーサーのその部分は最初は「寛容」すぎて、それから私はそれを厳しすぎました。 真ん中のどこかに行く方法を見つけなければならないと思います。 今すぐ修正してみます。

@pragmaware 、ありがとう。

http://docs.ctags.io/en/latest/parser-cxx.htmlへの強力な-Dオプションについて書いてください。
ユーザーに-Dオプションを知らせるのはこれが初めてではありません。

#1245経由で閉鎖

Ctags 6e839be606cbc750e6e6a7e6d16fe375adbef5caは、このスタンドアロンシンボルを適切に検出します。 ただし、最初のヘッダーファイルには、このシンボルの次のプリアンブルが含まれています。

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);

そして、何らかの理由で、この場合、ctagsはそれを検出しません。 この問題は#1251に関連している可能性があります。

うーん、このケースは他のケースを壊さずに修正するのはかなり難しいです。
つまり、古いバージョンのパーサーがこれをキャッチしましたが、他の場所で壊れました。

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

cweagans picture cweagans  ·  13コメント

EvanCarroll picture EvanCarroll  ·  14コメント

trevordmiller picture trevordmiller  ·  9コメント

softinio picture softinio  ·  6コメント

jespinal picture jespinal  ·  8コメント