Lorsque l'on travaille sur un projet C comportant un certain nombre de fichiers et de lignes de code, il arrive fréquemment que l'on se pose des questions comme "Mais où est modifié le champ data de ma structure Packet ?". grep ne suffit pas pour répondre à ce genre de questions car ne comprenant pas C, il ne sait pas, par exemple, que la variable monbopkt est une structure Packet.
coccigrep, basé sur coccinelle qui est un outil très puissant de recherche et de modification automatique de code, est un logiciel libre chargé de répondre à ce genre de questions. Il vient d'être publié en version 1.0rc1, sous licence GPL v3. Il est écrit en Python et s'interface avec les éditeurs Vim et Emacs, ce qui permet de faire les recherches depuis l'éditeur.
Le fonctionnement de coccigrep est simple, vous spécifiez quel type d'opérations vous cherchez sur une structure et ses attributs. Par exemple, si l'on souhaite savoir où est assigné l'attribut datalink de la structure Packet dans les fichiers source*c, il suffit de taper :
# coccigrep -t Packet -a datalink -o set source*c
source-af-packet.c:301 (Packet *p): p->datalink = ptv->datalink;
source-erf-dag.c:525 (Packet *p): p->datalink = LINKTYPE_ETHERNET;
Tout un ensemble d'opérations est disponible et ce dernier n'est pas fermé. Vous pouvez en effet rajouter vos propres opérations en créant des patchs sémantiques au format coccinelle.
Coccigrep s'appuie sur coccinelle pour effectuer ses recherches dans le code source. Coccinelle est un logiciel développé par l'INRIA, le LIP6 et l'université de Copenhague. Il est régulièrement utilisé pour effectuer des contrôles et des modifications sur le noyau Linux. De nombreux développeurs l'utilisent pour procéder à des modifications importantes de codes lors du changement d'une API par exemple.
Aller plus loin
- Page de coccigrep (545 clics)
- Site de Coccinelle (404 clics)
- Coccigrep sur github (78 clics)
- Coccinelle for the newbie (160 clics)
# Intéressant complément à cscope. Quid du C++ ?
Posté par guepe . Évalué à 4.
J'utilise cscope pour faire des recherches dans du code (vaste, ~10MLOC). Mais il ne permet pas de faire des recherches sur des accès à des données !
Cependant, supporte-t-il C++ ?? Apparemment pas, mais est-ce un projet dans le bugtracker ?
[^] # Re: Intéressant complément à cscope. Quid du C++ ?
Posté par Eric Leblond (site web personnel) . Évalué à 6.
Les capacités d'analyse syntaxique de coccigrep sont celles de coccinelle. Ce dernier supporte assez mal le C++ mais il semble qu'il y ait tout de même un intérêt dans ce sens et qu'un support du C++ puisse apparaitre. Lorsque cela sera fait, il sera alors possible de faire évoluer coccigrep vers le C++.
[^] # Re: Intéressant complément à cscope. Quid du C++ ?
Posté par Eric Leblond (site web personnel) . Évalué à 3.
Je viens de publier (le 14/09/2011) la version 1.1 de coccigrep qui permet d'activer le support de C++ fourni dans coccinelle. Ce support est partiel mais il semble que l'on arrive toutefois à avoir quelques résultats.
# Bravo
Posté par Thomas Monjalon . Évalué à 2.
On dirait qu'il y en a qui savent mettre leur temps libre à contribution.
J'en avais rêvé sans trop oser y croire.
Bravo pour l'idée !
Bravo pour la réalisation !
[^] # Re: Bravo
Posté par Eric Leblond (site web personnel) . Évalué à 7.
Merci, cela fait plaisir mais c'est plutôt les gens de Coccinelle qu'il faut remercier. Coccigrep, c'est un peu plus de 1000 lignes de code qui font tourner les 200000 lignes de code de haute volée de Coccinelle ;)
# Option -C
Posté par MrLapinot (site web personnel) . Évalué à 3.
L'option -C (concurrency) est perturbante, dans grep j'ai l'habitude qu'elle signifie "context", c'est-à-dire que -C N est un raccourci pour -A N -B N.
[^] # Re: Option -C
Posté par Eric Leblond (site web personnel) . Évalué à 1.
C'est pas bête. D'ailleurs l'implémenter pourrait être pratique.
[^] # Re: Option -C
Posté par Eric Leblond (site web personnel) . Évalué à 4.
Je vient de pousser la modification ajoutant le support du contexte: https://github.com/regit/coccigrep/commit/ff7c67a57f47f5ade8bf4049ee1e2237c846fe7c
L'option -p est maintenant utilisée pour gérer la parallélisation des commandes.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.