Come configurare PHP CodicesNiffer per consentire al mio caso le istruzioni del caso di rientranza nel modo in cui mi piace?

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

Domanda

Ho il codice che assomiglia a questo:

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 CodicesNiffer si lamenta sugli trattenimenti di tali distintivi.In Emacs con Flymake sembra questo:

Inserisci Descrizione dell'immagine qui

Il messaggio è:

.

Errore - linea rientrata in modo errato;Previsto 2 spazi, trovati 4 (pera.whitespace.scopeindent.incorrect)

Ovviamente CodeSniffer vuole che le dichiarazioni del caso siano meno rientrate di quanto non siano.

Come posso dire a CodesNiffer di consentire al mio caso le dichiarazioni di casi di essere rientrate nel modo in cui li voglio.O meglio, a enforce che le mie dichiarazioni del caso sono rientrate in questo modo?

È stato utile?

Soluzione

Lo sniff noto come PEAR.Whitespace.ScopeIndent è definito nel file di codice phpcs\CodeSniffer\Standards\PEAR\Sniffs\Whitespace\ScopeIndentSniff.php e include il seguente codice:

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
.

Vedi il $nonIndentingScopes? Apparentemente significa che qualsiasi cosa nell'ambito di un'istruzione Switch è prevista per non essere rientrata rispetto all'apertura dell'ambito riccio.

Non riesco a trovare un modo per modificare questa impostazione in PEAR.Whitespace.ScopeIndent, ma .... che sniff estende il Generic.Whitespace.ScopeIndent più basico, che non include T_SWITCH nell'array $nonIndentingScopes.

Allora cosa ho fatto per consentire alle mie istituzioni del caso il modo in cui volevo modificare il mio file Toolet.xml, per escludere la versione di pera di tale sniff e includere la versione generica di quella sniff. Sembra questo:

<?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>
.

Questo file deve essere presente in una Subdir nell'ambito della directory degli standard per PHP CodeSniffer. Per me, la posizione del file è \dev\phpcs\CodeSniffer\Standards\MyStandard\ruleset.xml

Allora eseguo PHPC come questo:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top