¿Qué herramientas de refactorización usas para Python?

Tengo un montón de clases que quiero cambiar de nombre. Algunos de ellos tienen nombres pequeños y ese nombre se reutiliza en otros nombres de clase, donde no quiero que se cambie ese nombre. La mayor parte de esto vive en código Python, pero también tenemos algún código XML que hace referencia a los nombres de clase.

La simple búsqueda y reemplazo solo me lleva tan lejos. En mi caso, quiero cambiar el nombre de AdminAction a AdminActionPlug y AdminActionLogger a AdminActionLoggerPlug, por lo que la primera búsqueda y reemplazo también afectará a la segunda, erróneamente.

¿Alguien tiene experiencia con las herramientas de refactorización de Python? Puntos de bonificación si también pueden arreglar nombres de clase en los documentos XML.

Mientras tanto, he probado dos herramientas que tienen algún tipo de integración con vim.

La primera es Rope , una biblioteca de refactorización de python que viene con un complemento Vim (y emacs). Lo intenté por unos pocos nombres, y eso definitivamente funcionó como se esperaba. Me permitió previsualizar la refactorización como una diferencia, lo cual es bueno. Es un poco impulsado por texto, pero eso está bien para mí, solo toma más tiempo aprenderlo.

El segundo es Bicycle Repair Man que supongo que gana puntos en nombre. También se enchufa en vim y emacs. No he jugado mucho con eso todavía, pero recuerdo haberlo intentado hace mucho tiempo.

No he jugado con los dos lo suficiente, o he intentado más tipos de refactorización, pero haré un poco más de pirateo con ellos.

Recomiendo encarecidamente PyCharm , no solo para refactorizaciones. Desde que la primera respuesta de PyCharm se publicó aquí hace unos años, el soporte de refactorización en PyCharm ha mejorado significativamente.

Refactorizaciones de Python disponibles en PyCharm (última verificación 2016/07/27 en PyCharm 2016.2)

  • Cambiar Firma
  • Convertir a Python Paquete / Módulo
  • Dupdo
  • Extracto Refactorizaciones
  • En línea
  • Invertir booleano
  • Hacer la función de nivel superior
  • Mover refactorizaciones
  • Empujar a los miembros hacia abajo
  • Jalar a los miembros
  • Renombrar Refactorizaciones
  • Eliminar de forma segura

Refactorizaciones XML (verifiqué en el menú contextual en un archivo XML):

  • Rebautizar
  • Movimiento
  • Dupdo
  • Extraer la subconsulta como CTE
  • En línea

Refactorizaciones de Javascript:

  • Extraer parámetro en JavaScript
  • Cambiar firma en JavaScript
  • Extraer variable en JavaScript

WingIDE 4.0 (WingIDE es mi IDE de python de elección) admitirá algunas refactorizaciones, pero acabo de probar la última versión beta, beta6, y … aún queda trabajo por hacer. El método de retracción funciona bien, pero Rename Symbol no lo hace.

Actualización: La versión 4.0 ha arreglado todas las herramientas de refactorización. Funcionan muy bien ahora.

Tu IDE puede soportar refactorizaciones !! Compruébalo Eric, Eclipse, WingIDE tiene herramientas integradas para refactorizaciones (Rename incluido). Y eso son refactorizaciones muy seguras: si algo puede salir mal, IDE no hará ref.

También considere agregar algunas pruebas unitarias para asegurarse de que su código no sufrió durante las refactorizaciones.

PyCharm tiene algunas características de refactorización.

PINTÓN REFACTORIO

El cambio de nombre de refactorización permite realizar cambios globales de código de forma segura e instantánea. Los cambios locales dentro de un archivo se realizan en el lugar. Las refactorizaciones funcionan en proyectos Python y Django.

Use Presentar Variable / Campo / Constante y Local en línea para mejorar la estructura del código dentro de un método, Extraer método para dividir métodos más largos, Extraer Superclase , Empujar hacia arriba , Desplegar y Mover para mover los métodos y clases.

Me gustaría echar un vistazo a Bowler ( https://pybowler.io ).

Es más adecuado para usar directamente desde la línea de comandos que la cuerda y alienta la creación de secuencias de comandos (secuencias de comandos únicas).