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.
Después de investigar e investigar, concluimos en que usaríamos:
- Linter: pycodestyle/pydocstyle (revisa la sintaxis del código y de la documentación según el estándarpep8)
- Formatter: autopep8 (formatea el código de acuerdo a unas reglas)
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 con la ayuda de un compañero 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:
- Definimos el linter (pycodestyle) como una Herramienta externa. (**Preferences → Tools →
External Tools**). Debemos hacer click en el símbolo +:
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ñadimos del mismo modo pydocstyle:
- 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
- -a: define el nivel de agresividad con el que queremos que haga el análisis. Cuántas más -a, más nivel de agresividad.
- En este caso, le ponemos 2 flags que hacen referencia a:
- Working directory: tiene que ser literalmente $ProjectFileDir$
Con esto, ya funcionaría, y ya lo podríamos usar desde el menu Tools:
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 *
* 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$
- 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. 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.
b. 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.
(Yo por ejemplo, sólo me lo he puesto para el formateo)
Pues bien, con todo esto (es un poco tedioso, lo sé), ya tenemos configurado el linter y el formatter para python que nosotros queramos.
Gracias por llegar hasta aquí 🙌🏽