私のcase文を好きなようにインデントできるようにPHP CodeSnifferを設定するにはどうすればよいですか?
-
11-12-2019 - |
質問
私はこのようなコードを持っています:
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(梨。空白。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