Удаление директив компилятора Delphi IFDEf автоматически - PullRequest
3 голосов
/ 09 января 2010

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

Ответы [ 5 ]

6 голосов
/ 09 января 2010

Я настоятельно рекомендую препроцессор Delphi Inspiration Pascal (DIPP)

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

Функциональность условных определений особенно полезна, поскольку вы можете либо просто удалить все такие условные выражения, либо предоставить набор DEFINE, которые вы хотите применить. DIPP затем выдаст исходный файл, который отражает то, как он будет выглядеть для компилятора с этими символами DEFINED, но без самих условных директив.

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

4 голосов
/ 09 января 2010

Вы должны попробовать JEDI PreProcessor (Pascal PreProcessor) в JCL .

В транке в нашем SVN источник можно найти в dir jcl / devtools / jpp , а в нашем последнем выпуске (2.1) zip-файл jpp.exe можно найти в dir devtools .

1 голос
/ 11 января 2010

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

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

1 голос
/ 09 января 2010

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

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

Используйте GExperts , вы можете использовать GrepSearch или GrepRegularExpressions для поиска в вашем коде, а затем использовать инструмент замены в GrepResults, чтобы удалить все, что вам нужно.

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

...