PHP कोडस्निफर में कुछ कोडिंग मानक त्रुटियों को अनदेखा कैसे करें


14

हमारे पास एक PHP 5 वेब एप्लिकेशन है और हम वर्तमान में PHP CodeSniffer का मूल्यांकन कर रहे हैं ताकि यह तय किया जा सके कि कोड मानकों को मजबूर करने से बहुत अधिक सिरदर्द पैदा किए बिना कोड गुणवत्ता में सुधार होता है या नहीं। यदि यह अच्छा लगता है तो हम यह सुनिश्चित करने के लिए एसवीएन पूर्व-प्रतिबद्ध हुक जोड़ देंगे कि देव शाखा पर प्रतिबद्ध सभी नई फाइलें मानक गंध से मुक्त हैं।

क्या किसी विशेष प्रकार की त्रुटि को अनदेखा करने के लिए PHP कोड कॉन्फ़िगर करने का एक तरीका है? या चेतावनी के रूप में एक निश्चित त्रुटि का इलाज करने के लिए इसे प्राप्त करें?

इस मुद्दे को प्रदर्शित करने के लिए एक उदाहरण:

<!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) और 1 वार्निंग (S) 3 लाइन (S) को सुरक्षित रखने के लिए
-------------------------------------------------- ------------------------------
  1 | चेतावनी | लाइन 85 वर्णों से अधिक है; जिसमें 121 पात्र हैं
  9 | त्रुटि | गुम फाइल डॉक टिप्पणी
 11 | त्रुटि | गलत तरीके से प्रेरित लाइन; अपेक्षित 0 रिक्त स्थान, 4 मिले
-------------------------------------------------- ------------------------------

मेरे पास " लाइन इंडेंटेड गलत तरीके से " त्रुटि के साथ एक समस्या है । मुझे लगता है कि ऐसा इसलिए होता है क्योंकि मैं HTML इंडेंटेशन के साथ PHP इंडेंटेशन को मिला रहा हूं। लेकिन यह इसे और अधिक पठनीय बनाता है ना? (इस बात को ध्यान में रखते हुए कि अभी मेरे पास MVC फ्रेमवर्क में जाने के लिए रिज़ॉर्ट नहीं हैं )। इसलिए मैं कृपया इसे अनदेखा करना चाहूंगा।


1
यह एक प्रोग्रामिंग सवाल IMO का थोड़ा बहुत है यहाँ होना .. क्योंकि यह उपयोगिता जैसे "LINT" के बारे में है जो ज्यादातर हार्ड-कोर प्रोग्रामर के लिए दिलचस्पी का होगा, जरूरी नहीं कि वेबमास्टर्स। लेकिन यह अच्छी तरह से पूछा और स्वरूपित है, इसलिए हम इसे अभी के लिए छोड़ सकते हैं।
जेफ एटवुड

2
पंक्ति 1 चेतावनी के बारे में: क्या मैं HTML5 DOCTYPE का उपयोग करने का सुझाव दे सकता हूं?
23

आपकी प्रतिक्रिया जेफ के लिए धन्यवाद - मैं इसे स्थानांतरित करने के लिए खुश हूं। मुझे शायद एहसास हुआ होगा जब मैंने सवाल बनाया था जब कोई PHP टैग नहीं था :-)।
टॉम

@luiscubal - वह, अच्छा सुझाव; अपनी सोच की तरह ;-)
टॉम

जवाबों:


11

मुझे " लाइन इंडेंटेड गलत तरीके से " त्रुटि को दूर करने के लिए एक समाधान मिला, लेकिन पहले मुझे यह कहना चाहिए कि ड्रैगनमिंटंक में एक उत्कृष्ट बिंदु है - आपको PHP और HTML को नहीं मिलाना चाहिए। यह सिर दर्द के लिए एक नुस्खा है। हालाँकि, दुर्भाग्य से मुझे लगता है कि PHP और HTML का मिश्रण विशेष रूप से विरासत सॉफ्टवेयर में बहुत आम है।

सबसे तेज़ और गंदी तय मान लें कि हम phpcsडिफ़ॉल्ट कोडिंग मानकों का उपयोग कर रहे हैं (जो PEAR के मानक हैं) प्रासंगिक स्नेप फ़ाइल को निकालना है। उबंटू का उपयोग करते हुए, मेरे लिए PEAR मानकों का स्थान ज्ञात करें , यह यहाँ था:

> 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 पुस्तिका अधिक जानकारी के लिए।


यह वास्तव में आसान था - मैंने ऊंट मामले फ़ंक्शन नामकरण त्रुटियों के साथ "क्लास कम से कम एक स्तर के नाम स्थान में होना चाहिए" की तर्ज पर आने वाली त्रुटियों को दूर करने के लिए इस उत्तर का उपयोग किया। मैं जितना हो सके PSR2 का उपयोग कर रहा हूं, लेकिन एक Magento साइट को संपादित कर रहा हूं, मैं हर फ़ंक्शन को नाम बदलने और छाँटने का नाम नहीं दे पा रहा हूं।
डेव बाल

7

आप HTML के साथ मिश्रित अपने PHP कोड के साथ PHPCS चलाने वाले बहुत से मुद्दों में भाग लेने जा रहे हैं। जब आप शुद्ध PHP स्क्रिप्ट्स को पार्स करते हैं तो PHPCS वास्तव में केवल उपयोगी होता है। अंतर्निहित कोडिंग मानकों को शुद्ध PHP के आसपास बनाया गया है, न कि मिश्रित PHP / HTML।

एक विकल्प यह होगा कि आप अपने स्वयं के कस्टम मानक का निर्माण करें और इसके बजाय इसका उपयोग करें। कस्टम मानक कोड के मिश्रण को ध्यान में रखेगा, लेकिन यह शायद लिखने के लिए एक दर्द होगा।

दूसरा विकल्प एक टेम्प्लेटिंग सिस्टम का उपयोग करना है क्योंकि आपने कहा था कि आप किसी ढांचे में नहीं जाना चाहते हैं। स्मार्टी और ट्विग दोनों का उपयोग एमवीसी ढांचे के बाहर किया जा सकता है। उनमें से किसी एक पर जाएँ और फिर PHPCS में केवल .PHP फ़ाइलों को पार्स करें, न कि टेम्पलेट फ़ाइलों को।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.