Renombrar refactorización de variables locales

10

¿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.

Gracjan Polak
fuente
44
Varios cursores pueden editar todas las instancias de un símbolo en defun actual.
Malabarba
Ver también iedit.
InHarmsWay
2
iedit: github.com/victorhge/iedit
Gracjan Polak
44
No todo el código es nuestro. Algún código es viejo.
Gracjan Polak
2
Por lo general, regexp replace en region \ bSYM \ b ...
BRPocock

Respuestas:

2

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 erefactorpaquete es el único que conozco.

erefactor-rename-symbol-in-bufferes 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 usar projectile-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 erefactorestá disponible en MELPA ( M-x package-install RET erefactor). La página de MELPA se puede encontrar aquí .

jcaw
fuente