Добавление модуля в предложения использования всех модулей в проекте?
Я обнаружил, что некоторые виды очистки и рефакторинга кода ОЧЕНЬ усложняются из-за сложности добавления модуля в условия использования большого проекта.
Я хочу добавить модуль в предложение interface-using-all всех модулей delphi .pas в одном проекте, а это означает, что это нужно делать вручную более чем в 500 местах. Каждый раз, когда я реорганизую гигантский блок и делю его на один блок на два, я, вероятно, могу искать и заменять, используя что-то вроде "notepad++", чтобы изменить "MyOldUnit" на "MyOldUnit,MyNewUnit", но иногда это просто не безопасно делать, Он также пропускает случаи, когда "MyOldUnit" является последним в предложении использования ("использует MyOldUnit;").
В любом случае, поиск и замена в файлах является опасным делом. Если такого инструмента не существует, я собираюсь написать его, используя синтаксический анализатор Castalia delphi. Я проверил GExperts, Castalia, ModelMakerCodeExplorer, и ни у одного из них нет способа пакетной вставки модулей во все предложения использования в проекте. Я надеюсь, что инструмент для этого существует.
Во-вторых, во многих случаях я перемещаю функцию из одной единицы, где она не принадлежит другой, но это означает, что мне нужно добавить эту единицу к 30% единиц проекта, а не к другим 70%, где она уже есть. добавлено. Это означает, что требуется парсерный подход, а не регулярный.
1 ответ
Потому что мы все пишем код, который мы непременно будем использовать в других проектах. Если вы перемещаете части интерфейса из одного устройства в другое, вы разрушаете свои проекты. То же самое со старыми и новыми единицами.
Но вы можете рефакторинг, не нарушая ваши проекты. Просто пометьте части (единицу, класс, метод, процедуру) как устаревшие. Ваш код работает, но компилятор предупредит вас.
Вот пример перемещения процедуры из одного блока в другой:
unit Foo;
interface
procedure FooProc; deprecated; // new location in unit FooNew
implementation
uses
FooNew;
procedure FooProc;
begin
FooNew.FooProc;
end;
end.