Last active
September 14, 2017 12:02
-
-
Save revagomes/471d6aa9096c18f5b7cd to your computer and use it in GitHub Desktop.
Drupal Coding Standards para equipes distribuídas - Parte 1 - Setup e configuração do lint (PHP_CodeSniffer)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Drupal Coding Standards para equipes distribuídas | |
Quando estamos trabalhando em equipe é muito importante que tenhamos padrões bem definidos para que o time possa focar no que realmente importa: entregar valor ao cliente. | |
Essa preocupação com padrões visa otimizar o processo e evitar que o projeto venha a se tornar cada vez mais difícil de manter, de evoluir e inovar. | |
Para conseguirmos diminuir a quantidade de *WTF por minuto* nos nossos projetos, podemos começar com uma coisa simples: Padrão de código. | |
> Se essa é a primeira vez que você ouve falar o termo "WTF por minuto", não deixe de dar uma olhada na a comic do Thorn Holwerds que ilustra isso de uma maneira muito descontraída: [The only valid measurement of code quality: WTFs per minute](http://www.osnews.com/story/19266/WTFs_m). | |
O Drupal oferece uma documentação bem completa sobre padrão de código. Você pode conferir em [Drupal coding Standars](https://www.drupal.org/coding-standards). | |
Pra quem trabalha com Drupal diariamente e/ou contribui para o projeto é muito importante ter esses padrões bem fixados. Porém isso pode ser um processo lento e para facilitar esse processo temos o [módulo coder](drupal.org/project/coder) para nos ajudar. | |
Confira abaixo o passo-a-passo da instalação: | |
Primeiramente precisamos installar o composer. | |
##O que é o Composer? | |
Composer é uma ferramenta para gerenciamento de dependência em PHP. Ele permite que você declare as bibliotecas dependentes que seu projeto precisa e vai instalá-las para você quando necessário. | |
> Caso você não conheça o composer, essa ferramenta é muito utilizada pela comunidade PHP e o Drupal 8 já está aproveitando os benefícios do composer. Então reserve um tempinho para estudar e se acostumar com ele. | |
Para instalar a ultima versão do composer você pode seguir os passos abaixo: | |
`curl -sS https://getcomposer.org/installer | php` | |
' | |
Caso você não tenha o comando curl, você pode instalar da seguinte maneira: | |
`php -r "readfile('https://getcomposer.org/installer');" | php` | |
Este instalador irá apenas checar suas configurações do php.ini, alertar se houver alguma configurações incorreta, e então baixar a ultima versão do composer.phar no diretório em questão. | |
Se você quiser que o composer esteja disponível globalmente você vai precisar move-lo para o diretório `/usr/bin`: | |
`$ sudo mv [caminho para o composer.phar]/composer.phar /usr/bin/composer` | |
Agora execute o comando `composer` para ver se tudo está OK. Ao executar o comando você deve receber algo similar ao seguinte: | |
``` | |
~$ composer | |
______ | |
/ ____/___ ____ ___ ____ ____ ________ _____ | |
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ | |
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / | |
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ | |
/_/ | |
Composer version 1.5.2 2017-09-11 16:59:25 | |
[...] | |
``` | |
Para mais detalhes acesse a página do composer em [https://getcomposer.org/](https://getcomposer.org/) | |
Se você usa PHPStorm como IDE para PHP, aqui tem um vídeo bacana de como configurar o Composer no PHPStorm: https://youtu.be/_wJO0uYoxsA | |
Depois do composer instalado, precisamos installar o módulo Coder. | |
##O que é o Coder? | |
O Coder não é exatamente um módulo, e sim uma ferramenta que pode ser utilizada via linha de comando ou alguma IDE. O objetivo dele é validar o código de acordo com os padrões de codificação do Drupal e outras boas práticas de desenvolvimento. | |
O modulo Coder contém "sniffs" para o PHP CodeSniffer. Esses "sniffs" comunicam o PHP CodeSniffer onde o código está ou não de acordo com os padrões do Drupal. | |
Como ele utiliza o PHP CodeSniffer, ele te permite inclusive fazer as correções das violações de padrão de maneira automatizada através do comando _phpcbf_. | |
É extremamente recomendado instalá-lo em um lugar central, dessa forma, você não terá que fazer o download do módulo novamente quando estiver em outro site em Drupal. | |
Para isso podemos utilizar o composer e instalar o módulo Coder globalmente e já instalamos de bandeija o PHP_CodeSniffer por ser uma dependência do Coder. Dessa forma ele estará no diretório home do seu usuário (`~/.composer`) e estará disponível para todos os projetos que você estiver trabalhando. | |
*Drupal 7* | |
Neste caso iremos utilizar a versão 7.x-2.x, logo, devemos executar o seguinte comando: | |
`$ composer global require drupal/coder:\>7` | |
*Drupal 8* | |
No caso do release para Drupal 8, iremos utilizar a versão 8.x-2.x, assim, iremos executar o seguinte: | |
`$ composer global require drupal/coder:\>8` | |
Se você preferir a versão mais recente do Coder, neste momento a 8.x-2.x dev, você precisará editar o arquivo `~/.composer/composer.json` e adicionar a propriedade de versão mínima estável para _dev_: | |
``` | |
{ | |
"minimum-stability": "dev" | |
} | |
``` | |
Agora sim podemos instalar a versão 8.x-2.x (versão dev) do Coder. | |
`$ composer global require drupal/coder:dev-8.x-2.x` | |
Após executar este comando você deve receber uma mensagem similar ao seguinte: | |
``` | |
Changed current directory to /home/[seu usuário]/.composer | |
./composer.json has been updated | |
Loading composer repositories with package information | |
Updating dependencies (including require-dev) | |
- Installing squizlabs/php_codesniffer (1.5.5) | |
Downloading: 100% | |
- Installing drupal/coder (7.2.2) | |
Cloning fa8e809d3a1f448bb730f827bb94852cf5b08b99 | |
squizlabs/php_codesniffer suggests installing phpunit/php-timer (dev-master) | |
Writing lock file | |
Generating autoload files | |
``` | |
Como instalamos o Coder com o composer, ele já baixou a dependência do php_codesniffer. Dessa forma já temos o comando phpcs disponível e você já pode fazer um teste com o seguinte comando: | |
`~/.composer/vendor/bin/phpcs --standard=/home/[seu usuário]/.composer/vendor/drupal/coder/coder_sniffer/Drupal [caminho para o arquivo]/exemplo.module` | |
Para não termos que sempre passar o caminho completo para o phpcs (`~/.composer/vendor/bin/phpcs`), vamos adicionar o composer no nosso $PATH com o seguite comando: | |
`echo "export PATH=$HOME/.composer/vendor/bin:$PATH" >> ~/.bashrc` | |
Pronto! | |
Como o comando do phpcs fica bem longo e difícil de memorizar, podemos configurar um alias de Shell. | |
Caso você esteja utilizando o bash, basta adicionar a seguinte linha no arquivo `~/.bashrc` ou no arquivo `~/.bash_aliases`: | |
`alias drupalcs='phpcs --standard=[caminho para o módulo Coder]/coder_sniffer/Drupal --extensions=php,module,inc,install,test,profile,theme,js,css,info,txt'` | |
Pra falicitar basta executar o comando abaixo: | |
`echo "alias drupalcs='phpcs --standard=[caminho para o módulo Coder]/coder_sniffer/Drupal --extensions=php,module,inc,install,test,profile,theme,js,css,info,txt'" >> ~/.bashrc` | |
Após adicionar o alias precisamos executar novamente nosso `.basrc` para pegar nosso novo alias. Para isso basta executar o seguinte comando: | |
`$ source ~/.bashrc` | |
Caso você esteja utilizando zsh no lugar do bash, acesse a página da [Documentação no drupal.org](https://www.drupal.org/node/1419988#alias) para mais detalhes (em inglês). | |
Agora, vamos falar sobre o PHP_CodeSniffer. | |
##O que é CodeSniffer? | |
CodeSniffer é uma ferramenta análise estática de código. Isso permite que um conjunto de regras ou padrões sejam aplicados ao código fonte. | |
Estas regras podem ser usadas para detectar erros comuns de programação ou inconformidades com os padrões, ele também pode ser usado para definir um conjunto de padrões de codificação para seu projeto. | |
O CodeSniffer vem com um conjunto de normas já definidas de codificação que são regularmente usadas. | |
Estas são: | |
- MySource | |
- PEAR | |
- PHPCS | |
- Squiz | |
- Zend | |
Analisar seu código usando uma ou mais destas normas vai destacar como o código que você forneceu está em relação as normas da codificação padrão. | |
A partir de agora sempre que você escrever um código para o Drupal você poderá executar o `drupalcs` em cima do arquivo em questão. Exemplo: | |
`$ drupalcs [caminho para o arquivo]/example.module` | |
Para otimizar ainda mais o processo, podemos utilizar o hook de pre-commit do git para executar essa validação automaticamente. | |
Uma ótima maneira de fazer isso é utilizando o projeto [Git Pre-commit hooks](drupal.org/sandbox/bevan.wishart/1441638) do Drupal. Esse projeto contém tudo que você precisa para ter seu código validado sempre que fizer um novo commit. | |
## Como instalar o Git pre-commit hooks? | |
A "instalação" desse hooks é muito simples. Basta copiar os arquivos _pre-commit_*_ para dentro do diretório `.git/hooks/` do seu projeto. | |
Agora, quando você executar `git commit` o script de pre-commit será executado, ele irá encontrar o pre-commit_phpcs e exectutá-lo. O script pre-commit_phpcs vai analisar arquivos presentes no commit em questão e irá te retornar um feedback sobre os erros e avisos, caso existam. | |
A partir de agora não há mais desculpas para não seguir os padrões de código do Drupal. | |
Apesar de não recomendado podem haver casos em que você precise comitar os arquivos sem que ele valide os padrões de código. Para isso você pode utilizar o argumento `--no-verify`, dessa maneira o git não irá executar os hooks de pré commit. | |
Ex.: | |
``` | |
$ git commit --no-verify | |
``` | |
> Mas lembre-se que isso deve ser utilizado em casos raros e você deve tomar muito cuidado para não criar o mal hábito de não validar os padrões de codificação do seu código. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment