Magento 2 eklentisinde kod çoğaltma nasıl kontrol edilir?


15

Magento 2'de bir modül oluşturdum ve şimdi Magento Marketplace'te göndermeye çalışıyorum. Uzantım iş incelemesi ve Teknik incelemeden geçti, ancak KG incelemesi ile ilgili sorunlarla karşılaşıyorum.

Uzantımda kod çoğaltması olduğunu belirten Magento pazarından bir posta aldım. Aşağıda posta örneği verilmiştir.

Kod kalitesi sorunları: GBM: Bu uzantı yinelenen kod içeriyor.

Marketplace hesabındaki ürünüme gittiğimde ve teknik raporu kontrol ettiğimde aşağıda buldum.

Kod Kopyaları Tespit Edildi

Bu uzantı, doğrudan Magento kod tabanından kopyalanan kodu içerir. Bu, Magento Geliştirici Anlaşmasının 3.1 ve 9.1b bölümlerini doğrudan ihlal etmektedir.

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

Diğer uzantılarım için bu sorunu önlemek için kurulumumda kod çoğaltmasını denetlememin bir yolu var mı?

Yanıtlar:


6

Magento 2 Kurulum klasörü

Kod uzantısı ile kontrol için Adım-1

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

Adım-2 aşağıdaki komutu çalıştırın

php bin/magento dev:tests:run static

Adım -3, çoğaltma koduna bakın

dev/tests/static/report
phpcpd_report.xml

Şimdi kontrol et phpcpd_report.xml


1
Merhaba nikhil, lütfen ayrıntılı olarak açıklayabilir misiniz
Sagar Dobariya

6

Kod çoğaltmasını kontrol etmek için kullanılan Magento 2 komutu için bazı açıklamalar.

Kod çoğaltmasını / kopyala-yapıştır kontrol komutu aşağıdadır.

php bin/magento dev:tests:run static

Bu komut önce dev/tests/staticklasöre gider . Burada bu test takımı için phpunit.xml.dist bildirim dosyasını görebilirsiniz .

<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>

Bu dosyada, farklı kod testleri için hangi dosyanın yürütüleceğini tanımlayan yukarıdaki kodu bulacaksınız.

Gördüğünüz daraltmak için PHP Coding Standard Verification testsuiteBu dosya çalıştırır testsuite / Magento / Test / PHP / LiveCodeTest.php

Bu dosyayı açtığınızda, farklı türdeki kod sorunlarını kontrol etmek için farklı işlevler bulacaksınız. Yürütülecek işlevtestCopyPaste

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
    );
}

Burada, bu kod kontrolündeki herhangi bir dosya / klasörü kara listeye almak için kullanılacak bir kod bulacaksınız.

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

Bu foreachişlev dev / testing / static / testsuite / Magento / Test / Php / _files / phpcpd / kara liste konumuna .txteklenen herhangi bir dosyayı kontrol eder . Dosyayı okuyacak ve kopyala yapıştırma kodu algılama işleminden hariç tutulacak tüm klasörleri yok sayacaktır.

Tüm kara liste dosyalarını / klasörlerini koda ekledikten sonra kodun altında çalışır.

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

Bu kod run, dev / testing / static / framework / Magento / TestFramework / CodingStandard / Tool / CopyPasteDetector.php dosyasının işlevini yürütür .

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;
}

Burada, kod listedeki tüm blacklistedklasörleri / dosyaları ekler --exclude.

Bundan sonra vendor/bin/phpcpdkomut çalışacaktır .

Burada komutun kendisinde Magento var

tüm Testdosyaları koda göre hariç tuttu

--names-exclude "*Test.php" 

Ayrıca, kodla 13 satırdan az olan tüm kod kopyalarını atladı

--min-lines 13

Bu komut yürütme çıktısı testCopyPasteişlevde tanımlanan dosyaya eklenecektir . Kopyala yapıştır algılaması için dosya adı dev / testing / static / report konumunda bulunan phpcpd_report.xml'dir .

Komutun başarıyla yürütülmesinden sonra, çıktı rapor dosyalarına eklenir.


- Eğer kod tekrarına bu soruya herhangi bir çözüm önerebilir magento.stackexchange.com/q/191829/20064
Piyush

Merhaba @nikhil, "Bu uzantı yinelenen kod içeriyor" gibi hangi satırı hatayı gösterdiğini söyleyebilir misiniz? phpcpd_report.xml içinde
Emipro Technologies Pvt. Ltd.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.