OVH Cloud OVH Cloud

[C++] Complétion de la STL à l'aide de semantic (ou ecb ?)

4 réponses
Avatar
Martin
Bonjour,

je dois reprendre un projet conséquent de C++ (quelques mégas de
sources). Il se trouve que emacs ne m'a jamais déçu surtout car je crois
vraiment qu'on peut tout faire avec. Alors voilà ce que j'ai cherché à
faire : avoir une complétion automatique des méthodes, propriétés et
autres des objets que j'utilise dans mes programmes.
Après (bcp) de recherches sur Internet, les solutions suivantes sont
apparues :
* Utilisation d'un module propriétaire (Xrefactoring je crois ou quelque
chose du style);
* Utilisation de ECB, semantic ou même si j'ai bien compris une
éventuelle paramétrisation à la main de la complétion emacs classique.
* un etags sur ton mon répertoire /usr/include ??? ça me parait bourrin...

Je préférerais vraiment éviter la solution propriétaire.
Alors après quelques essais, je me rend à l'évidence que je n'arrive pas
à obtenir ce que je veux de ecb...
Ce que je veux clairement au final c'est :
J'ouvre mon fichier C++
si je tape quelque chose du genre :
string t;
t.
avec une commande qu'il me propose l'ensemble des complétion possible
pour l'objet t, par exemple : length(int), size(), ...
Et je n'arrive pas à obtenir ce comportement car j'ai malheureusement
l'impression que ecb/semantic ne se base que sur les fichiers déjà
ouverts (par contre après ça à l'air de plutôt bien fonctionner).
J'ai aussi je crois croisé sur le net un .emacs (sur dotemacs je crois)
bien bien bien compliqué qui avait l'air de correctement fonctionner.
Ainsi, si je mets un #include dans un fichier, je voudrais que
l'ensemble des symboles et complétions possibles soit (récursivement)
utilisable.

Désolé pour ce (trop) long message, et j'espère que vous pourrez m'aider.

--
Martin

4 réponses

Avatar
Matthieu Moy
Martin writes:

* un etags sur ton mon répertoire /usr/include ??? ça me parait
bourrin...



etags fait de la completion, mais pas contextuelle.

Et je n'arrive pas à obtenir ce comportement car j'ai malheureusement
l'impression que ecb/semantic ne se base que sur les fichiers déjà
ouverts (par contre après ça à l'air de plutôt bien fonctionner).



Pas seulement:

http://cedet.sourceforge.net/intellisense.shtml

[...]
M-x semanticdb-save-all-db
which will write out the databases for use in future sessions. [...]


En pratique, semantic a un comportement assez variable. Moi, je n'ai
pas réussi a en tirer quoi que ce soit, d'autres trouvent ça super.
Finalement, je me contente du bon vieux M-/.

--
Matthieu
Avatar
drkm
Matthieu Moy writes:

M-x semanticdb-save-all-db
which will write out the databases for use in future sessions. [...]

En pratique, semantic a un comportement assez variable.



En effet. Il s'agit d'une version bêta. Il semble sensible à
mettre en place. Je n'ai pour ma part pas (encore) trouvé le temps
d'y regarder de plus près.

Mais, pour le PO, c'est une question récurrente sur les ML de
Semqntic et CEDET-devel. Il y a justement un tel sujet en ce moment,
sous le titre « System database not working », sur la ML de Semantic.

Tout se trouve à <URL:http://cedet.sf.net/>.

--drkm
Avatar
Sébastien Kirche
Le 24 Mar 2005, drkm vraute :

En effet. Il s'agit d'une version bêta. Il semble sensible à
mettre en place. Je n'ai pour ma part pas (encore) trouvé le temps
d'y regarder de plus près.



J'ai commencé à regarder cedet/semantic (de loin) en collaboration avec ecb
comme ide et frontal cvs.

Je m'en pour le moment pour browser les sources d'emacs mais je ne pense pas
avoir tout configuré (usage de semanticdb : pour le moment je sauve le
résultat des parses de fichiers isolés dans un répertoire commun, mais je ne
lui ai pas fait parser l'ensemble du projet + headers standards).

Je serai ravi de partager les retours d'expérience au besoin.

--
Sébastien Kirche
Avatar
drkm
Sébastien Kirche writes:

Le 24 Mar 2005, drkm vraute :

En effet. Il s'agit d'une version bêta. Il semble sensible à
mettre en place. Je n'ai pour ma part pas (encore) trouvé le temps
d'y regarder de plus près.



J'ai commencé à regarder cedet/semantic (de loin) en collaboration avec ecb
comme ide et frontal cvs.



Je ne sais pas si c'était clair, mais je parlais en particulier de
la fonctionalité intellisense, pas de CEDET en général.

Je m'en pour le moment pour browser les sources d'emacs mais je ne pense pas
avoir tout configuré (usage de semanticdb : pour le moment je sauve le
résultat des parses de fichiers isolés dans un répertoire commun, mais je ne
lui ai pas fait parser l'ensemble du projet + headers standards).



ÀMHA, c'est beaucoup pour SemanticDB. Personnellement, Semantic
enregistre automatiquement l'analyse des fichiers dans des modes
supportés dans une DB par répertoire. Ces DBs se trouvent dans
~/.semanticdb. Entre (beaucoup d') autres :

~/.semanticdb/!home!flo!.semantic.cache
~/.semanticdb/!home!flo!dir!.semantic.cache
~/.semanticdb/!usr!local!share!emacs!22.0.50!lisp!.semantic.cache

Remarque le dernier. Chaque fois que j'ouvre un fichier dans le
répertoire lisp/ d'Emacs, l'entièreté de cette DB est chargée. Et
l'arbre syntaxique du fichier y est ajouté, si elle ne le contient pas
encore.

Je dois dire que me trimballer dans chaque session Emacs avec
l'arbre syntaxique de chaque fichier de ce répertoire ne m'amuse pas
spécialement. Je m'amuse donc de temps en temps à faire un :

rm ~/.semanticdb/*.semantic.cache

Et puis je n'ai pas vu un grand apport du cache. ÀMHA, il ne se
justifie que lorsque deux conditions sont remplies :

- les sources sont en lecture seule (p.ex. le répertoire lisp/
d'Emacs) ;

- chaque répertoire ne contient pas trop de fichiers (en fait :
« la représentation des analyses syntaxique de l'ensemble des
fichiers du répertoire n'est pas trop volumineuse »).

Je me demande si je ne vais pas essayer de le désactiver un temps,
pour comparer à l'utilisation.

Je serai ravi de partager les retours d'expérience au besoin.



Idem. J'aimerais trouver du temps pour cela. J'espère cet été.
Peut-être que d'ici là la version stable sera sortie (mais je n'y
crois pas, les développeurs actifs ne semblent pas avoir plus de temps
libre que moi :-p). De toute manière, lorsque je m'y attaquerai, vous
serez au courant : vous serez mis à contribution.

Ça pourrait d'ailleurs être une FAQ intéressante à rédiger, si l'on
parvient à trouver le temps à quelques-uns d'y regarder de plus près,
dans une même période.

--drkm