python refactoring

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



refactoring (6)

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

El primero es Rope , una biblioteca de refactorización de python que viene con un complemento Vim (y emacs). Lo intenté por unos pocos renombrados, y definitivamente funcionó como se esperaba. Me permitió obtener una vista previa de la refactorización como una diferencia, lo cual es bueno. Está un poco dirigido por texto, pero eso está bien para mí, solo lleva más tiempo aprender.

El segundo es Bicycle Repair Man, que creo que gana puntos en nombre. También se conecta a vim y emacs. Todavía no jugué mucho con eso, pero recuerdo haberlo intentado hace mucho tiempo.

Aún no jugué lo suficiente o intenté más tipos de refactorización, pero haré más piratería con ellos.

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

La simple búsqueda y el reemplazo solo me llevan tan lejos. En mi caso, quiero cambiar el nombre de AdminAction a AdminActionPlug y AdminActionLogger a AdminActionLoggerPlug, por lo que el primero de búsqueda y reemplazo también golpearía el segundo, erróneamente.

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


¡Su IDE puede admitir refactorizaciones! Compruébalo Eric, Eclipse, WingIDE tienen herramientas integradas para refactorizaciones (Rename incluido). Y que 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.


WingIDE 4.0 (WingIDE es mi IDE de pitón de elección) admitirá algunas refactorizaciones, pero acabo de probar las últimas versiones beta, beta6 y ... aún hay trabajo por hacer. El método de retracción funciona bien, pero el símbolo de cambio de nombre no funciona.

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


Puedes usar sed para realizar esto. El truco es recordar que las expresiones regulares pueden reconocer límites de palabras. Esto funciona en todas las plataformas siempre que obtenga las herramientas, que en Windows es Cygwin, Mac OS puede requerir la instalación de herramientas de desarrollo, no estoy seguro, y Linux tiene esto listo para usar. Así que grep, xargs y sed deberían hacer el truco, después de 12 horas de leer páginas man y prueba y error;)


PyCharm tiene algunas características de refactorización.

REFUERZO PYTHON

Cambiar el nombre de la 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. Refactorizaciones funcionan en proyectos simples de Python y Django.

Utilice Introducir variable / Campo / Constante y Local en línea para mejorar la estructura del código dentro de un método, Método de extracción para dividir métodos más largos, Extraer superclase , Empujar hacia arriba , Bajar y Mover para mover los métodos y las clases.


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

Refabricaciones de Python disponibles en PyCharm (verificado por última vez el 27/07/07 en PyCharm 2016.2)

  • Cambiar firma
  • Convertir a paquete / módulo de Python
  • Dupdo
  • Refactorizaciones de extractos
  • En línea
  • Invertir booleano
  • Hacer la función de nivel superior
  • Mover Refactorizaciones
  • Empujar miembros hacia abajo
  • Jalar a los miembros
  • Cambiar el nombre de refactorizaciones
  • Eliminar de forma segura

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

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

Refactorizaciones de Javascript:

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