¿Existe una herramienta de refactorización de elisp que pueda cambiar el nombre de las variables locales y los argumentos de la función? Me gustaría poder convertir:
(defun my-func (s r)
...
(use s .. r))
dentro:
(defun my-func (string replacement)
...
(use string .. replacement))
usando un método que sabe cómo encontrar referencias variables. Estoy bien si no es súper higiénico.
Respuestas:
TL; DR:
erefactor-rename-symbol-in-buffer
Está buscando una función de cambio de nombre léxicamente inteligente, una que cambie el nombre de las variables por su alcance, no solo una tonta búsqueda y reemplazo. Existen paquetes como este para muchos idiomas, pero al momento de escribir (abril de 2019), en realidad no hay muchas opciones para Emacs Lisp. El
erefactor
paquete es el único que conozco.erefactor-rename-symbol-in-buffer
es la función que quieres Es un comando inteligente de buscar y reemplazar que reemplazará los símbolos en el ámbito actual (incluidas las cadenas de documentos). La limitación de este comando es que no buscará fuera del búfer actual. Es inteligente, pero no perfecto. Le pedirá que confirme cada ocurrencia para garantizar que el resultado final sea sanitario.La otra función de cambio de nombre es
erefactor-rename-symbol-in-package
. Esto no funciona de la misma manera, solo funciona en símbolos globales. Se basa en que su paquete esté configurado correctamente, con un sistema de agrupación y un prefijo, y necesita que la variable coincida con el prefijo del paquete. No es muy robusto: fallará si no ha configurado las cosas de la manera que esta función espera. Creo que si está cambiando el nombre de un símbolo global, también puede usar un ingenuo buscar y reemplazar ya que los símbolos globales en Elisp no tienen un espacio de nombres. Los beneficios de la comprensión léxica son mínimos. Este comando es demasiado frágil para la compensación. Sugeriría simplemente usarprojectile-replace
.Erefactor tiene una serie de otros comandos de Elisp que pueden resultarle útiles. Una lista (incompleta) está disponible en el archivo Léame .
No se describe en la página de GitHub, pero
erefactor
está disponible en MELPA (M-x package-install RET erefactor
). La página de MELPA se puede encontrar aquí .fuente