7

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

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では、次のようになります。

ここに画像の説明を入力してください

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

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

明らかに、CodeSnifferは、caseステートメントのインデントを実際よりも少なくすることを望んでいます。

ケースステートメントを希望どおりにインデントできるようにCodeSnifferに指示するにはどうすればよいですか。または、私のケースステートメントがこのようにインデントされるようにするには

4

1 に答える 1

12

として知られているスニフ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ステートメントのスコープ内にあるものは、スコープを開くカーリーに関してインデント されないことが期待されることを意味しているようです。

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

したがって、caseステートメントを希望どおりに許可するために行ったのは、ruleset.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>

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

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

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

于 2012-03-11T06:17:17.467 に答える