PHP Code Sniffer (PHPCS)
O PHP Code Sniffer (em uma tradução livre, pode ser algo como: Analisador de Código) é uma ferramenta para detectar violações nos padrões de código. Os padrões de código são formados por uma coleção de regras definidas pelos desenvolvedores, o padrão inicial do PHPCS é o PEAR. O PHPCS pode apontar para as recomendações padrões do PHP (PSRs). É necessário ter o PHPCS e o Magento Coding Standard como dependência de desenvolvimento no arquivo composer.json
.
{
...
"require-dev": {
...
"squizlabs/php_codesniffer": "{version}",
"magento/magento-coding-standard": "{version}",
...
},
...
}
Para configurar a primeira vez o Magento Coding Standard no PHPCS deve ser executado o seguinte comando:
vendor/bin/phpcs --config-set installed_paths ../../magento/magento-coding-standard/
Para executar os testes deve-se chamar o comando phpcs
que estará dentro de ./vendor/bin
e referenciar a pasta de destino.
./vendor/bin/phpcs app/code/{Vendor}/{Module}
./vendor/bin/phpcs vendor/{vendor}/module-{module-name}
ruleset.xml
Caso seja necessário personalizar a execução de testes é possível criar um arquivo ruleset.xml
(a recomendação é chamá-lo de phpcs-ruleset.xml
para não entrar em conflito com os outros arquivos ruleset.xml
) no próprio módulo e configurar para que os testes sejam executados de acordo com a configuração deste arquivo.
A documentação necessária explicando tudo sobre o arquivo ruleset.xml
está no link PHP_CodeSniffer Ruleset.
./vendor/bin/phpcs app/code/{Vendor}/{Module}
./vendor/bin/phpcs vendor/{vendor}/{module}
PHP Mess Detector (PHPMD)
O PHP Mess Detector (em uma tradução livre, pode ser algo como: Detector de Desordem) é uma ferramenta que analisa o código de uma aplicação em PHP e detecta problemas potenciais e a qualidade. Algumas das inúmeras análises possíveis de serem executadas com o PHP Mess Detector são:
- Localização de possíveis erros;
- Localização de métodos, atributos e argumentos não utilizados;
- Violação de convenções de nomenclatura;
- Problemas potenciais relacionados ao tamanho do código;
- Verifica a complexidade do código.
É necessário ter o PHPMD como dependência de desenvolvimento no arquivo composer.json
.
{
...
"require-dev": {
...
"phpmd/phpmd": "{version}",
...
},
...
}
Para executar os testes com o PHPMD, deve-se chamar o comando phpmd
que estará dentro de ./vendor/bin
, referenciar o arquivo ruleset.xml
(a recomendação é chamá-lo de phpmd-ruleset.xml
para não entrar em conflito com os outros arquivos ruleset.xml
) e a pasta de destino.
./vendor/bin/phpmd app/code/{Vendor}/{Module} text app/code/{Vendor}/{Module}/phpmd-ruleset.xml
./vendor/bin/phpmd vendor/{vendor}/{module} text vendor/{vendor}/{module}/phpmd-ruleset.xml
O PHP Mess Detector possui alguns parâmetros que permitem adicionar filtros ao processo de análise e definir o formato de saída do resultado do teste.
ruleset.xml
Caso seja necessário personalizar a execução de testes é possível criar um arquivo ruleset.xml (a recomendação é chamá-lo de phpmd-ruleset.xml para não entrar em conflito com os outros arquivos ruleset.xml) no próprio módulo e configurar para que os testes sejam executados de acordo com a configuração deste arquivo.
A documentação necessária explicando tudo sobre o arquivo ruleset.xml está no link PHPMD doc.
PHP Copy/Paste Detector (PHPCPD)
O PHP Copy/Paste Detector (em uma tradução livre, pode ser algo como: Detector de Copia e Cola) é uma ferramenta para checagem de código duplicado nos arquivos em PHP do módulo. É necessário ter o PHPCPD como dependência de desenvolvimento no arquivo composer.json
.
{
...
"require-dev": {
...
"sebastian/phpcpd": "{version}",
...
},
...
}
Para executar os testes com o PHPCPD, deve-se chamar o comando phpcpd
que estará dentro do diretório ./vendor/bin
.
./vendor/bin/phpcpd ./app/code/{Vendor}/{Module} --exclude=./vendor/e3/$1/Test/ --fuzzy --progress --min-lines=0
./vendor/bin/phpcpd ./vendor/{vendor}/{module} --exclude=./vendor/e3/$1/Test/ --fuzzy --progress --min-lines=0
A documentação necessária explicando tudo sobre as opções para a execução do PHPCPD está no link PHPCPD Manual.
PHP Static Analysis (PHPStan)
O PHP Static Analysis (em uma tradução livre, pode ser algo como: Análise Estática) é uma ferramenta focada em encontrar erros no código sem executá-las de fato e sem que sejam feitos testes para as classes, a exatidão de cada linha do código pode ser verificada antes de executar a linha real, ou seja, a PHPStan tem a proposta de adaptar a funcionalidade de um compilador para análise estática do código. Algumas das verificações que o PHPStan realiza são:
- Verifica a utilização das chamadas de classes, verificando se o código está realmente sendo utilizado;
- Verifica a acessibilidade dos métodos e funções e a coesão entre os argumentos das chamadas com sua assinatura;
- Verifica a tipagem do retorno dos métodos e funções;
- Verifica a acessibilidade dos atributos e sua tipagem;
- Verifica a existência de variáveis (respeitando o escopo e laços de repetição);
- Verifica comparações estritas e tipagem de variáveis inúteis.
Para utilizar o PHPStan no Magento 2 é necessário uma extensão que permita a análise do código, é recomendável o módulo PHPStan Inviqa. Basta instalar esse módulo através do composer, é necessário ter o PHPStan como dependência de desenvolvimento no arquivo composer.json
.
{
...
"require-dev": {
...
"phpstan/phpstan": "{version}",
"inviqa/phpstan-magento2": "{version}",
...
},
...
}
Para executar os testes com o PHPStan, deve-se chamar o comando analyse
que estará dentro de ./vendor/bin/phpstan
, referenciar o caminho do arquivo phpstan.neon
que será utilizado para configuração e a pasta de destino.
./vendor/bin/phpstan analyse ./app/code/{Vendor}/{Module} --configuration=phpstan.neon
./vendor/bin/phpstan analyse ./vendor/{vendor}/{module} --configuration=phpstan.neon
phpstan.neon
O PHPStan utiliza o formato de configuração chamado neon
, que é muito semelhante ao yml
.
parameters:
bootstrap: ../../../../vendor/inviqa/phpstan-magento2/phpstan-bootstrap.php
level: 5
paths:
- ./
fileExtensions:
- php
excludes_analyse:
- ./etc/*
- ./Test/*
- ./test-reports/*
- ./view/*
ignoreErrors:
- '#Call to an undefined method [a-zA-Z0-9\\_]+::(get|set|uns|has)[A-Z]#'
Caso seja necessário a customização do arquivo phpstan.neon
basta consultar a documentação abaixo: