comment vérifier la duplication de code dans l'extension magento 2?

15

J'ai créé un module dans Magento 2 et maintenant j'essaye de le soumettre sur Magento Marketplace. Mon extension est passée de l'examen des activités et de l'examen technique, mais je rencontre des problèmes avec l'examen de l'assurance qualité.

J'ai reçu un courrier du marché Magento indiquant que j'avais une duplication de code dans mon extension. Vous trouverez ci-dessous l'exemple du courrier.

Problèmes de qualité du code: CPD: cette extension contient du code dupliqué.

Lorsque je suis allé sur mon produit sur le compte Marketplace et que j'ai vérifié le rapport technique, j'ai trouvé ci-dessous.

Doublons de code détectés

Cette extension contient du code qui est directement copié à partir de la base de code Magento. Ceci est en violation directe des sections 3.1 et 9.1b de l'accord de développeur 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

Existe-t-il un moyen de vérifier la duplication de code sur ma configuration pour éviter ce problème pour mes autres extensions?

Sagar Dobariya
la source

Réponses:

6

Dossier d'installation de Magento 2

Étape 1 pour vérifier avec l'extension de code

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

Étape 2: exécuter la commande ci-dessous

php bin/magento dev:tests:run static

Étape -3 voir le code de duplication

dev/tests/static/report
phpcpd_report.xml

Maintenant, vérifiez phpcpd_report.xml

Nikhil Vaghela
la source
1
Bonjour nikhil, pouvez-vous expliquer en détail
Sagar Dobariya
6

Voici une description de la commande Magento 2 utilisée pour vérifier la duplication de code.

La commande pour vérifier la duplication / copier-coller du code est ci-dessous.

php bin/magento dev:tests:run static

Cette commande ira d'abord dans le dev/tests/staticdossier. Ici vous pouvez voir le fichier de déclaration phpunit.xml.dist pour cette suite de tests.

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

Dans ce fichier, vous trouverez ci-dessus le code qui définira quel fichier exécuter pour différents tests de code.

Pour affiner, vous pouvez voir PHP Coding Standard Verification testsuiteCela exécutera le fichier testsuite / Magento / Test / Php / LiveCodeTest.php

Lorsque vous ouvrez ce fichier, vous trouverez différentes fonctions pour vérifier les différents types de problèmes de code. La fonction qui sera exécutée esttestCopyPaste

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

Ici, vous trouverez un code qui sera utilisé pour mettre sur liste noire tous les fichiers / dossiers de cette vérification de code.

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

Cette foreachfonction vérifiera tout .txtfichier ajouté dans dev / tests / static / testsuite / Magento / Test / Php / _files / phpcpd / blacklist . Il lira le fichier et ignorera tous les dossiers à exclure du processus de détection du code copier-coller.

Après avoir ajouté tous les fichiers / dossiers de la liste noire au code, il s'exécutera sous le code.

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

Ce code exécutera la runfonction du fichier dev / tests / 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;
}

Ici, le code ajoute tous les blacklisteddossiers / fichiers de la --excludeliste.

Après cela, il exécutera la vendor/bin/phpcpdcommande.

Ici, dans la commande elle-même, Magento a

exclu tous les Testfichiers par code

--names-exclude "*Test.php" 

Il a également ignoré tous les doublons de code de moins de 13 lignes par code.

--min-lines 13

La sortie de cette exécution de commande sera ajoutée au fichier défini dans la testCopyPastefonction. Le nom de fichier pour la détection de copier-coller est phpcpd_report.xml situé à l'emplacement dev / tests / static / report .

Après l'exécution réussie de la commande, la sortie sera ajoutée aux fichiers de rapport.

Jaimin Sutariya
la source
Pouvez-vous suggérer une solution à cette question de duplication de code - magento.stackexchange.com/q/191829/20064
Piyush
Bonjour @nikhil pouvez-vous me dire quelle ligne indique l'erreur comme "Cette extension contient du code dupliqué." dans phpcpd_report.xml
Emipro Technologies Pvt. Ltd