Como configurar o PHP CodeSniffer para permitir que o meu caso instruções para ser recuada do jeito que eu gosto?

StackOverflow https://stackoverflow.com//questions/9652868

Pergunta

Eu tenho um código parecido com este:

function processRequest() {

  // get the verb
  $method = strtolower($_SERVER['REQUEST_METHOD']);

  switch ($method) {
    case 'get':
      handleGet();
      break;
    case 'post':
      handlePost();
      // $data = $_POST;
      break;
    case 'delete':
      handleDelete();
      break;
    case 'options':
      header('Allow: GET, POST, DELETE, OPTIONS');
      break;
    default:
      header('HTTP/1.1 405 Method Not Allowed');
      break;
  }
}

PHP CodeSniffer queixa-se sobre os avanços dessas instruções de caso.Em emacs com flymake ele se parece com isso:

enter image description here

A mensagem é:

erro de Linha recuada incorretamente;espera-2 espaços, encontrei 4 (PÊRA.O espaço em branco.ScopeIndent.Incorreto)

Obviamente CodeSniffer quer que o caso instruções para ser MENOS recuado do que eles são.

Como eu posso dizer CodeSniffer para permitir que o meu caso instruções para ser recuada do jeito que eu quiser.Ou melhor, para impor que meu caso demonstrações são recuadas desta forma?

Foi útil?

Solução

Sniff conhecido como PEAR.Whitespace.ScopeIndent é definido no arquivo de código phpcs\CodeSniffer\Standards\PEAR\Sniffs\Whitespace\ScopeIndentSniff.php e inclui o seguinte código:

class PEAR_Sniffs_WhiteSpace_ScopeIndentSniff extends Generic_Sniffs_WhiteSpace_ScopeIndentSniff
{
    /**
     * Any scope openers that should not cause an indent.
     *
     * @var array(int)
     */
    protected $nonIndentingScopes = array(T_SWITCH);

}//end class

Ver o $nonIndentingScopes?Ele, aparentemente, significa que qualquer coisa dentro do escopo de uma instrução switch é esperado para não um avanço com relação ao escopo de abertura encaracolado.

Eu não poderia encontrar uma maneira de ajustar essa configuração em PEAR.Whitespace.ScopeIndent, mas....que Cheirar estende-se a mais básica Generic.Whitespace.ScopeIndent, o que não inclui T_SWITCH no $nonIndentingScopes matriz.

Então o que eu fiz para permitir que o meu caso demonstrações do jeito que eu queria era modificar a minha ruleset.xml arquivo, para excluir a PÊRA versão do que cheirar, e incluem a versão Genérica do que cheirar.Ele se parece com isso:

<?xml version="1.0"?>
<ruleset name="Custom Standard">
  <!-- http://pear.php.net/manual/en/package.php.php-codesniffer.annotated-ruleset.php -->
  <description>My custom coding standard</description>

  <rule ref="PEAR">
         ......
    <exclude name="PEAR.WhiteSpace.ScopeIndent"/>
  </rule>

   ....

  <!-- not PEAR -->
  <rule ref="Generic.WhiteSpace.ScopeIndent">
    <properties>
      <property name="indent" value="2"/>
    </properties>
  </rule>

</ruleset>

Este ficheiro tem de estar presente em um sub-as Normas de diretório para PHP CodeSniffer.Para mim, o local do arquivo é \dev\phpcs\CodeSniffer\Standards\MyStandard\ruleset.xml

Então eu corro phpcs como este:

\php\php.exe \dev\phpcs\scripts\phpcs --standard=MyStandard --report=emacs -s file.php

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top