Автоматическое удаление директив компилятора Delphi IFDEf

StackOverflow https://stackoverflow.com/questions/2033230

Вопрос

В настоящее время я работаю с «унаследованным» кодом, который имеет (случайно разбросанный повсюду) целый набор директив условного компилятора, основанный на версии Delphi, начиная с Delphi 2.С этого момента вся разработка будет осуществляться с помощью Delphi 2009 или более поздних версий.Есть ли в Delphi 2009 инструмент или плагин, который автоматически удаляет сегменты условного кода компилятора на основе указанной «минимальной» версии?

Это было полезно?

Решение

Я очень рекомендую Препроцессор Delphi Inspiration Pascal (DIPP)

Это может выполнять ряд действий с исходным файлом в дополнение к удалению условных определений, включая «встраивание» включаемых файлов и удаление комментариев (все это, конечно, легко настраивается и контролируется опциями, предоставляемыми процессору).

Функциональность определения условий особенно полезна, поскольку вы можете либо просто удалить все такие условия, либо предоставить набор определений, которые вы хотите применить.Затем DIPP создаст исходный файл, который отражает то, как он будет выглядеть для компилятора с этими ОПРЕДЕЛЕННЫМИ символами, но без самих условных директив.

Итак, в вашем случае вы бы просто определили символы, соответствующие вашей «базовой» версии Delphi.

Другие советы

Вы должны указать JEDI PreProcessor (Pascal PreProcessor) в JCL попытка.

В багажнике нашего SVN исходники можно найти в директории jcl/devtools/jpp а в нашей последней версии (2.1) zip-файл jpp.exe можно найти в каталоге devtools.

Я не знаю такого инструмента, но написать его должно быть относительно просто.

  1. Перебрать все файлы в каталоге, используя FindFirst и FindNext
  2. Использовать TStringList.LoadFromFile прочитать все файлы pas.
  3. Прокрутите строки и найдите {$IfDef} директивы.Если версия, указанная в условном разделе, старше D2009, удалите весь текст до {$EndIf}.
  4. Использовать TStringList.SaveToFile для записи измененного файла на диск.

Я бы посоветовал менять ТОЛЬКО код, которым вы полностью управляете.Однако если вы также собираетесь изменить существующий сторонний код, я предлагаю вам пройти через каждый IFDEF, определенный для проверки.Некоторые поставщики не используют стандартные вызовы IFDEF VERxxx, а создают свои собственные, которые могут называться примерно так: VER70UP или что-то в этом роде.Чаще всего это происходит во включаемых файлах, поэтому ищите файл {$I ???.INC} в начале каждого файла, а затем анализируйте его, чтобы понять, что и как используется.

Другая причина для анализа каждого $DEFINE/$UNDEF заключается в том, что конкретная версия может включить новое определение, которое вы ранее не проверяли... то, что в конечном итоге приводит к мертвому коду.

Использовать GЭксперты, вы можете использовать GrepSearch или GrepRegularExpressions для поиска в коде, а затем использовать инструмент «Заменить» в GrepResults, чтобы удалить все, что вам нужно.

Вы можете выполнить операцию поиска и замены во всех совпадениях в списке или только в выбранном файле/совпадении.Когда вы выберете один из этих параметров, появляется диалог, предлагая строку использовать вместо соответствующего текста.Обратите внимание, что формы, которые в настоящее время открыты, не могут заменить текст из -за ограничений в IDE.Пожалуйста, закройте все формы, прежде чем пытаться заменить в них текст.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top