私のcase文を好きなようにインデントできるようにPHP CodeSnifferを設定するにはどうすればよいですか?

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

質問

私はこのようなコードを持っています:

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は、これらのcase文のインデントについて不平を言います。Flymakeを使用したemacsでは、次のようになります:

enter image description here

メッセージは次のとおりです:

エラー-行が正しくインデントされていません;予想される2つのスペース、見つかった4(梨。空白。ScopeIndent.間違っている)

明らかにCodeSnifferは、case文がインデントされないようにしたいと考えています。

私のcase文を私が望むようにインデントできるようにCodeSnifferに指示するにはどうすればよいですか。またはより良い、に 強制する 私のcase文はこのようにインデントされていますか?

役に立ちましたか?

解決

として知られているスニフ PEAR.Whitespace.ScopeIndent コードファイルで定義されています phpcs\CodeSniffer\Standards\PEAR\Sniffs\Whitespace\ScopeIndentSniff.php そして、次のコードが含まれています:

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

を参照してください $nonIndentingScopes?これは明らかに、switch文の範囲内のすべてのものが期待されていることを意味します ない は、scope-opening curlyに関してインデントされます。

私はこの設定を微調整する方法を見つけることができませんでした PEAR.Whitespace.ScopeIndent, 、しかし。...そのスニフは、より基本的な拡張します Generic.Whitespace.ScopeIndent, 、含まれていません T_SWITCH の中で $nonIndentingScopes 配列。

だから私が望むように私のケースステートメントを許可するために私がしたことは私のルールセットを変更することでした。xmlファイルは、そのスニフのPEARバージョンを除外し、そのスニフの汎用バージョンを含めるために使用されます。これは次のようになります:

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

このファイルは、PHP CodeSnifferのStandardsディレクトリの下のサブディレクトリに存在する必要があります。私にとって、ファイルの場所は次のとおりです \dev\phpcs\CodeSniffer\Standards\MyStandard\ruleset.xml

次に、次のようにphpcsを実行します:

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top