widzę punktu i całkowicie zgadzam się, że takie narzędzie będzie przydatne podczas pracy z kodem starszych. Niestety nie znam żadnego istniejącego narzędzia (powinienem dodać tutaj darmowe narzędzie, statyczne narzędzie analityczne powinno oczywiście być w stanie to zrobić z łatwością, ale nie znam żadnego narzędzia do darmowej analizy statycznej), które jest w stanie to zrobić .
Ale myślę, że można łatwo napisać takie narzędzie w ciągu kilku minut. Mały GUI z notatką i przyciskiem powinien wystarczyć. Następnie po prostu skopiuj wskazówki kompilatora do notatki i naciśnij przycisk. Narzędzie analizuje następnie każdą linię. Może łatwo sprawdzić, czy linia zawiera wskazówkę, której szukasz, i każda taka linia ma taką samą strukturę, więc parsowanie powinno być stosunkowo łatwe. Następnie może wyodrębnić nazwę pliku i numer linii, otworzyć plik i usunąć deklarację zmiennej. Może to być nieco trudne w przypadku wielu deklaracji zmiennych w jednym wierszu, ale myślę, że jest to wykonalne.
Nie wiem, czy to dla ciebie za duży wysiłek, w porównaniu z zadaniem samodzielnego usunięcia wszystkich deklaracji zmiennych. Ale chciałbym zobaczyć takie narzędzie, więc zapraszam do napisania :)
Nadzieję, że pomógł choć trochę.
Okej, naprawdę nie widzę tutaj żadnych problemów. Dla części analizy składniowej:
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;
Cóż, czytając plik źródłowy powinien być łatwy, więc tylko część remaing jest usunięcie zmiennej z jej linii deklaracji. Możemy po prostu wyszukać wystąpienia HintInfo.VarName w linii i sprawdzić, czy znak przed i po wystąpieniu nie jest literą, ale tylko ",", "lub": ". W takim przypadku możemy po prostu go usunąć. Obejmuje to wszystkie te przypadki:
var UnusedVar : Integer;
var
UnusedVar,
AnotherVar : Integer;
var
UnusedVar, AnotherVar : Integer;
Powiadom mnie, jeśli się mylę lub jeśli zapomniałem przypadki, ale myślę, że to będzie działać i woulde rozwiązać problem usuwania nieużywanych zmiennych z plików źródłowych Delphi za pomocą wygenerowany przez kompilator poradnik.
Kilka minut będzie bardzo dużym błędem, ponieważ nie jest to banalny problem. –
Cóż, może mógłbyś wskazać, jakie są twoje problemy? Dla jasności: nie mówię o wyszukiwaniu nieużywanych zmiennych, ale interpretowaniu wskazówek kompilatora Delphi. – jpfollenius
OK, interpretowanie podpowiedzi nie powinno być takie trudne. Ale to nie jest główna część problemu. Proszę spojrzeć na moją odpowiedź poniżej: –