如何配置PHP CodeSniffer以允许我的case语句以我喜欢的方式缩进?
我有如下代码:如何配置PHP CodeSniffer以允许我的case语句以我喜欢的方式缩进?,php,emacs,static-analysis,codesniffer,Php,Emacs,Static Analysis,Codesniffer,我有如下代码: function processRequest() { // get the verb $method = strtolower($_SERVER['REQUEST_METHOD']); switch ($method) { case 'get': handleGet(); break; case 'post': handlePost(); // $data = $_POST; break
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;
}
}
<?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抱怨那些case语句的缩进。在使用flymake的emacs中,它如下所示:
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;
}
}
<?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>
信息是:
错误-行缩进不正确;应为2个空格,找到4个(PEAR.WhiteSpace.ScopeIndent.error)
显然,CodeSniffer希望case语句的缩进程度低于实际情况
我如何告诉CodeSniffer允许我的case语句按我希望的方式缩进。或者更好的方法是,强制我的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语句范围内的任何内容都不应该相对于作用域开头curly缩进
我在PEAR.Whitespace.ScopeIndent
中找不到调整此设置的方法,但是。。。。该嗅探扩展了更基本的泛型.Whitespace.ScopeIndent
,它不包括$nonindingscopes
数组中的T\u开关
因此,我所做的是以我想要的方式允许我的case语句修改我的ruleset.xml文件,排除该嗅探的PEAR版本,并包括该嗅探的通用版本。看起来是这样的:
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;
}
}
<?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标准目录下的子目录中。对我来说,文件位置是\dev\phpcs\CodeSniffer\Standards\MyStandard\ruleset.xml
然后我像这样运行PHPC:
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;
}
}
<?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\php.exe\dev\phpcs\scripts\phpcs--standard=MyStandard--report=emacs-s file.php
omigosh如果可以,我会支持这篇文章。我记不起了,我很高兴我曾经把它公开发布在这里。谢谢你,我,分享这个。这节省了我很多时间。