कैसे Magento 2 एक्सटेंशन में कोड दोहराव की जांच करने के लिए?


15

मैंने Magento 2 में एक मॉड्यूल बनाया है और अब मैं इसे Magento Marketplace पर प्रस्तुत करने का प्रयास कर रहा हूं। मेरा विस्तार व्यावसायिक समीक्षा और तकनीकी समीक्षा से गुजर चुका है लेकिन मैं क्यूए समीक्षा के साथ मुद्दों का सामना कर रहा हूं।

मैंने यह कहते हुए मैगेंटो बाज़ार से एक मेल प्राप्त किया कि मेरे एक्सटेंशन में कोड दोहराव था। नीचे मेल का नमूना है।

कोड की गुणवत्ता के मुद्दे: CPD: इस एक्सटेंशन में डुप्लिकेट कोड है।

जब मैं मार्केटप्लेस खाते पर अपने उत्पाद पर गया, और तकनीकी रिपोर्ट की जांच की, तो मुझे नीचे मिला।

कोड डुप्लिकेट का पता लगाया

इस एक्सटेंशन में कोड है जो सीधे Magento के कोडबेस से कॉपी किया गया है। यह मैगेंटो डेवलपर समझौते के अनुभाग 3.1 और 9.1 बी के सीधे उल्लंघन में है।

File: vendor/module/vendor-module-1.0.0.0/Block/Adminhtml/Module/Edit/Tab/Stores.php
Line: 58
File: magento/module-checkout-agreements/magento-module-checkout-agreements-100.0.6.0/Block/Adminhtml/Agreement/Edit/Form.php
Line: 122

File: magento/module-cms/magento-module-cms-100.0.7.0/Block/Adminhtml/Block/Edit/Form.php
Line: 100
File: vendor/module/vendor-module-1.0.0.0/Block/Adminhtml/Module/Renderer/Files.php
Line: 49

File: magento/framework/magento-framework-100.0.16.0/Data/Form/Element/Image.php
Line: 86
File: vendor/module/vendor-module-1.0.0.0/Model/ResourceModel/AbstractCollection.php
Line: 2
File: magento/module-cms/magento-module-cms-100.0.7.0/Model/ResourceModel/AbstractCollection.php
Line: 6

क्या मेरे अन्य एक्सटेंशन के लिए इस मुद्दे से बचने के लिए मैं अपने सेटअप पर कोड डुप्लिकेट के लिए जांच कर सकता हूं?

जवाबों:


6

Magento 2 सेटअप फ़ोल्डर

कोड एक्सटेंशन के साथ जांच के लिए चरण -1

/dev/tests/static/testsuite/Magento/Test/Php/_files/phpcpd/blacklist
rename common.txt--

चरण -2 कमांड के नीचे चलाएँ

php bin/magento dev:tests:run static

चरण -3 में डुप्लिकेट कोड देखें

dev/tests/static/report
phpcpd_report.xml

अब जांच करें phpcpd_report.xml


1
नमस्ते निखिल, क्या आप कृपया विस्तार से बता सकते हैं
सागर डोबरिया

6

कोड डुप्लिकेट की जांच के लिए इस्तेमाल किए जाने वाले Magento 2 कमांड के लिए कुछ विवरण यहां दिए गए हैं।

कोड डुप्लिकेट / कॉपी-पेस्ट की जांच करने का कमांड नीचे है।

php bin/magento dev:tests:run static

यह कमांड पहले dev/tests/staticफोल्डर में जाएगी। यहां आप इस परीक्षण सूट के लिए घोषणा फ़ाइल phpunit.xml.dist देख सकते हैं ।

<testsuites>
    <testsuite name="Less Static Code Analysis">
        <file>testsuite/Magento/Test/Less/LiveCodeTest.php</file>
    </testsuite>
    <testsuite name="Javascript Static Code Analysis">
        <file>testsuite/Magento/Test/Js/LiveCodeTest.php</file>
    </testsuite>
    <testsuite name="PHP Coding Standard Verification">
        <file>testsuite/Magento/Test/Php/LiveCodeTest.php</file>
    </testsuite>
    <testsuite name="Code Integrity Tests">
        <directory>testsuite/Magento/Test/Integrity</directory>
    </testsuite>
    <testsuite name="Xss Unsafe Output Test">
        <file>testsuite/Magento/Test/Php/XssPhtmlTemplateTest.php</file>
    </testsuite>
</testsuites>

इस फ़ाइल में, आपको ऊपर कोड मिलेगा जो परिभाषित करेगा कि विभिन्न कोड परीक्षणों के लिए किस फ़ाइल को निष्पादित करना है।

नीचे संकीर्ण करने के लिए आप यह देख सकते हैं कि PHP Coding Standard Verification testsuiteयह फ़ाइल testuite / Magento / Test / Php / LiveCodeTest.php निष्पादित करेगा

