Gibt es ein elisp Refactoring-Tool, mit dem lokale Variablen und Funktionsargumente umbenannt werden können? Ich möchte mich wenden können:
(defun my-func (s r)
...
(use s .. r))
in:
(defun my-func (string replacement)
...
(use string .. replacement))
Verwenden einer Methode, die weiß, wie Variablenreferenzen gefunden werden. Ich bin okay, wenn es nicht superhygienisch ist.
Antworten:
TL; DR:
erefactor-rename-symbol-in-buffer
Sie suchen nach einer lexikalisch intelligenten Umbenennungsfunktion, die Variablen nach ihrem Umfang umbenennt und nicht nur dummes Suchen und Ersetzen. Pakete wie dieses gibt es für viele Sprachen, aber zum Zeitpunkt des Schreibens (April 2019) gibt es für Emacs Lisp nicht viele Optionen. Das
erefactor
Paket ist das einzige, das ich kenne.erefactor-rename-symbol-in-buffer
ist die gewünschte Funktion. Es ist ein intelligenter Befehl zum Suchen und Ersetzen, der Symbole im aktuellen Bereich (einschließlich Dokumentzeichenfolgen) ersetzt. Die Einschränkung dieses Befehls besteht darin, dass nicht außerhalb des aktuellen Puffers gesucht wird. Es ist klug, aber nicht perfekt. Sie werden aufgefordert, jedes Vorkommen zu bestätigen, um sicherzustellen, dass das Endergebnis hygienisch ist.Die andere Umbenennungsfunktion ist
erefactor-rename-symbol-in-package
. Dies funktioniert nicht auf die gleiche Weise - es funktioniert nur bei globalen Symbolen. Es setzt voraus, dass Ihr Paket korrekt eingerichtet ist, mit einem Gruppierungssystem und einem Präfix, und die Variable muss mit dem Präfix des Pakets übereinstimmen. Es ist nicht sehr robust - es schlägt fehl, wenn Sie die Einstellungen nicht so vorgenommen haben, wie es diese Funktion erwartet. Ich denke, wenn Sie ein globales Symbol umbenennen, können Sie auch ein naives Suchen und Ersetzen verwenden, da globale Symbole in Elisp keinen Namespace haben. Die Vorteile des lexikalischen Verständnisses sind minimal. Dieser Befehl ist zu zerbrechlich für den Kompromiss. Ich würde vorschlagen, nur zu verwendenprojectile-replace
.Erefactor verfügt über eine Reihe weiterer Elisp-Befehle, die Sie möglicherweise nützlich finden. Eine (unvollständige) Liste finden Sie in der Readme-Datei .
Es wird nicht auf der GitHub-Seite beschrieben,
erefactor
ist aber auf MELPA (M-x package-install RET erefactor
) verfügbar . Die MELPA-Seite finden Sie hier .quelle