كيفية تكوين 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 من المسافات البادئة لبيانات الحالة هذه.في emacs مع flymake يبدو الأمر كما يلي:
الرسالة هي:
خطأ - تم وضع مسافة بادئة للسطر بشكل غير صحيح؛من المتوقع وجود مسافتين، تم العثور على 4 (PEAR.WhiteSpace.ScopeIndent.Incorrect)
من الواضح أن CodeSniffer يريد أن تكون عبارات الحالة ذات مسافة بادئة أقل مما هي عليه الآن.
كيف يمكنني إخبار CodeSniffer بالسماح بوضع مسافة بادئة لبيانات حالتي بالطريقة التي أريدها.أو أفضل، ل فرض أن يتم وضع مسافة بادئة لبيانات حالتي بهذه الطريقة؟
المحلول
الشم المعروف ب 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
؟يبدو أن هذا يعني أن أي شيء يقع ضمن نطاق بيان التبديل من المتوقع أن يحدث لا يتم وضع مسافة بادئة فيما يتعلق بمجعد فتح النطاق.
لم أتمكن من العثور على طريقة لتعديل هذا الإعداد PEAR.Whitespace.ScopeIndent
, ، لكن....أن Sniff يمتد بشكل أكثر أساسية Generic.Whitespace.ScopeIndent
, ، والتي لا تشمل T_SWITCH
في ال $nonIndentingScopes
مجموعة مصفوفة.
لذا فإن ما فعلته للسماح ببيانات الحالة الخاصة بي بالطريقة التي أردتها هو تعديل ملف 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>
يجب أن يكون هذا الملف موجودًا في مجلد فرعي ضمن دليل المعايير لـ PHP CodeSniffer.بالنسبة لي، موقع الملف هو \dev\phpcs\CodeSniffer\Standards\MyStandard\ruleset.xml
ثم أقوم بتشغيل phpcs مثل هذا:
\php\php.exe \dev\phpcs\scripts\phpcs --standard=MyStandard --report=emacs -s file.php