<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>xlab &#187; codesniffer</title>
	<atom:link href="http://xlab.pl/tag/codesniffer/feed/" rel="self" type="application/rss+xml" />
	<link>http://xlab.pl</link>
	<description>XSolve laboratory - dzielimy się tym co wiemy...</description>
	<lastBuildDate>Thu, 12 Apr 2012 07:23:58 +0000</lastBuildDate>
	<language>pl</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Automatyczna inwigilacja kodu</title>
		<link>http://xlab.pl/automatyczna-inwigilacja-kodu/</link>
		<comments>http://xlab.pl/automatyczna-inwigilacja-kodu/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 19:08:33 +0000</pubDate>
		<dc:creator>Marcin Dryka</dc:creator>
				<category><![CDATA[Programowanie PHP]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[codesniffer]]></category>
		<category><![CDATA[format]]></category>
		<category><![CDATA[formatter]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php_codesniffer]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.xlab.pl/?p=27</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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).<br />
<span id="more-27"></span></p>
<p>Na pierwszy ogień testów poszedł <a href="http://www.waterproof.fr/products/phpCodeBeautifier/">phpCodeBeautifier</a>. Szybko jednak okazało się, że klamra otwierająca zawartość klasy musi znajdować się w tej samej linii co jej deklaracja. Istnieje opcja:</p>
<p><code><strong>--space-before-start-angle-bracket</strong></code></p>
<p>która pozwala wymusić jeden znak spacji przed &#8222;{&#8222;. Czemu autorzy nie pomyśleli o</p>
<p><code><strong>--newline-before-start-angle-bracket</strong></code></p>
<p>? Cieżko powiedzieć. Kod jest zamknięty, więc się tego nie dopisze samemu.</p>
<p>Istnieje jednak <a href="http://pear.php.net/package/PHP_CodeSniffer">PHP_CodeSniffer</a> (phpcs), który połączony z odpowiednim standardem sprawdzi składnie pliku.</p>
<p>Zainstalujmy &#8222;to&#8221; wszystko&#8230; Na początek instalacja samego phpcs:</p>
<pre name="code" class="bash">apt-get install php-codesniffer</pre>
<p>Aby aplikacja mogła sprawdzać <a href="http://trac.symfony-project.org/wiki/HowToContributeToSymfony#CodingStandards">formatowanie zgodne z symfony</a> 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/.</p>
<pre name="code" class="bash"> cd /usr/share/php/PHP/CodeSniffer/Standards &amp;&amp; sudo svn co http://subversion.assembla.com/svn/phpsymfony/Symfony%20Code%20sniffer%20standards/ .</pre>
<p>Do przetestowania programu stwórzymy plik:</p>
<pre name="code" class="bash">vim ~/test.php</pre>
<p>z odpowiednią zawartością:</p>
<pre name="code" class="php">&lt;?php
class TestKlasa
{
  public function testFunction()
  {
  }
}</pre>
<p>Uf, nareszcie możemy sprawdzić czy nasz kod jest poprawny:</p>
<pre name="code" class="bash">phpcs --standard=Symfony ~/test.php</pre>
<p>W wyniku czego otrzymamy:</p>
<pre name="code" class="bash">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
--------------------------------------------------------------------------------</pre>
<p>Działa! To znaczy są błędy, ale o to właśnie nam chodziło &#8211; aby je wykrywać. Poprawmy więc zawartość pliku:</p>
<pre name="code" class="php">&lt;?php
/**
* Test file for PHP_CodeSniffer
*
* PHP versions 4 and 5
*
* @category Tests
* @package  XX
* @author   Marcin Dryka &lt;marcin.dryka@xsolve.pl&gt;
* @license  http://www.opensource.org/licenses/lgpl-license.php LGPL
* @version  SVN: 1
* @filesource
*/

/**
* TestKlasa
*
* @package XX
* @author  Marcin Dryka &lt;marcin.dryka@xsolve.pl&gt;
* @version Release: 1
*/
class TestKlasa
{
  /**
  * testFunction
  *
  * @author Marcin Dryka &lt;marcin.dryka@xsolve.pl&gt;
  * @access public
  * @return void
  */
  public function testFunction()
  {
  }
}</pre>
<p>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).</p>
]]></content:encoded>
			<wfw:commentRss>http://xlab.pl/automatyczna-inwigilacja-kodu/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

