Instalação
Artigos
Cursos
Loja
INSTALAÇÃO
ARTIGOS
CURSOS
EBOOKS
DOWNLOADS
LOJA
ARTIGOS
PHP e Padrão de Qualidade de Código - Conheça o PHPCS
Neste artigo veremos como usar a ferramenta PHP Code Sniffer
# Como manter o padrão do projeto usando PHPCS → [https://github.com/squizlabs/PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) O PHPCS, abreviação para PHP Code Sniffer é uma ferramenta tem tem dois objetivos principais: 1. Detectar violações de padrões de código 2. Corrigir automaticamente violações de padrão O padrão do código é formado por uma coleção de regras definidas pelos desenvolvedores, cada regra é responsável por apenas um padrão. Múltiplas regras foram o padrão de código de cada projeto, o padrão inicial do PHPCS é o PEAR. > Para mais informações sobre o padrão de código PEAR acesse: [https://pear.php.net/manual/en/standards.php](https://pear.php.net/manual/en/standards.php)
## Instalação O PHPCS precisa de uma versão igual ou superior à 5.4.0, embora algumas regras ou script que você desejar utilizar podem ter outros requisitos mais específico. As duas principais maneiras de instalar o PHPCS são: baixando os arquivos dentro do projeto ou através do composer. **Download dos arquivos** Se você optar por baixar os arquivos precisará executar os seguintes comandos: ```bash # Download usando curl curl -OL https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar curl -OL https://squizlabs.github.io/PHP_CodeSniffer/phpcbf.phar # OU download usando wget wget https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar wget https://squizlabs.github.io/PHP_CodeSniffer/phpcbf.phar # Então teste os arquivos php phpcs.phar -h php phpcbf.phar -h ``` **Instalando via composer** A maneira mais prática de instalar dependências do PHP é com o composer, para instalar o PHPCS execute o seguinte comando: ```bash composer require "squizlabs/php_codesniffer=*" ``` ## Uso básico Com a instalação concluída já é possível utilizar o PHPCS, pois ele tem já vem com padrões pré definidos. Para usar o PHPCS basta informar o arquivo ou pasta que se deseja validar. Se for informado o caminho para uma pasta o PHPCS irá de maneira recursiva testar todos os diretórios internos. Se você não desejar que subdiretórios sejam verificados você deve passar o argumento `-l` na chamada do PHPCS. > Exemplo de como evitar a verificação recursiva: ``` php vendor/bin/phpcs -l app/ ``` > Como testar um arquivo: ```bash php vendor/bin/phpcs app/control/admin/Home.php ``` > Como testar um diretório: ```bash php vendor/bin/phpcs app/service/ ``` Depois que o PHPCS terminar de analisar seus arquivos, será impresso um relatórios com os erros encontrados. Esse relatório exibe erros e avisos para todas os arquivos que violaram o padrão de código. O relatório segue o seguinte padrão: ```bash FILE: .../app/service/SingleSignOn.php --------------------------------------------------------------------------------------------- FOUND 6 ERRORS AND 1 WARNING AFFECTING 5 LINES --------------------------------------------------------------------------------------------- 2 | ERROR | [ ] Missing file doc comment 2 | ERROR | [ ] Missing doc comment for class SingleSignOn 4 | ERROR | [ ] Public method name "SingleSignOn::get_sso" is not in camel caps format 4 | ERROR | [ ] Missing doc comment for function get_sso() 13 | ERROR | [x] TRUE, FALSE and NULL must be lowercase; expected "null" but found "NULL" 14 | ERROR | [x] TRUE, FALSE and NULL must be lowercase; expected "true" but found "TRUE" 26 | WARNING | [ ] Line exceeds 85 characters; contains 99 characters --------------------------------------------------------------------------------------------- ``` Se você desejar omitir os avisos é possível especificar o argumento `-n` no comando de execução: ```bash php vendor/bin/phpcs -n app/service/ ``` ## Opções de execução Além das opções demonstradas no uso básico exitem muitas outras que podem ser usadas ao verificar os padrões de código. Pata obter uma lista completa com todos os argumentos que podem ser utilizados execute a seguinte linha de comando: ```bash php vendor/bin/phpcs -h ```
## Como especificar um padrão de código Ao instalar o PHPCS mais de um padrão de código é adicionado ao projeto, para você obter uma lista completa com os padrões instalado use o seguinte comando: ```bash php vendor/bin/phpcs -i ``` O retorno deve ser parecido com este: ``` The installed coding standards are PEAR, PSR12, Squiz, PSR1, PSR2, MySource and Zend ``` Para especificar qual padrão de código o PHPCS deve obedecer ao verificar os arquivos do projeto você pode usar o seguinte argumento `--standard`: ``` php vendor/bin/phpcs --standard=PEAR app/service/MyClass.php ``` Veja a diferença entre os relatórios de erros quando usamos dois padrões diferentes em um mesmo arquivo: **PSR1** ```bash php vendor/bin/phpcs --standard=PSR1 app/service/MyClass.php ``` Retorno ``` FILE: /var/www/html/teste/app/service/MyClass.php ----------------------------------------------------------------------------------------------- FOUND 2 ERRORS AFFECTING 2 LINES ----------------------------------------------------------------------------------------------- 2 | ERROR | Each class must be in a namespace of at least one level (a top-level vendor name) 4 | ERROR | Method name "MyClass::get_sso" is not in camel caps format ----------------------------------------------------------------------------------------------- ``` **PSR2** ```bash php vendor/bin/phpcs --standard=PSR2 app/service/MyClass.php ``` Retorno ``` FILE: /var/www/html/teste/app/service/MyClass.php ---------------------------------------------------------------------------------------------------- FOUND 10 ERRORS AFFECTING 8 LINES ---------------------------------------------------------------------------------------------------- 2 | ERROR | [ ] Each class must be in a namespace of at least one level (a top-level vendor name) 4 | ERROR | [ ] Method name "MyClass::get_sso" is not in camel caps format 7 | ERROR | [x] Expected 1 space(s) after TRY keyword; newline found 13 | ERROR | [x] TRUE, FALSE and NULL must be lowercase; expected "null" but found "NULL" 13 | ERROR | [x] Only one argument is allowed per line in a multi-line function call 14 | ERROR | [x] TRUE, FALSE and NULL must be lowercase; expected "true" but found "TRUE" 30 | ERROR | [x] Expected 1 space after closing brace; newline found 31 | ERROR | [x] Expected 1 space(s) after closing parenthesis; found newline 38 | ERROR | [x] Expected 1 newline at end of file; 0 found 38 | ERROR | [x] The closing brace for the class must go on the next line after the body ---------------------------------------------------------------------------------------------------- ``` É possível executar o PHPCS com mais de um padrão ao mesmo tempo, desta maneira o PHPCS irá testar todos os padrões especificados. Para usar mais de um padrão você deve informar uma lista de padrões separados por vírgula: ``` $ phpcs --standard=PEAR,Squiz,Zend /meu-diretorio/ ``` ## Como criar um padrão customizado Além de todos os padrões que vem instalados com o PHPCS também possível criar um padrão do zero. Embora não seja um trabalho difícil também não é trivial, o site do PHPCS tem uma documentação completa com exemplos de como criar regras específicas e adicioná-las aos seus testes. Para mais informações acesse o link: [https://github.com/squizlabs/PHP_CodeSniffer/wiki/Coding-Standard-Tutorial](https://github.com/squizlabs/PHP_CodeSniffer/wiki/Coding-Standard-Tutorial) Se você não quer criar o padrão como demonstrado na documentação da ferramenta existe uma outra alternativa, sendo de nível mais alto. Você pode utilizar um gerador de padrão online, embora ele não tenha todas as opções possíveis, você pode criar o seu próprio padrão com um certo nível de customização: [http://edorian.github.io/php-coding-standard-generator/#phpcs](http://edorian.github.io/php-coding-standard-generator/#phpcs) Nesse site você pode através de caixas de seleção escolher quais padrões você quer no seu livro de regras, ao adicionar mais regras um arquivo `.xml` é criado em tempo real. Quando você terminar de definir quais regras serão utilizadas você deve salvar esse `xml` dentro do seu projeto. Um exemplo seria salvar o arquivo de regras com o nome `phpcs.xml`. Com o arquivo de regras customizado em mãos você pode executar o comando que especifica um padrão e ao invés de utilizar um dos padrões instalados você usará o seu livro de regras: `phpcs.xml`. Usando o padrão customizado ``` php vendor/bin/phpcs --standard=phpcs.xml meu-diretorio/ ```
COMENTE SOBRE