Czy istnieje narzędzie refaktoryzujące Elisp, które może zmieniać nazwy zmiennych lokalnych i argumentów funkcji? Chciałbym móc włączyć:
(defun my-func (s r)
...
(use s .. r))
w:
(defun my-func (string replacement)
...
(use string .. replacement))
za pomocą metody, która wie, jak znaleźć odwołania do zmiennych. Nic mi nie jest, jeśli to nie jest superhigieniczne.
Odpowiedzi:
TL; DR:
erefactor-rename-symbol-in-buffer
Szukasz leksykalnie inteligentnej funkcji zmiany nazwy - takiej, która zmienia nazwy zmiennych według ich zakresu, a nie tylko głupiego znajdowania i zastępowania. Takie pakiety istnieją w wielu językach, ale od momentu pisania (kwiecień 2019 r.) Emacs Lisp nie ma wielu opcji.
erefactor
Pakiet jest jedynym, wiem.erefactor-rename-symbol-in-buffer
jest funkcją, którą chcesz. To inteligentne polecenie znajdź i zamień, które zastąpi symbole w bieżącym zakresie (w tym ciągi dokumentów). Ograniczeniem tego polecenia jest to, że nie będzie wyszukiwał poza bieżącym buforem. Jest sprytny, ale nie idealny. Poprosi Cię o potwierdzenie każdego zdarzenia, aby upewnić się, że wynik końcowy jest higieniczny.Inną funkcją zmiany nazwy jest
erefactor-rename-symbol-in-package
. To nie działa w ten sam sposób - działa tylko na symbolach globalnych. Zależy to od prawidłowego skonfigurowania pakietu, z systemem grupowania i prefiksem, i potrzebuje zmiennej dopasowującej prefiks pakietu. Nie jest bardzo solidny - zawiedzie, jeśli nie skonfigurujesz rzeczy tak, jak oczekuje ta funkcja. Myślę, że jeśli zmieniasz nazwę globalnego symbolu, równie dobrze możesz użyć naiwnego wyszukiwania i zamień, ponieważ globalne symbole w Elisp nie mają przestrzeni nazw. Korzyści ze zrozumienia leksykalnego są minimalne. To polecenie jest zbyt delikatne, by można było z niego skorzystać. Proponuję po prostu użyćprojectile-replace
.Erefactor ma wiele innych poleceń Elisp, które mogą ci się przydać. (Niekompletna) lista jest dostępna w pliku Readme .
Nie jest to opisane na stronie GitHub, ale
erefactor
jest dostępne w MELPA (M-x package-install RET erefactor
). Strona MELPA znajduje się tutaj .źródło