这是用于检查代码重复的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
它将执行文件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 / tests / static / testsuite / Magento / Test / Php / _files / phpcpd / blacklist位置中添加的任何文件。它将读取文件,并将忽略所有文件夹以排除在复制粘贴代码检测过程之外。
将所有黑名单文件/文件夹添加到代码后,它将在代码下面运行。
$result = $copyPasteDetector->run([BP]);
此代码将执行run
的功能开发/测试/静态/框架/ Magento的/ TestFramework / CodingStandard /工具/ 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
命令。
Magento本身在命令中
Test
按代码排除所有
文件
--names-exclude "*Test.php"
它也跳过了所有少于13行的重复代码
--min-lines 13
该命令执行的输出将添加到testCopyPaste
function中定义的文件中。用于检测复制粘贴的文件名是phpcpd_report.xml,位于dev / tests / static / report位置。
成功执行命令后,输出将添加到报告文件中。