2009-06-09 8 views
1

В новых версиях GExperts утилита grep теперь поддерживает более «экспертные» выражения.Как я могу найти все пустые попытки ... кроме блоков с GExperts grep?

Я еще не нашел способ найти пустую попытку ... кроме блоков в источниках Delphi с использованием регулярных выражений, как я мог это сделать с помощью инструмента GExperts grep?

ответ

5

Я сомневаюсь, что функциональность GExperts Regex позволяет выполнять поиск за пределами разделителей строк.

Если вы не возражаете против использования такого компонента, как TPerlRegEx, следующий код должен помочь вам начать собственный поиск.

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

Регулярное выражение должно быть изменено так же, как и встроенные комментарии, такие как «// игнорировать все исключения» - технически это по-прежнему пустой обработчик исключений. – mghie

+0

@mghie: Я скорректировал регулярное выражение для соответствия //,/* */и (* *). Я оставил вложенные комментарии в качестве упражнения для тех, кто хочет зайти так далеко. –

+0

Отличное решение! Да, в последней версии GExpert все еще есть ограничения. Было бы очень интересной особенностью, если бы GExpert мог выполнять некоторые простые задачи анализа статического кода, используя TPerlRegEx. (даже если есть ложные срабатывания) – mjn

0

Существует инструмент под названием Insert Auto Todo (который не является частью GExperts, я думаю, что я получил его от CodeCentral), который автоматически вставляет Todos в пустые начала/конца блоков. Может, это то, чего ты хочешь?

+0

Следуя правилу «если вы касаетесь его, вы его владеете» - инструмент анализа не должен изменять источник, только сообщать об «нарушениях» и опционально предлагать штраф;) – mjn