desenv-web-rp.com

Como ignorar certos erros padrão de codificação em PHP CodeSniffer

Temos um aplicativo Web PHP 5 e atualmente estamos avaliando PHP CodeSniffer para decidir se forçar os padrões de código melhora a qualidade do código sem causar muita dor de cabeça. Se parecer bom, adicionaremos um gancho de pré-confirmação do SVN para garantir que todos os novos arquivos confirmados no ramo dev estejam livres de odores padrão de codificação.

Existe uma maneira de configurar PHP codeSniffer para ignorar um tipo específico de erro? ou fazê-lo tratar um determinado erro como um aviso?

Aqui está um exemplo para demonstrar o problema:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div>
    <?php
    echo getTabContent('Programming', 1, $numX, $numY);

    if (isset($msg)) {
        echo $msg;
    }
    ?>
</div>
</body>
</html>

E esta é a saída do PHP_CodeSniffer:

> phpcs test.php 
 
 ------------------------------ -------------------------------------------------- 
 ENCONTRARAM 2 ERRO (S) E 1 ADVERTÊNCIA (S) QUE AFETAM 3 LINHA (S) 
 ---------------------- -------------------------------------------------- -------- 
 1 | ATENÇÃO | A linha excede 85 caracteres; contém 121 caracteres 
 9 | ERRO Comentário de documento em arquivo ausente 
 11 | ERRO Linha recuada incorretamente; 0 espaços esperados, encontrados 4 
 --------------------------------------- ----------------------------------------- 

Eu tenho um problema com o erro " Linha recuada incorretamente ". Eu acho que isso acontece porque eu estou misturando a indentação PHP com a indentação HTML. Mas isso torna mais legível, não é? ( levando em consideração que não tenho recursos para migrar para uma estrutura MVC agora ). Então, eu gostaria de ignorá-lo, por favor.

13
Tom

Encontrei uma solução para remover o erro " Linha recuada incorretamente ", mas primeiro devo dizer que dragonmantank tem um ponto excelente - você não deve misturar PHP e HTML. É uma receita para dores de cabeça. No entanto, infelizmente, acho que misturar PHP e HTML é muito comum, especialmente em software legado.

A correção mais rápida e suja, assumindo que estamos usando os padrões de codificação padrão phpcs (que são os padrões PEAR )) é remover o arquivo Sniff relevante. Encontre a localização dos padrões PEAR, para mim, usando bunt , estava aqui:

> cd /usr/share/php/PHP/CodeSniffer/Standards/PEAR/Sniffs/WhiteSpace

Renomeie o arquivo ScopeIndentSniff.php para que o sniff que verifica a indentação do código não seja mais executado:

> Sudo mv ScopeIndentSniff.php ScopeIndentSniff.php.bk

Trabalho realizado - agora o recuo não será verificado e o erro " Linha recuado incorretamente " foi vencido ocorrerá ( e seu código não será padrão e não será de alta qualidade! ).


A solução acima é bastante amadora - a solução mais limpa é criar um novo padrão de codificação que use todos os padrões PEAR _, exceto as suas personalizações escolhidas a dedo. Isso é muito rápido de fazer. Aqui está como fazê-lo usando getIncludedSniffs() e getExcludedSniffs() e algumas convenções de nomenclatura phpcs:

Go to the directory where the phpcs coding standards are defined:
> cd /usr/share/php/PHP/CodeSniffer/Standards

Create a new directory for your new standard:
> Sudo mkdir PEARish
> cd PEARish

Create your new standard by saving the following in the file:
> Sudo emacs PEARishCodingStandard.php
<?php
class PHP_CodeSniffer_Standards_PEARish_PEARishCodingStandard extends PHP_CodeSniffer_Standards_CodingStandard
{
    public function getIncludedSniffs()
    {
      return array('PEAR');
    }

    public function getExcludedSniffs()
    {
      return array('PEAR/Sniffs/WhiteSpace/ScopeIndentSniff.php');
    }
}
?>

Teste seu novo padrão de codificação personalizado chamando phpcs usando o sinalizador --standard. Por exemplo:

> phpcs --standard=PEARish Test.php

Depois de funcionar, você pode definir seu novo padrão como padrão, o que significa que você não precisa digitar o sinalizador --standard toda vez que usar phpcs:

> Sudo phpcs --config-set default_standard PEARish

Veja o manual do phpcs para mais informações.

11
Tom

Você encontrará muitos problemas ao executar o PHPCS com o seu código PHP misturado ao HTML. O PHPCS só é realmente útil quando você analisa scripts PHP puros. Os padrões de codificação embutidos são baseados em PHP puro, e não em PHP/HTML misto.

Uma opção seria criar seu próprio padrão personalizado e usá-lo. O padrão personalizado levaria em conta a mistura de código, mas provavelmente seria difícil escrever.

A outra opção é usar um sistema de modelos, pois você disse que não deseja mudar para uma estrutura. Smarty e Twig podem ser usados ​​fora de uma estrutura MVC. Vá para um desses e faça com que o PHPCS analise apenas os arquivos .PHP, não os arquivos de modelo.

7
dragonmantank