जब आप इस फ़ाइल को खोलते हैं, तो आपको विभिन्न प्रकार के कोड मुद्दों की जांच करने के लिए अलग-अलग फ़ंक्शन मिलेंगे। जो कार्य निष्पादित किया जाएगा वह हैtestCopyPaste

public function testCopyPaste()
{
    $reportFile = self::$reportDir . '/phpcpd_report.xml';
    $copyPasteDetector = new CopyPasteDetector($reportFile);

    if (!$copyPasteDetector->canRun()) {
        $this->markTestSkipped('PHP Copy/Paste Detector is not available.');
    }

    $blackList = [];
    foreach (glob(__DIR__ . '/_files/phpcpd/blacklist/*.txt') as $list) {
        $blackList = array_merge($blackList, file($list, FILE_IGNORE_NEW_LINES));
    }

    $copyPasteDetector->setBlackList($blackList);

    $result = $copyPasteDetector->run([BP]);

    $output = "";
    if (file_exists($reportFile)) {
        $output = file_get_contents($reportFile);
    }

    $this->assertTrue(
        $result,
        "PHP Copy/Paste Detector has found error(s):" . PHP_EOL . $output
    );
}

यहां, आपको एक कोड मिलेगा जो इस कोड की जाँच से किसी भी फ़ाइल / फ़ोल्डर को ब्लैकलिस्ट करने के लिए उपयोग किया जाएगा।

foreach (glob(__DIR__ . '/_files/phpcpd/blacklist/*.txt') as $list) {
    $blackList = array_merge($blackList, file($list, FILE_IGNORE_NEW_LINES));
}

यह foreachफ़ंक्शन देव / परीक्षणों / स्थिर / टेस्टसुइट / Magento / टेस्ट / Php / _files / phpcpd / ब्लैकलिस्ट स्थान .txtमें जोड़ी गई किसी भी फ़ाइल के लिए जाँच करेगा । यह फ़ाइल को पढ़ेगा और कॉपी पेस्ट कोड डिटेक्शन प्रक्रिया से बाहर करने के लिए सभी फ़ोल्डरों की अनदेखी करेगा।

सभी ब्लैकलिस्ट फ़ाइलों / फ़ोल्डरों को कोड में जोड़ने के बाद, यह कोड से नीचे चलेगा।

$result = $copyPasteDetector->run([BP]);

यह कोड देव / परीक्षणों / स्थिर / रूपरेखा / Magento / TestFramework / CodingStandard / Tool / CopyPasteDetector.php फ़ाइल के runकार्य को निष्पादित करेगा ।

public function run(array $whiteList)
{
    $blackListStr = ' ';
    foreach ($this->blacklist as $file) {
        $file = escapeshellarg(trim($file));
        if (!$file) {
            continue;
        }
        $blackListStr .= '--exclude ' . $file . ' ';
    }

    $vendorDir = require BP . '/app/etc/vendor_path.php';
    $command = 'php ' . BP . '/' . $vendorDir . '/bin/phpcpd' . ' --log-pmd ' . escapeshellarg(
            $this->reportFile
        ) . ' --names-exclude "*Test.php" --min-lines 13' . $blackListStr . ' ' . implode(' ', $whiteList);

    exec($command, $output, $exitCode);

    return !(bool)$exitCode;
}

यहां, कोड सूची blacklistedमें सभी फ़ोल्डर्स / फ़ाइलों को जोड़ता है --exclude

इसके बाद यह vendor/bin/phpcpdकमांड चलाएगा ।

यहाँ कमांड में ही Magento के पास है

Testकोड द्वारा सभी फ़ाइलों को बाहर कर दिया

--names-exclude "*Test.php" 

इसने उन सभी कोड डुप्लिकेट को भी छोड़ दिया है जो कोड द्वारा 13 लाइनों से कम हैं

--min-lines 13

इस कमांड निष्पादन के लिए आउटपुट testCopyPasteफ़ंक्शन में परिभाषित फ़ाइल में जोड़ा जाएगा । कॉपी-पेस्ट का पता लगाने के लिए फ़ाइल नाम है phpcpd_report.xml पर स्थित देव / परीक्षण / स्थिर / रिपोर्ट स्थान।

कमांड के सफल निष्पादन के बाद, आउटपुट को रिपोर्ट फ़ाइलों में जोड़ा जाएगा।


क्या आप कोड डुप्लीकेशन के इस प्रश्न का कोई हल सुझा सकते हैं - magento.stackexchange.com/q/191829/20064
पीयूष

नमस्कार @ मिनाहिल क्या आप मुझे यह बता सकते हैं कि कौन सी लाइन "त्रुटि को इंगित करती है" इस एक्सटेंशन में डुप्लिकेट कोड है। phpcpd_report.xml में
एमिप्रो टेक्नोलॉजीज प्रा। लिमिटेड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.