2009-06-09 9 views

Répondre

5

Je doute que la fonctionnalité GExperts Regex vous permet d'effectuer des recherches au-delà de délimiteurs de ligne.

Si vous ne me dérange pas utiliser un composant comme TPerlRegEx, le code ci-dessous devrait vous aider à démarrer à rouler votre propre recherche.

var 
    emptyExceptBlock: TPerlRegEx; 
    Results: TStringList; 

emptyExceptBlock := TPerlRegEx.Create(nil); 
emptyExceptBlock.RegEx := except\s+((//.*|/\*.*\*/|\(\*.*\*\))\s+)*end; 
emptyExceptBlock.Options := [preExtended]; 
emptyExceptBlock.Subject := LoadFromFile('YourFile.pas'); 
Results := TStringList.Create; 
if emptyExceptBlock.Match then begin 
    repeat 
     Results.Add(emptyExceptBlock.MatchedExpression); 
    until not emptyExceptBlock.MatchAgain; 
end; 
+0

Le regex doit être modifié pour permettre également des commentaires intégrés comme « // ignorer toutes les exceptions » - Techniquement, il est un gestionnaire d'exception vide. – mghie

+0

@mghie: J'ai ajusté le regex en //,/* */et (*). J'ai laissé des commentaires imbriqués comme excercise pour ceux qui veulent aller aussi loin. –

+0

Une excellente solution! Oui, il y a toujours des limitations dans la dernière version de GExpert. Ce serait une fonctionnalité très intéressante si GExpert pouvait effectuer des tâches d'analyse de code statique simples en utilisant TPerlRegEx. (Même s'il y a des faux positifs) – mjn

0

Il est un outil d'insertion automatique appelé Todo (qui ne fait pas partie de GExperts, je pense que je l'ai obtenu de CodeCentral) qui insère automatiquement dans todos vides begin/blocs d'extrémité. Peut-être que c'est ce que tu veux?

+0

Suivant la règle « si vous le touchez, vous possédez » - l'outil d'analyse ne doit pas modifier la source, seul rapport « violations » et éventuellement suggérer une pénalité;) – mjn

Questions connexes