2012-05-08 5 views
1

Existe-t-il un moyen de modifier les conventions de dénomination des variables dans Eclipse (en particulier Eclipse CDT)? Par exemple, puis-je faire une recherche et remplacer des variables avec des noms comme need_foo et changer cela pour NeedFoo?Modification d'un schéma de dénomination dans Eclipse

Ajout et suppression de traits de soulignement est facile, évidemment, mais je ne vois pas un moyen de changer de cas. Les expressions rationnelles de Perl ont des modificateurs \u et \l pour les caractères majuscules et minuscules, mais apparemment, Eclipse ne le fait pas.

Répondre

1

Il n'y a pas de manière automatique de renommer en masse plusieurs noms de fonctions non conformes dans CDT. Il existe cependant une règle d'analyse de code, conçue pour signaler ce genre de choses. Il utilise Eclipse Regex described in their online help. Ceux-ci vous donneront un marqueur de niveau "Information" dans votre vue de problèmes.

La façon dont ils fonctionnent correspond à une expression régulière par rapport à chaque nom de fonction, et déclenche une erreur/avertissement/information si cela ne renvoie pas une correspondance. Vous pouvez y accéder via "Fenêtre-> Préférences-> C/C++ -> Analyse de code". C'est à peu près à mi-chemin dans la liste déroulante (dans Eclipse Indigo).

Pour répondre directement à votre deuxième paragraphe, Eclipse ne dispose pas d'un équivalent de Perl \u et \l, le plus proche, il a est (? ISMD-ISMD), qui vous permet d'activer correspondant en fonction de cas.

Selon que l'outil d'analyse du code retourne 5 ou 50.000 erreurs:

Seules quelques définitions de fonction pour changer le nom

Vous pouvez utiliser l'outil standard de changement de nom de refactoring. Cliquez avec le bouton droit sur le nom de la fonction, "Refactor-> Renommer" remplacera toutes les références à cette fonction par votre nouveau nom de fonction (en respectant différentes portées).

Beaucoup d'erreurs

C'est ... pas aussi agréable. Vu qu'il n'y a pas de méthode intégrée, vous devez le faire en externe. La première approche que je prendrais est de voir s'il y a un plugin existant là-bas qui ferait cela.

A défaut, vous pouvez peut-être utiliser l'outil d'analyse de code pour identifier les noms de fonctions non conformes, puis en utiliser la sortie comme entrée pour un script Perl personnalisé. Vous pouvez le faire en quelques étapes:

void FooBar(void) {} 
int main(int argc, char *argv[]) 
{ 
    FooBar(); 
    return 0; 
} 

1) Exécutez l'analyse de code, et copier et coller les avertissements dans un fichier texte:

Bad function name "FooBar" (pattern /^(?-i:([a-z]+_[A-Z])|[a-z])(?i:[a-z]*)\z/) main.c /TestMultiThread line 47 Code Analysis Problem 

2) Modifier la définition de la fonction, fooBar() - ->FooBar(), en utilisant les erreurs ci-dessus comme entrée pour un script perl (notez que vous avez le nom de la fonction mal conforme, le nom du fichier et le numéro de ligne).

3) compiler et ensuite utiliser undefined reference to fooBar() de la sortie du compilateur de renommer toutes les références:

undefined reference to `FooBar' main.c /TestMultiThread line 50 C/C++ Problem 

Cette méthode aurait des allées courtes, comme le compilateur donnant une liste partielle des références non définies en raison de la compilation se termine 'tôt', auquel cas vous voudriez l'exécuter plusieurs fois.Une autre chose à regarder est Refactor Scripts (Refactor -> Appliquer Script), mais à partir du peu que j'ai vu de cela, je ne pense pas que ça va faire ce que vous voulez. Dans l'ensemble, j'ai trouvé que les outils de refactoring dans Eclipse CDT n'étaient pas aussi puissants que ceux de Java (d'après ce dont je me souviens). Encore mieux que ceux du Bloc-notes (mais pas le CDT, c'est un environnement de développement génial!)

+0

Ah, oups, vous n'êtes pas à la recherche de fonctions, mais de variables. Ma faute. Aurait dû lire de plus près. En jetant un coup d'œil à la fonction d'analyse de code, il n'y a pas d'équivalent pour les variables. Donc, je voudrais regarder dans une solution externe. Il y a des plugins pour Lint que vous pourriez obtenir, avez-vous regardé dans Lint du tout? – chrisb

+0

Je n'ai pas encore regardé Lint, mais cela me donne d'excellents endroits pour commencer. Merci. –

Questions connexes