Pregunta

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 clases, donde no quiero que se cambie ese nombre.La mayor parte de esto se encuentra en el código Python, pero también tenemos algo de código XML que hace referencia a nombres de clases.

La simple búsqueda y reemplazo solo me lleva hasta cierto punto.En mi caso, quiero cambiar el nombre de AdminAction a AdminActionPlug y AdminActionLogger a AdminActionLoggerPlug, de modo que la función de búsqueda y reemplazo del primero también llegue al segundo, de manera incorrecta.

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

¿Fue útil?

Solución

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

El primero es Soga, una biblioteca de refactorización de Python que viene con un complemento de Vim (y emacs).Lo probé con algunos cambios de nombre 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 basado en texto, pero eso está bien para mí, solo que lleva más tiempo aprenderlo.

El segundo es Reparador de bicicletas que supongo que gana puntos por nombre.También se conecta a vim y emacs.Todavía no he jugado mucho con él, pero recuerdo haberlo probado hace mucho tiempo.

Todavía no he jugado lo suficiente con ambos ni he probado más tipos de refactorización, pero haré un poco más de piratería con ellos.

Otros consejos

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

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

  • Cambiar firma
  • Convertir a paquete/módulo Python
  • Copiar
  • Extraer refactorizaciones
  • En línea
  • Invertir booleano
  • Hacer función de nivel superior
  • Mover refactorizaciones
  • Empujar a los miembros hacia abajo
  • Levante a los miembros
  • Cambiar el nombre de las refactorizaciones
  • Eliminación segura

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

  • Rebautizar
  • Mover
  • Copiar
  • Extraer 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 preferido) admitirá algunas refactorizaciones, pero acabo de probar las últimas versiones beta, beta6 y...aún queda trabajo por hacer.El método Retract funciona bien, pero Rename Symbol no.

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

¡¡Su IDE puede soportar refactorizaciones!!Compruébelo Eric, Eclipse, WingIDE tienen herramientas integradas para refactorizaciones (incluido el cambio de nombre).Y esas son refactorizaciones muy seguras: si algo puede salir mal, el IDE no lo hará.

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

PyCharm tiene algunas características de refactorización.

REFACTORACIÓN DE PITÓN

Rebautizar 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 in situ.Las refactorizaciones funcionan en proyectos simples de Python y Django.

Usar 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 romper métodos más largos, Extraer superclase, Hacer subir, Derribar y Mover para mover los métodos y clases.

yo echaría un vistazo a Jugador de bolos (https://pybowler.io).

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

Puedes usar sed para realizar esto.El truco consiste en recordar que las expresiones regulares pueden reconocer los límites de las 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 las herramientas de desarrollo, no estoy seguro, y Linux lo tiene listo para usar.Entonces grep, xargs y sed deberían funcionar, después de 12 horas de lectura de páginas de manual y prueba y error;)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top