Styles

samedi 22 décembre 2012

Emacs et Python : flymake pour vérifier le votre code en arrière plan avec pylint, pep8 et pyflakes

Cet article fait suite au premier article sur le sujet Emacs et Python : mon environnement de développement avec virtualenv.

Flymake va permettre de vérifier en arrière plan la validité de votre code ainsi que le respect de bonne pratiques. Les outils réalisant cette analyse sont pylint, pep8 et pyflakes. Flymake fait partie de la distribution standard de emacs et va appeler ces outils pour mettre en exergue les éventuelles erreurs dans votre code.


Tout d'abord, installez pylint, pep8 et pyflakes en utilisant l'outil d'installation pip (cet outil est installé par défaut à la création de votre environnement virtuel virtualenv) : dans une fenêtre shell (ou DOS) activez votre environnement virtuel python si ce n'est pas déjà fait et faites:
pip install pylint
pip install pep8
pip install pyflakes
Ces trois outils vont être appelés par un script shell (ou batch sous windows) unique : pycheckers (ou pycheckers.bat sous windows). C'est celui-ci qui sera appelé par flymakes.

Sous linux, créez un script pycheckers avec les droits d'exécution :
#!/bin/sh
cd /
filename=`readlink -f $*`
pylint -f parseable -r n $filename
pep8 $filename
pyflakes $filename
Sous windows, créez un batch pycheckers.bat :
@@echo off
pylint -f parseable -r n -i y %* | sed -r "s/\\/\//g"
pep8 %*
pyflakes %* | sed -r "s/\\/\//g"
exit /b 0
L'appel à l'outil sed permet de remettre d'aplomb les / du chemin complet des fichiers analysés pour que Flymake n'est pas de problème pour faire correspondre les erreurs aux fichiers ouverts dans Emacs. Sous linux, copiez pycheckers sous monenv/bin , sous windows copiez pycheckers.bat dans monenv\Scripts. Dans votre .emacs, mettre la configuration flymake suivante:
(when (load "flymake" t)
  (defun flymake-pyflakes-init ()
    (let* ((temp-file (flymake-init-create-temp-buffer-copy
                       'flymake-create-temp-with-folder-structure))
           (local-file (file-relative-name
                        temp-file
                        (file-name-directory buffer-file-name))))
      (list "pycheckers"  (list local-file))))
  (add-to-list 'flymake-allowed-file-name-masks
               '("\\.py\\'" flymake-pyflakes-init flymake-simple-cleanup)))

(add-hook 'python-mode-hook 'flymake-mode)
Relancez votre Emacs à partir d'un shell où votre environnement python a été activé : sous linux : nohup emacs > /dev/null 2>&1 et sous windows: start /B emacs

Et voilà, lors de l'édition de programme python (.py) flymake-mode sera automatiquement démarré et fera appel à pycheckers à chaque fois que vous aurez modifié votre code source. Flymake surlignera les lignes où des erreurs ont été reportées par les outils pylint, pep8 et pyflakes. Lisez la documentation flymake pour connaitre l'ensemble de ce qui peut être fait avec cet outil.

Aucun commentaire: