Automatyczna inwigilacja kodu

Author: Marcin Dryka (drymek) | marzec 24th, 2009
avatar

Każdy (dobry) programista chciałby, aby jego kod był najlepszy. Najważniejszą i podstawową rzeczą podczas pisania kodu, to prawidłowe nazywanie zmiennych, funkcji oraz klas. Tego jednak program nie jest w stanie sprawdzać (przynajmniej jak na razie nikt nie napisał, tak zaawansowanego analizatora kodu źródłowego). Możemy jednak zatrudnić parę skryptów aby utrzymać poprawne formatowanie kodu (tak, niektórzy z tym także mają problemy).

Na pierwszy ogień testów poszedł phpCodeBeautifier. Szybko jednak okazało się, że klamra otwierająca zawartość klasy musi znajdować się w tej samej linii co jej deklaracja. Istnieje opcja:

--space-before-start-angle-bracket

która pozwala wymusić jeden znak spacji przed „{„. Czemu autorzy nie pomyśleli o

--newline-before-start-angle-bracket

? Cieżko powiedzieć. Kod jest zamknięty, więc się tego nie dopisze samemu.

Istnieje jednak PHP_CodeSniffer (phpcs), który połączony z odpowiednim standardem sprawdzi składnie pliku.

Zainstalujmy „to” wszystko… Na początek instalacja samego phpcs:

apt-get install php-codesniffer

Aby aplikacja mogła sprawdzać formatowanie zgodne z symfony należy jeszcze doinstalować standard symfony. Można go znaleźć w repozytorium svn pod adresem http://subversion.assembla.com/svn/phpsymfony/Symfony%20Code%20sniffer%20standards/Symfony/.

 cd /usr/share/php/PHP/CodeSniffer/Standards && sudo svn co http://subversion.assembla.com/svn/phpsymfony/Symfony%20Code%20sniffer%20standards/ .

Do przetestowania programu stwórzymy plik:

vim ~/test.php

z odpowiednią zawartością:

<?php
class TestKlasa
{
  public function testFunction()
  {
  }
}

Uf, nareszcie możemy sprawdzić czy nasz kod jest poprawny:

phpcs --standard=Symfony ~/test.php

W wyniku czego otrzymamy:

FILE: ~/test.php
--------------------------------------------------------------------------------
FOUND 3 ERROR(S) AND 0 WARNING(S) AFFECTING 2 LINE(S)
--------------------------------------------------------------------------------
2 | ERROR | Missing file doc comment
2 | ERROR | Missing class doc comment
4 | ERROR | Missing function doc comment
--------------------------------------------------------------------------------

Działa! To znaczy są błędy, ale o to właśnie nam chodziło – aby je wykrywać. Poprawmy więc zawartość pliku:

<?php
/**
* Test file for PHP_CodeSniffer
*
* PHP versions 4 and 5
*
* @category Tests
* @package  XX
* @author   Marcin Dryka <marcin.dryka@xsolve.pl>
* @license  http://www.opensource.org/licenses/lgpl-license.php LGPL
* @version  SVN: 1
* @filesource
*/

/**
* TestKlasa
*
* @package XX
* @author  Marcin Dryka <marcin.dryka@xsolve.pl>
* @version Release: 1
*/
class TestKlasa
{
  /**
  * testFunction
  *
  * @author Marcin Dryka <marcin.dryka@xsolve.pl>
  * @access public
  * @return void
  */
  public function testFunction()
  {
  }
}

Przy tak wyglądającym pliku wynik działania phpcs jest pusty, brak błędów oznacza poprawnie sformatowany plik. Teraz potrzebna jest tylko silna wola, aby używać skryptu do sprawdzania wszystkich plików. Przy starszych aplikacjach będzie to dość kłopotliwe. Zdarzają się jednak pliki pisane od tak zwanego zera. Gdzie możemy w pełni stosować konwencje ustalone przez autorów symfony (i nie tylko).

Tags: , , , , , ,

Podyskutuj na ten temat:

3 Responses to “Automatyczna inwigilacja kodu”

  1. Super sprawa – nic tylko zacząć używać.

  2. avatar JaneRadriges pisze:

    The article is ver good. Write please more

  3. avatar Quick Facts pisze:

    Best you should make changes to the blog name Automatyczna inwigilacja kodu | xlab to something more specific for your blog post you write. I liked the blog post nevertheless.

Leave a Reply