Ctags: 不检测来自 httpd 的符号(回归)

创建于 2016-12-13  ·  8评论  ·  资料来源: universal-ctags/ctags

你好,

最新的通用 ctags (249c3c0c2a974ab03f7c307684563239096399a8) 未检测到此代码中的符号ap_os_create_privileged_process (来自 httpd 2.4.18 的 include/ap_mpm.h):

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 是由 git bisect 找到的? 或不?
我认为当@pragmaware处理我要求他修复的函数的属性时,可能会引入这个错误。 这个和#1241 可能会发现相同的错误。

这是一个错误,但可能很难修复,我猜。

我现在没有时间修复,但是这个错误影响了我的日常生活。 反正我会找时间的。
当我有时间时,我会把这个分配给我。 这意味着直到受让人字段为零, @pragmaware ,您才能进行更改以解决此问题:-P。

也许解析器可以对这类事情进行启发式分析,但是,我让@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 等级

相关问题

softinio picture softinio  ·  6评论

cweagans picture cweagans  ·  13评论

JulienPivard picture JulienPivard  ·  16评论

masatake picture masatake  ·  18评论

blackb1rd picture blackb1rd  ·  8评论