Wie konfiguriere ich PHP CodeSniffer so, dass meine Case-Anweisungen nach meinen Wünschen eingerückt werden können?

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

Frage

Ich habe Code, der so aussieht:

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 beschwert sich über die Einrückungen dieser case-Anweisungen.In Emacs mit flymake sieht es so aus:

enter image description here

Die Botschaft ist:

fehler - Zeile falsch eingerückt;erwartete 2 Leerzeichen, gefunden 4 (BIRNE.Leerräume.Bereichseindent.Falsch)

Offensichtlich möchte CodeSniffer, dass die case-Anweisungen WENIGER eingerückt sind als sie sind.

Wie kann ich CodeSniffer anweisen, zuzulassen, dass meine Fallaussagen so eingerückt werden, wie ich es möchte.Oder besser, zu durchsetzen dass meine Fallaussagen so eingerückt sind?

War es hilfreich?

Lösung

Der Schnüffler bekannt als PEAR.Whitespace.ScopeIndent ist in der Codedatei definiert phpcs\CodeSniffer\Standards\PEAR\Sniffs\Whitespace\ScopeIndentSniff.php und enthält den folgenden Code:

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

Sehen Sie die $nonIndentingScopes?Es bedeutet anscheinend, dass von allem, was im Rahmen einer switch-Anweisung liegt, erwartet wird nicht in Bezug auf die scope-öffnende geschweifte eingerückt sein.

Ich konnte keine Möglichkeit finden, diese Einstellung zu optimieren PEAR.Whitespace.ScopeIndent, aber....das Schnüffeln erweitert das grundlegendere Generic.Whitespace.ScopeIndent, was nicht beinhaltet T_SWITCH in der $nonIndentingScopes Array.

Was ich also getan habe, um meine Fallaussagen so zuzulassen, wie ich es wollte, war, meinen Regelsatz zu ändern.XML-Datei, um die PEAR-Version dieses Sniffs auszuschließen und die generische Version dieses Sniffs einzuschließen.Es sieht so aus:

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

Diese Datei muss in einem Unterverzeichnis unter dem Standardverzeichnis für PHP CodeSniffer vorhanden sein.Für mich ist der Speicherort der Datei \dev\phpcs\CodeSniffer\Standards\MyStandard\ruleset.xml

Dann führe ich phpcs so aus:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top