¿Cómo puedo refactorizar un proyecto en emacs (cambiar el nombre del método en todas partes)?

15

Quiero reescribir partes de un proyecto de código abierto. Esto incluye los métodos de cambio de nombre. ¿Cómo puedo hacer eso de manera eficiente en emacs en todo el proyecto?

Prefiero no usar hacks como buscar y reemplazar en cada búfer.

El gato no divertido
fuente
1
¿Cual idioma?
phils
¿Has mirado en ag / grep + wgrep + search / replace? No abres buffers individualmente en eso. Relacionado: emacs.stackexchange.com/a/243/115
Kaushal Modi
Pitón. Me doy cuenta de que mi pregunta no era la mejor, lo siento.
The Unfun Cat
Como esta pregunta se ha llevado a la cima (en caso de que alguien se tope con esto de Google), hay una biblioteca de python dedicada para la refactorización llamada Rope. Es más inteligente que las otras soluciones ofrecidas, ya que tiene en cuenta el contexto. Se implementa en Emacs en un paquete llamado ropemacs.
jcaw
@TheUnfunCat ¿puede agregar más contexto a su pregunta? A partir de ahora es bastante vago, y agregar que desea hacer esto en un proyecto de Python aclararía muchas cosas.
DoMiNeLa10

Respuestas:

14

Ahora uso helm-agpara encontrar todas las instancias del nombre de la función (busca en todos los archivos, incluidos subdirectorios, no solo en buffers abiertos), y luego uso C-c C-epara ingresar un buffer que enumera todas las coincidencias y allí cambio el nombre de la función. Cuando termine, presiono C-c C-c (helm-ag--edit-commit)para almacenar los cambios en todos los archivos abiertos.

Esto puede sonar confuso, pero consulte https://github.com/ShingoFukuyama/helm-swoop

Cuando lo asimiles, llorarás de alegría porque existe una funcionalidad tan maravillosa.

El gato no divertido
fuente
1
Me corrió una lágrima por la mejilla.
mihai
1
literalmente tenía lágrimas en los ojos al ejecutar este flujo de trabajo por primera vez, no es broma
Paul
Gran solución!
fraxture
6

Como no especificó el idioma, es difícil dar mejores respuestas que "Buscar y reemplazar".

Usando wgrep

Si solo desea reemplazar (interactivamente) todas las instancias de un símbolo con otro, wgrep es su mejor opción. Le permite editar interactivamente el búfer de resultados grep.

  1. Hacer M-x package-install RET wgrep.
  2. Ejecutar M-x rgrep. Le hará algunas preguntas fáciles y luego realizará una búsqueda recursiva del término de búsqueda dentro del directorio que especificó.
  3. Cambie al búfer de resultados y haga M-x wgrep-change-to-wgrep-mode. Este búfer ahora es editable. Cualquier cambio que realice aquí se reflejará en los propios archivos.
  4. Ejecute a replace-regexpo a query-replace-regexpen este búfer para refactorizar.
  5. Termina tus ediciones con M-x wgrep-save-all-buffersy M-x wgrep-finish-edit.
Malabarba
fuente
3

Puede usar counsel-rgseguido de C-c C-opara obtener una lista de todos los candidatos en un búfer. Presione wpara editarlos con wgrep. Recomiendo ieditpara cambiar el nombre de los símbolos. Presione C-c C-cpara comprometerse.

Dependencias:

abo-abo
fuente