leanmind logo leanmind text logo

Blog

Refactorización Avanzada

Dominar el refactoring productivo para maximizar el retorno de la inversión.

Cómo configurar un linter/formatter en PyCharm

Por María Soria

En el proyecto en el que estoy ahora, estamos trabajando con Python, y a pesar de que es un lenguaje bastante permisivo, tampoco es plan de ser anárquicos en cuanto a la sintaxis y la forma de programar. Así que decidimos que queríamos configurar un linter y un formatter.

Este artículo es para la configuración en PyCharm, pero si quieres mirar como configurarlo en VSC, haz click aquí.

Después de investigar e investigar, concluimos en que usaríamos:

Una vez decidido esto, queríamos configurar las reglas que nos gustaría seguir a través de un fichero setup.cfg, ya que es el más común. Tuvimos algunos problemillas para que nuestro IDE cogiera este fichero automáticamente, pero gracias a la inestimable ayuda de @eric :heart_hands: conseguimos hacerlo exitosamente en PyCharm.

TL;DR: Necesitamos definir estas herramientas como External Tools, y si queremos que nos realice los análisis automáticamente, debemos definirlas también como File Watchers.

¿Cómo hacemos esto? 👇🏽

(Para poder hacer esto, necesitáis tener estas herramientas instaladas en vuestro equipo. Yo las instalé con pip).

A continuación podéis ver los pasos a seguir:

  1. Definimos el linter (pycodestyle) como una Herramienta externa. (Preferences → Tools → External Tools). Debemos clickar en el símbolo +:

    Definir linter como herramienta externa

    A continuación, se abre otra ventana en la que tenemos que poner:

    • Name: el nombre que le queráis dar
    • Description: una descripción sobre qué es esta herramienta
    • Program: la localización del linter en mi equipo (para saber cuál es, como nunca recuerdo donde se me instalan las cosas, yo usé el comando where de la terminal)
    • Arguments: tiene que ser literalmente $FilePath$
    • Working directory: tiene que ser literalmente $ProjectFileDir$

    Añadir datos para el linter
  2. Añadimos del mismo modo pydocstyle:

    Añadir datos para el linter
  3. Lo mismo con el formatter (autopep8), aunque el valor de algunos parámetros cambia:

    • Name: el nombre que le queráis dar
    • Description: una descripción sobre qué es esta herramienta
    • Program: la localización del formatter en mi equipo
    • Arguments: tiene que ser literalmente $FilePath$ -i -a -a
      • En este caso, le ponemos 2 flags que hacen referencia a:
        • -i : es la opción –in–place (para que cuando formatee lo haga en el propio fichero)
        • -a: define el nivel de agresividad con el que queremos que haga el formateo. Cuántas más -a, más nivel de agresividad.
    • Working directory: tiene que ser literalmente $ProjectFileDir$

    Añadir datos para el formatter
  4. Con esto, ya funcionaría, y ya lo podríamos usar desde el menu Tools:

    Aparecen las herramientas añadidas en el menu tools
  5. Si además queremos que realice los análisis automáticamente, debemos definirlas también como File Watchers.

    Del mismo modo, los añadimos con el + y hacemos click en la opción custom:

    Añadir herramientas al file watchers

    Para definir el linter (pycodestyle) como File Watcher:

    • Name: el nombre que le queráis dar
    • File type: Python
    • Scope: ámbito que queremos que cubran los análisis
    • Program: su localización dentro en mi equipo
    • Arguments: tiene que ser literalmente $FilePath$
    • Output paths to refresh: tiene que ser literalmente $FilePath$
    • Working directory: tiene que ser literalmente $ProjectFileDir$

    Añadir el linter al file watcher
  6. Y realizamos lo mismo con el formatter (autopep8):

    • Name: el nombre que le queráis dar
    • File type: Python
    • Scope: ámbito que queremos que cubran los análisis
    • Program: su localización dentro en mi equipo
    • Arguments: tiene que ser literalmente $FilePath$
    • Output paths to refresh: tiene que ser literalmente $FilePath$
    • Working directory: tiene que ser literalmente $ProjectFileDir$

    Añadir formatter al file watchers
  7. De este modo, el linter realizará análisis automáticamente siempre que haya cambios en un fichero, y el formatter formateará el código automáticamente si tenemos el autosave activado.

    Activadas las opciones del file watcher correspondientes al linter y al formatter

    Si al contrario, queréis usar un atajo de teclado, iremos a Preferences → Keymap. Ahí buscamos “External Tools”, y le añadimos el atajo de teclado que queramos. De esta forma, simplemente con el atajo que hayamos configurado, nos formateará o nos analizara el código con el linter cuando usemos el atajo de teclado.

    (Yo por ejemplo, sólo me lo he puesto para el formateo)

    External tools

Pues bien, con todo esto (es un poco tedioso, lo sé), ya tenemos configurado el linter y el formatter que nosotros queramos para Python en PyCharm.

Gracias por llegar hasta aquí 🙌🏽

Publicado el 18/10/2022 por

¿Quieres más? te invitamos a suscribirte a nuestro boletín para avisarte cada vez que recopilemos contenido de calidad que compartir.

Si disfrutas leyendo nuestro blog, ¿imaginas lo divertido que sería trabajar con nosotros? ¿te gustaría?

Impulsamos el crecimiento profesional de tu equipo de developers