quinta-feira, 4 de dezembro de 2014

Php CodeSniffer validando seu estilo de código PHP no Eclipse

Quando comecei a programar em 2008 não tinha nenhuma preocupação com o estilo de escrita dos meus códigos, se funcionassem já era uma grande vitória. Só que conforme você vai aprendendo e se aprimorando, chega um momento em que ter um código "funcionando" já não é mais o suficiente, você começa a se preocupar com padrões, estilos, etc.
Como tenho como hábito utilizar o CakePHP foi natural começar a seguir suas regras estilo de codificação (http://book.cakephp.org/2.0/pt/contributing/cakephp-coding-conventions.html).
Para mim estava tudo bem, seguia o estilo do CakePHP e estava satisfeito, mas nunca me preocupei em validar, checar se meus códigos realmente estavam seguindo o estilo corretamente.
O tempo passou mais um pouco e dois artigos me fizeram ver que podia melhorar um pouco mais:
http://br.phptherightway.com/#guia_de_estilo_de_codigo
http://www.fititnt.org/padrao/php-psr.html
No segundo artigo mencionado acima, conheci o PHP CodeSniffer que pode ser instalado como um plugin do Eclipse e com mais um pouco de pesquisa, encontrei um pacote de regras do CakePHP para ser usado no CodeSniffer.


Preparando o Terreno

Para começar, precisamos do Eclipse instalado e configurado para uso com projetos PHP. Tenho um artigo explicando isso em http://linuxnomicro.blogspot.com.br/2014/03/utilizando-o-cakephp-no-eclipse.html. Nesse tutorial usei o Ubuntu 12.04 com o Eclipse Kleper, como troquei de notebook, preparei este novo tutorial com o Ubuntu 14.04 e a nova versão do Eclipse "Luna" já com o plugin PDT instalado http://www.eclipse.org/downloads/packages/eclipse-php-developers/lunasr.
Também temos que instalar o PHP-PEAR que vai baixar o pacote de estilos do CakePHP. Abrindo o gnome-terminal execute o comando:
$ sudo apt-get install php-pear


Instalando o Plugin Php_CodeSniffer no Eclipse

O plugin responsável por habilitar o CodeSniffer para o Eclipse é o PHP Toll Integration (PTI) mantido pelo PHPsrc.
Começamos abrindo a janela de instalação de plugins do Eclipse:
Eclipse - Install New Software
Em seguida adicionamos o repositório PTI http://www.phpsrc.org/eclipse/pti/
Eclipse add pti
  Com o repositório PTI adicionado, marcamos a instalação do PHP CodeSniffer e a PHP PEARLibrary.
Install Pear Library e CodeSniffer
Bom, agora é next, aceitar os termos e aguardar. No final o Eclipse  vai pedir um restart.

Instalando o CakePHP_CodeSniffer e habilitando no PHP_CodeSniffer do Eclipse 

O plugin CodeSniffer do Eclipse já traz alguns pacotes de estilos instalados, nada nos impede de baixar o pacote  do CakePHP_CodeSniffer manualmente e acrescentar dentro da pasta do plugin, mas vou optar por mostrar a instalação seguindo o descrito no site do projeto  http://pear.cakephp.org/ e depois cobfigurar o PEAR no Eclipse. Então, vamos abrir o terminal e seguir os passos indicados:
1. Registrar o canal
$ sudo pear channel-discover pear.cakephp.org
2.  Listar os pacotes disponíveis
$ sudo pear remote-list -c cakephp
3. Instalar
$ sudo pear install cakephp/CakePHP_CodeSniffer
Se der tudo certo, você vai receber a mensagem install:ok no terminal.
CakePHP_CodeSniffer instalado


Bom, agora vamos configurar alterar o PEAR no Eclipse para carregar o CakePHP_CodeSniffer. No Eclipse em Window - Preferences - PEAR clique em New.
PEAR Install Escolha o diretório onde o PEAR está instalado, no Ubuntu fica em /usr/share/php.
/usr/share/php
 Depois, é só aplicar.
PEAR - Apply
 Para que o CodeSniffer funcione no Eclipse, você indicar também onde o seu PHP client está instalado. No Ubuntu /usr/bin/php5.
/usr/bin/php5

Para terminar troque o PEAR interno do plugin CodeSniffer pelo PEAR que você acabou de configurar, aproveite para marcar também o executável do PHP, se não o CodeSniffer não vai funcionar dentro do Eclipse.
Configurar PEAR e PHP no plugin

É isso, está feito.
Vejam um exemplo em funcionamento. Criei um método chamado test() e deixei alguns erros: não indiquei o retorno do método na documentação e o CodeSniffer marcou um alerta(amarelo) e não usei o nome da variável new_Test corretamente e recebi uma marca de erro (vermelho).
PHP CodeSniffer em funcionamento