як перевірити дублювання коду в розширенні magento 2?


15

Я створив модуль у Magento 2, і зараз я намагаюся подати його на Magento Marketplace. Моє розширення минуло від огляду бізнесу та технічного огляду, але я зіткнувся з проблемами з огляду якості.

Я отримав електронний лист від ринку Magento, в якому вказано, що в моєму розширенні було дублювання коду. Нижче - зразок пошти.

Проблеми якості коду: CPD: Це розширення містить дублюючий код.

Коли я зайшов до свого продукту в обліковий запис Marketplace і перевірив технічний звіт, я знайшов нижче.

Виявлено копії коду

Це розширення містить код, який безпосередньо копіюється з кодової бази Magento. Це прямо порушує розділи 3.1 та 9.1b Угоди про розробників Magento.

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
Привіт nikhil, можете пояснити, будь ласка, докладно
Sagar Dobariya

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Це виконає файл тестування файлів / 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функція перевірить наявність .txtфайлів, доданих у програмі dev / testing / static / testinguite / Magento / Test / Php / _files / phpcpd / чорний список . Він прочитає файл і проігнорує всі папки, щоб виключити з процесу виявлення коду вставлення коду.

Після додавання до коду всіх файлів / папок чорного списку він буде працювати під кодом.

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

Цей код буде виконувати runфункцію файлу dev / testing / static / Framework / Magento / TestFramework / CodingStandard / Tool / CopyPasteDetector.php .

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 команду.

Тут у самій команді Маженто є

виключаються всі Testфайли за кодом

--names-exclude "*Test.php" 

Він також пропустив всі дублікати коду, коди яких менше 13 рядків

--min-lines 13

Вихід для виконання цієї команди буде доданий до файлу, визначеного у testCopyPasteфункції. Ім'я файлу для виявлення копіювання-вставки - phpcpd_report.xml, розташоване в розділі dev / testing / static / report .

Після успішного виконання команди, вихідний файл буде доданий до файлів звітів.


Можете чи ви запропонувати які - або вирішення цього питання дублювання коду - magento.stackexchange.com/q/191829/20064
Piyush

Привіт @nikhil, скажіть, будь ласка, який рядок вказує на помилку типу "Це розширення містить дублюючий код". у phpcpd_report.xml
Emipro Technologies Pvt. ТОВ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.