Comment configurer PHP CodeSniffer pour permettre à mon cas énoncés à être mis en retrait de la façon dont je l'aime?

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

Question

J'ai un code qui ressemble à ceci:

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 plaint que les retraits de ces déclarations.Dans emacs avec flymake il ressemble à ceci:

enter image description here

Le message est:

erreur de la Ligne de retrait de manière incorrecte;prévu 2 places, 4 (POIRE.Des espaces.ScopeIndent.Incorrect)

Évidemment CodeSniffer veut que le cas de déclarations de MOINS en retrait que ce qu'ils sont.

Comment puis-je savoir CodeSniffer pour permettre à mon cas énoncés à être mis en retrait de la façon dont je le veux.Ou mieux, à appliquer que mon cas déclarations sont en retrait de cette façon?

Était-ce utile?

La solution

Le Sniff connu comme PEAR.Whitespace.ScopeIndent est défini dans le fichier de code phpcs\CodeSniffer\Standards\PEAR\Sniffs\Whitespace\ScopeIndentSniff.php et contient le code suivant:

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

Voir la $nonIndentingScopes?Il signifie apparemment que quoi que ce soit dans le cadre d'une instruction switch est prévu pour pas être mis en retrait à l'égard de la portée d'ouverture bouclés.

Je ne pouvais pas trouver un moyen d'ajuster ce réglage en PEAR.Whitespace.ScopeIndent, mais....que Renifler s'étend le plus de base Generic.Whitespace.ScopeIndent, qui ne comprend pas T_SWITCH dans le $nonIndentingScopes tableau.

Donc, ce que j'ai fait pour permettre à mon cas énoncés de la façon que je voulais modifier mon ruleset.xml fichier, afin d'exclure la POIRE version de renifler, et inclure la version Générique de renifler.Il ressemble à ceci:

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

Ce fichier doit être présent dans un sous-dossier dans les Normes répertoire de PHP CodeSniffer.Pour moi, l'emplacement du fichier est \dev\phpcs\CodeSniffer\Standards\MyStandard\ruleset.xml

Puis-je exécuter phpcs comme ceci:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top