it-swarm.asia

كيفية تجاهل بعض الأخطاء القياسية الترميز في PHP CodeSniffer

لدينا PHP تطبيق ويب 5 ونقوم حاليًا بتقييم PHP CodeSniffer من أجل تقرير ما إذا كان فرض معايير الكود يحسن جودة الشفرة دون التسبب في الكثير من الصداع. إذا بدا الأمر جيدًا ، فسنضيف خطافًا مسبقًا لـ SVN لضمان خلو جميع الملفات الجديدة المرتكبة في فرع التطوير من الروائح المعيارية للترميز.

هل هناك طريقة لتكوين PHP codeSnferfer لتجاهل نوع معين من الخطأ؟ أو احصل عليه لعلاج خطأ معين كتحذير بدلاً من ذلك؟

هنا مثال لإظهار المشكلة:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div>
    <?php
    echo getTabContent('Programming', 1, $numX, $numY);

    if (isset($msg)) {
        echo $msg;
    }
    ?>
</div>
</body>
</html>

وهذا هو إخراج PHP_CodeSniffer:

> phpcs test.php 
 
 ------------------------------ -------------------------------------------------- 
 عثر على خطأ 2 (أخطاء) وخطأ واحد (S) يؤثر على 3 خطوط (.) 
 ---------------------- -------------------------------------------------- -------- 
 1 | تحذير | الخط يتجاوز 85 حرفًا ؛ يحتوي على 121 حرفًا 
 9 | خطأ | تعليق ملف مستند مفقود 
 11 | خطأ | خط المسافة البادئة بشكل غير صحيح؛ 0 مساحات متوقعة ، موجودة 4 
 ------------------------------------------- ----------------------------------------- 

لدي مشكلة في الخطأ " المسافة البادئة بشكل غير صحيح ". أعتقد أن هذا يحدث لأنني أقوم بخلط المسافة البادئة PHP بمسافة بادئة HTML. ولكن هذا يجعلها أكثر قابلية للقراءة أليس كذلك؟ ( مع الأخذ في الاعتبار أنني لا أملك الموارد اللازمة للانتقال إلى إطار عمل MVC الآن ). لذا أود تجاهلها من فضلك.

13
Tom

لقد وجدت حلاً لإزالة الخطأ "" ، المسافة البادئة بشكل غير صحيح "ولكن أولاً يجب أن أقول أن dragonmantank لديه نقطة ممتازة - أنت يجب عدم خلط PHP و HTML. إنها وصفة للصداع. ومع ذلك ، للأسف ، أعتقد أن المزج بين PHPو HTML أمر شائع جدًا خاصة في البرامج القديمة.

الإصلاح الأسرع والأكثر قذارة على افتراض أننا نستخدم phpcs معايير الترميز الافتراضية (والتي هي _ الكمثرى المعايير) لإزالة ملف Sniff ذي الصلة. ابحث عن موقع معايير PEAR ، بالنسبة لي ، باستخدام bunt ، كان هنا:

> cd /usr/share/php/PHP/CodeSniffer/Standards/PEAR/Sniffs/WhiteSpace

أعد تسمية الملف ScopeIndentSniff.php بحيث لن يتم بعد ذلك تنفيذ الشم الذي يتحقق من المسافة البادئة للرمز:

> Sudo mv ScopeIndentSniff.php ScopeIndentSniff.php.bk

تم إنجاز المهمة - الآن لن يتم التحقق من المسافة البادئة و " سطر المسافة البادئة بشكل غير صحيح " خطأ لن يحدث ( ولن يكون رمزك قياسيًا ولن يكون ذا جودة عالية! ).


الحل المذكور أعلاه هو تطبيق جميل - الحل الأنظف هو إنشاء معيار ترميز جديد يستخدم جميع معايير PEAR باستثناء تخصيصات الكرز التي اخترتها. هذا سريع جدا للقيام به. إليك كيفية القيام بذلك باستخدام getIncludedSniffs() و getExcludedSniffs() وبعض phpcs اصطلاحات التسمية:

Go to the directory where the phpcs coding standards are defined:
> cd /usr/share/php/PHP/CodeSniffer/Standards

Create a new directory for your new standard:
> Sudo mkdir PEARish
> cd PEARish

Create your new standard by saving the following in the file:
> Sudo emacs PEARishCodingStandard.php
<?php
class PHP_CodeSniffer_Standards_PEARish_PEARishCodingStandard extends PHP_CodeSniffer_Standards_CodingStandard
{
    public function getIncludedSniffs()
    {
      return array('PEAR');
    }

    public function getExcludedSniffs()
    {
      return array('PEAR/Sniffs/WhiteSpace/ScopeIndentSniff.php');
    }
}
?>

اختبر معيار الترميز المخصص الجديد عن طريق استدعاء phpcs باستخدام علامة --standard. فمثلا:

> phpcs --standard=PEARish Test.php

بمجرد العمل ، يمكنك تعيين المعيار الجديد الخاص بك كإعداد افتراضي ، مما يعني أنك لست بحاجة إلى كتابة العلامة --standard في كل مرة تستخدم فيها phpcs:

> Sudo phpcs --config-set default_standard PEARish

راجع دليل phpcs لمزيد من المعلومات.

11
Tom

ستواجه الكثير من المشكلات التي تشغل PHPCS من خلال رمزكPHP المختلط مع HTML. لا يكون PHPCS مفيدًا إلا عند تحليل نصوص نقية PHP. بنيت معايير الترميز المدمج حول PHP النقي ، وليس مختلطة PHP/HTML.

يتمثل أحد الخيارات في بناء معيار مخصص خاص بك واستخدام ذلك بدلاً من ذلك. سيأخذ المعيار المخصص في الحسبان خلط الشفرة ، لكن من المحتمل أن يكون الأمر مؤلمًا في الكتابة.

الخيار الآخر هو استخدام نظام templating حيث قلت إنك لا تريد الانتقال إلى إطار عمل. Smarty و غصين يمكن استخدامهما خارج إطار عمل MVC. انتقل إلى واحد من هؤلاء ثم اطلب PHPCS فقط تحليل ملفات .PHP ، وليس ملفات القوالب.

7
dragonmantank