¿Cómo configurar PHP CodeSniffer para permitir que mis declaraciones de casos tengan sangría como yo quiera?

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

Pregunta

Tengo un código que se parece a 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 se queja de las sangrías de esas declaraciones de casos.En emacs con flymake se ve así:

enter image description here

El mensaje es:

error: línea con sangría incorrecta;Se esperaban 2 espacios, se encontraron 4 (PEAR.WhiteSpace.ScopeIndent.Incorrect)

Obviamente, CodeSniffer quiere que las declaraciones de casos tengan MENOS sangría de lo que tienen.

¿Cómo puedo decirle a CodeSniffer que permita que mis declaraciones de casos tengan sangría como yo quiero?O mejor, a hacer cumplir ¿Que las declaraciones de mi caso tienen sangría de esta manera?

¿Fue útil?

Solución

El Sniff conocido como PEAR.Whitespace.ScopeIndent está definido en el archivo de código phpcs\CodeSniffer\Standards\PEAR\Sniffs\Whitespace\ScopeIndentSniff.php e incluye el siguiente 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 el $nonIndentingScopes?Aparentemente significa que se espera que cualquier cosa dentro del alcance de una declaración de cambio no tener sangría con respecto al rizado de apertura del alcance.

No pude encontrar una manera de modificar esta configuración en PEAR.Whitespace.ScopeIndent, pero....que Sniff extiende lo más básico Generic.Whitespace.ScopeIndent, que no incluye T_SWITCH en el $nonIndentingScopes formación.

Entonces, lo que hice para permitir las declaraciones de mi caso de la forma que quería fue modificar mi archivo ruleset.xml para excluir la versión PEAR de ese sniff e incluir la versión genérica de ese sniff.Se parece a esto:

<?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 archivo debe estar presente en un subdirectorio del directorio Estándares de PHP CodeSniffer.Para mí, la ubicación del archivo es \dev\phpcs\CodeSniffer\Standards\MyStandard\ruleset.xml

Luego ejecuto phpcs así:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top