Ctags: Ne détecte pas un symbole de httpd (régression)

Créé le 13 déc. 2016  ·  8Commentaires  ·  Source: universal-ctags/ctags

Bonjour,

Les derniers ctags universels (249c3c0c2a974ab03f7c307684563239096399a8) ne détectent pas le symbole ap_os_create_privileged_process dans ce code (include/ap_mpm.h de 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);

Cette commande a renvoyé une sortie vide :

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

Cependant, l'édition de ctags universels du 7 mai 2016 (e5b7a2508db6e1374ea78a300cc9b45f4b26b02a) l'a correctement détecté :

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(

Je ne peux même pas résoudre ce problème avec une option -I . Il est nécessaire d'utiliser l'analyseur OldC dans ce cas.

Merci.

Tous les 8 commentaires

Désolé d'être en retard. J'ai une question. e5b7a25 est trouvé par git bisect ? ou pas?
Je pense que ce bogue peut être introduit lorsque @pragmaware a travaillé sur l'attribut de fonction que je lui ai demandé de corriger. Celui-ci et #1241 peuvent repérer le même bug.

C'est un bug mais il peut être difficile à corriger, je suppose.

Je n'ai pas le temps de corriger maintenant, mais ce bug a des impacts sur mon quotidien. Je trouverai le temps de toute façon.
Quand j'aurai le temps, je me l'attribuerai. Cela signifie que jusqu'à ce que le champ des cessionnaires soit nul, @pragmaware , vous avez une modification pour résoudre ce problème

Peut-être que l'analyseur pourrait avoir des heuristiques pour ce genre de choses, mais bon, je laisse @pragmaware décider si cela en vaut la peine/faisable sans casser beaucoup de choses.

Mais avec son nouveau préprocesseur, vous pouvez facilement résoudre le problème avec -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(

Oui, cette partie de l'analyseur a d'abord été trop "permissive", puis je l'ai rendue trop stricte. Je suppose que je vais devoir trouver un moyen de le faire aller quelque part au milieu. Je vais essayer de le réparer maintenant.

@pragmaware , merci.

Pourriez-vous demander à écrire sur la puissante option -D à http://docs.ctags.io/en/latest/parser-cxx.html .
Ce n'est pas la première fois que nous informons un utilisateur -D option

Fermé via #1245

Ctags 6e839be606cbc750e6e6a7e6d16fe375adbef5ca détecte bien ce symbole autonome. Mais le fichier d'en-tête initial contient le préambule suivant pour ce symbole :

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

Et pour une raison quelconque, ctags ne le détecte pas dans ce cas. Ce problème peut être lié à #1251.

Hm, ce cas est assez difficile à réparer sans casser les autres cas.
C'est-à-dire qu'une ancienne version de l'analyseur a attrapé celui-ci mais s'est cassée à d'autres endroits...

Cette page vous a été utile?
0 / 5 - 0 notes