Làm thế nào để kiểm tra sao chép mã trong phần mở rộng magento 2?


15

Tôi đã tạo một mô-đun trong Magento 2 và bây giờ tôi đang cố gắng gửi nó trên Magento Marketplace. Tiện ích mở rộng của tôi đã được chuyển từ đánh giá kinh doanh và Đánh giá kỹ thuật nhưng tôi đang gặp vấn đề với đánh giá QA.

Tôi nhận được một thư từ thị trường Magento nói rằng tôi đã sao chép mã trong phần mở rộng của mình. Dưới đây là mẫu của thư.

Các vấn đề về chất lượng mã: CPD: Phần mở rộng này chứa mã trùng lặp.

Khi tôi truy cập sản phẩm của mình trên tài khoản Marketplace và kiểm tra báo cáo kỹ thuật, tôi đã tìm thấy bên dưới.

Mã trùng lặp được phát hiện

Tiện ích mở rộng này chứa mã được sao chép trực tiếp từ cơ sở mã Magento. Điều này vi phạm trực tiếp các Phần 3.1 và 9.1b của Thỏa thuận nhà phát triển 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

Có cách nào tôi có thể kiểm tra sao chép mã trên thiết lập của mình để tránh sự cố này cho các tiện ích mở rộng khác không?

Câu trả lời:


6

Thư mục cài đặt Magento 2

Bước 1 để kiểm tra với phần mở rộng mã

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

Bước 2 chạy bên dưới lệnh

php bin/magento dev:tests:run static

Bước -3 xem mã trùng lặp

dev/tests/static/report
phpcpd_report.xml

Kiểm tra bây giờ phpcpd_report.xml


1
Xin chào nikhil, bạn có thể vui lòng giải thích chi tiết
Sagar Dobariya

6

Dưới đây là một số mô tả cho lệnh Magento 2 được sử dụng để kiểm tra sao chép mã.

Lệnh kiểm tra sao chép mã / sao chép-dán bên dưới.

php bin/magento dev:tests:run static

Lệnh này trước tiên sẽ đi đến dev/tests/staticthư mục. Tại đây bạn có thể xem tệp khai báo phpunit.xml.dist cho bộ kiểm tra này.

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

Trong tệp này, bạn sẽ tìm thấy mã ở trên sẽ xác định tệp nào sẽ thực thi cho các thử nghiệm mã khác nhau.

Để thu hẹp bạn có thể thấy PHP Coding Standard Verification testsuiteĐiều này sẽ thực thi tệp testsuite / Magento / Test / Php / LiveCodeTest.php

Khi bạn mở tệp này, bạn sẽ tìm thấy các chức năng khác nhau để kiểm tra các loại vấn đề mã khác nhau. Hàm sẽ được thực thi là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
    );
}

Tại đây, bạn sẽ tìm thấy một mã sẽ được sử dụng để đưa vào danh sách đen bất kỳ tệp / thư mục nào từ kiểm tra mã này.

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

Đây foreachchức năng sẽ kiểm tra xem có bất kỳ .txttập tin được thêm vào trong dev / kiểm tra / static / TestSuite / Magento / Kiểm tra / Php / _FILES / phpcpd / danh sách đen địa điểm. Nó sẽ đọc tệp và sẽ bỏ qua tất cả các thư mục để loại trừ khỏi quá trình phát hiện mã dán sao chép.

Sau khi thêm tất cả các tệp / thư mục danh sách đen vào mã, nó sẽ chạy bên dưới mã.

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

Mã này sẽ thực thi runchức năng của tệp dev / tests / static / framework / Magento / TestFramework / CodingSt Chuẩn / 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;
}

Ở đây, mã thêm tất cả các blacklistedthư mục / tệp trong--exclude danh sách.

Sau đó nó sẽ chạy vendor/bin/phpcpd lệnh.

Đây là lệnh Magento có

loại trừ tất cả Testcác tệp bằng mã

--names-exclude "*Test.php" 

Nó cũng đã bỏ qua tất cả các bản sao mã ít hơn 13 dòng theo mã

--min-lines 13

Đầu ra cho việc thực thi lệnh này sẽ được thêm vào tệp được xác định trong testCopyPastehàm. Tên tệp để phát hiện sao chép-dán là phpcpd numport.xml nằm ở vị trí dev / tests / static / báo cáo .

Sau khi thực hiện thành công lệnh, đầu ra sẽ được thêm vào các tệp báo cáo.


Bạn có thể đề xuất bất kỳ giải pháp nào cho câu hỏi sao chép mã này không - magento.stackexchange.com/q/191829/20064
Piyush

Xin chào @nikhil, bạn có thể vui lòng cho tôi biết dòng nào chỉ ra lỗi như "Tiện ích mở rộng này chứa mã trùng lặp." trong phpcpd numport.xml
Emipro Technologies Pvt. Ltd.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.