Automatyczne sprawdzanie zgodności kodu Pythona z PEP8

Jakiś czas temu pisałem o skrypcie który sprawdza zgodność kodu Pythona z PEP8. Jednak podczas pracy nad kilkoma projektami zauważyłem, że nie chciało mi się za każdym razem ręcznie uruchamiać tego skryptu na całym projekcie. Sprowadzało się do tego że uruchamiałem go gdy projekt był już skończony. Prowadziło do tego że nie byłem w stanie czasowo wprowadzić wszystkich poprawek, bo było ich bardzo dużo.

Niby wydawało by się że wystarczy raz czy dwa przeczytać dokument PEP8 i przy pisaniu kodu stosować się do zaleceń, jednak potem gdy pisze się kod to się o wszystkim zapomina. Wydaje mi się że z pisaniem kodu jest jak z ładnym odręcznym pisaniem, to nawyk którego się nie da się nauczyć czytając jakieś poradniki. Tak samo jest ze stylem pisania kodu.

Skrypt do sprawdzania poprawności stylu kodu sprawdza się tutaj znakomicie, pozwala w szybki sposób na wyuczenie nawyku pisania kodu zgodnego z PEP8. Aby ułatwić sprawę, dodałem do testów danego projektu, przypadek testowy który uruchamia skrypt i sprawdza kod całego projektu. Jeżeli kod nie jest zgody z PEP8, to wyrzuca wyjątek i pokazuje dokładnie co trzeba poprawić.

from StringIO import StringIO

import sys

import unittest

import pep8


class PEP8TestCase(unittest.TestCase):

    def test_pep8_rules(self):  
        sys.argv[1:] = ['--filename=*.py', '--show-source', '--show-pep8', 
                               my_project.__path__[0]]  
        buf = StringIO()         
        sys.stdout = buf
        pep8._main()            
        sys.stdout = sys.__stdout__   
        result = buf.getvalue()

        self.assertEqual("", result,
                     "Code messages should be empty but was:\n" + result)

Wystarczy teraz na bieżąco podczas pisania kodu uruchamiać testy i mamy pewność że powstały kod jest zgodny z PEP8. Bardzo fajnie sprawdza się to także z pisaniem kodu wykorzystując Test Driven Development. Podczas pisania i uruchamiania testów od razu mamy sprawdzony cały powstały kod.

Po paru poprawkach pisanie kodu zgodnego z PEP8 wejdzie nam tak w krew że podczas pisania kodu od razu zacznie się pisać poprawny kod. Przydaje się tutaj włączenie w edytorze pokazywanie białych znaków aby od razu wykrywać miejsca gdzie znajdują się nadmiarowe białe znaki.

Zauważyłem także, że dbając o styl kodu, wykrywa się też miejsca które można zrefaktoryzować i uprościć.

Komentarze

16 February, 2010, 6:51 a.m.:

A nie lepiej używać PyLint ?

16 February, 2010, 7:34 a.m.:

Jakoś to jest dużo wygodniejsze dla mnie.

16 February, 2010, 8:11 a.m.:

Pylint + PyDev polecam spróbować, fajna sprawa

16 February, 2010, 2:20 p.m.:

Miałem kiedyś z Pylint problemy z Django. Nie znajdował atrybutu klasy Modelu. Poza tym generalnie spowalniał mi działanie eclipsa. Musze teraz zobaczyć jak to działa. Mam teraz mocniejszy sprzęt wiec może lepiej będzie chodzić. Dzięki. Zobaczę.


Comments turned off