Я понимаю вашу точку зрения и полностью согласен, что такой инструмент будет полезен при работе с устаревшим кодом. К сожалению, я не знаю ни одного существующего инструмента (я должен добавить бесплатный инструмент здесь, инструменты статического анализа, конечно, должны быть в состоянии сделать это легко, но я не знаю ни одного бесплатного инструмента статического анализа кода), который способен сделать это .
Но я думаю, вы могли бы легко написать такой инструмент за несколько минут. Небольшой графический интерфейс с памяткой и кнопкой должно быть достаточно. Затем просто скопируйте подсказки компилятора в заметку и нажмите кнопку. Затем инструмент анализирует каждую строку. Он может легко проверить, содержит ли строка искомую подсказку, и каждая такая строка имеет одинаковую структуру, поэтому анализ должен быть относительно простым. Затем он может извлечь имя файла и номер строки, открыть файл и удалить объявление переменной. Это может быть немного сложно в случае нескольких объявлений переменных в одной строке, но я думаю, что это выполнимо.
Я не знаю, слишком ли много для вас усилий по сравнению с задачей удаления всех объявлений переменных самостоятельно. Но я бы хотел увидеть такой инструмент, поэтому не стесняйтесь писать его:)
Надеюсь, это помогло хоть немного.
Хорошо, я действительно не вижу здесь никаких проблем. Для синтаксического анализа:
function ParseHint (const HintText : String; out HintInfo : THintInfo) : Boolean;
var
I, J : Integer;
HintName : String;
begin
Result := False;
for I := 1 to Length (HintText) do
begin
if (HintText [I] = '(') then
begin
J := I + 1;
while (HintText [J] <> ')') do Inc (J);
HintInfo.LineNumber := StrToInt (MidStr (HintText, I+1, J-(I+1)));
HintInfo.SourceFile := MidStr (HintText, 12, I-12);
HintName := MidStr (HintText, J+3, 5);
if (HintName <> 'H2164') then Exit (False);
end;
if (HintText [I] = '''') then
begin
J := I + 1;
while (HintText [J] <> '''') do Inc (J);
HintInfo.VarName := MidStr (HintText, I+1, J-(I+1));
Exit (True);
end;
end;
end;
Что ж, чтение исходного файла должно быть легким, поэтому единственная оставшаяся часть - это удаление переменной из строки объявления. Мы можем просто найти вхождения HintInfo.VarName в строке и проверить, являются ли символы до и после вхождения не буквами, а только «,» или «:». Если это так, мы можем просто удалить его. Это охватывает все эти случаи:
var UnusedVar : Integer;
var
UnusedVar,
AnotherVar : Integer;
var
UnusedVar, AnotherVar : Integer;
Скажите, если я ошибаюсь или если я забыл какие-либо случаи, но я думаю, что это сработает, и я решу проблему удаления неиспользуемых переменных из исходных файлов delphi, используя подсказки, сгенерированные компилятором.