2009-04-09 6 views
4

Mon tagList dans un code C:VIM: Bijection entre éléments de liste de balises VIM et extraits de code?

macro
|| MIN_LEN
|| MAX_ITERATIONS
|| - typedef
|| cellule
|| source_cell
|| - variable
|| len_given

éléments de taglist (domaine):

A = {MIN_LEN, MAX_ITERATIONS, cell, source_cell, len_given} 

Les extraits de code (codomaine):

B = {"code_MIN_LEN", "code_MAX_ITERATIONS", ..., "code_len_given"} 

But: d'avoir bijection entre les ensembles A et B

Exemple: Je veux supprimer tout élément de A, comme le MIN_LEN, de A et B en supprimant soit son élément en A ou B.

Question: Y at-il un moyen de quarantee une bijection entre A et B de sorte qu'un changement soit dans A ou dans B entraîne un changement dans l'autre ensemble?

+0

Avez-vous déjà eu une réponse à cette question? Je ne suis pas sûr de bien comprendre la question, mais si vous voulez élaborer un peu, je suis sûr que cela peut être résolu ... – DrAl

+0

Al: Merci pour votre note. -Non, je n'ai pas reçu de réponse. –

+0

Ok, donc est-ce dans un script Vim ou dans le code C lui-même? Essayez-vous de changer automatiquement une ligne de code C si une autre ligne change ou essayez-vous de faire quelque chose avec les balises de la fonction taglist() dans un script Vim? Dans les deux cas, il devrait être possible, je pense juste qu'un peu plus d'explication aiderait ... – DrAl

Répondre

3

Je doute fortement que vous puissiez le faire. Le plugin taglist utilise ctags pour collecter les symboles dans votre code et les afficher dans une division latérale. Le split latéral contient des informations en lecture seule (si vous essayez de travailler sur cette fenêtre, vim vous indique que modifiable est désactivé pour ce tampon). Ce que vous voulez réaliser impliquerait une analyse assez complexe du code source que vous modifiez. Même une tâche simple comme le renommage automatique (en supposant que vous modifiez une entrée de nom de fonction dans le tampon de listes de balises et toutes les instances de votre source sont mises à jour) nécessite une analyse complexe, qui dépasse les fonctionnalités de ctags. Supprimer et garder tout en synchronisme avec une relation bijective est encore plus complexe. Supposons que vous ayez une ligne printf dans laquelle vous utilisez une macro que vous voulez supprimer. Que devrait-il arriver à cette ligne? Si la ligne entière disparaît, ou juste la macro (dans ce cas, la ligne sera probablement syntaxiquement incorrecte.)

taglist est un joli plugin pour naviguer dans votre code, mais il est inadapté pour le refactoring automatique (ce qui est ce que vous voulez Edit: en ce qui concerne la complexité de calcul, le pire des scénarios est que vous devez scruter l'ensemble du document à chaque frappe, en recherchant de nouvelles occurrences d'étiquettes qui pourraient être intégrées, donc dans ce sens vous On pourrait dire que c'est O (n) à chaque frappe, c'est bien sur exagéré et la pire méthode pour l'implémenter.Je ne suis pas conscient de la complexité de la syntaxe syntaxique de vim, (ce qui serait utile pour extraire des balises, via tokenization approprié), mais je l'estimerais très l ow, et très limité dans la quantité de données analysées (il est peu probable que vous ayez de grandes constructions à analyser pour extraire le token et comprendre son contexte). En tout cas, ce n'est pas comme ça que ça fonctionne. La liste de balises exécute ctags à chaque invocation de vim, elle n'analyse pas le document en direct pendant que vous tapez. Ceci est cependant fait par Eclipse, XCode et KDevelop par exemple, qui fournissent également des outils pour le refactoring automatique ou semi-automatique, et peuvent éventuellement intégrer vim en tant qu'éditeur.Si vous avez besoin de ces fonctionnalités, vous utilisez certainement le mauvais outil.

+0

+1 pour l'analyse du ciblage. Pouvez-vous clarifier un peu plus? Quelle serait la complexité de calcul pour un tel algorithme? –