كيفية تكوين 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 من المسافات البادئة لبيانات الحالة هذه.في emacs مع flymake يبدو الأمر كما يلي:

enter image description here

الرسالة هي:

خطأ - تم وضع مسافة بادئة للسطر بشكل غير صحيح؛من المتوقع وجود مسافتين، تم العثور على 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top