Skip to content

Commit 6219ecf

Browse files
committed
🔧 Duplicate command improve
1 parent cc2bec7 commit 6219ecf

File tree

1 file changed

+36
-6
lines changed

1 file changed

+36
-6
lines changed

src/Analyzers/DuplicateAnalyzer.php

+36-6
Original file line numberDiff line numberDiff line change
@@ -64,27 +64,57 @@ function ($current, $key, $iterator) use ($ext, $exclude) {
6464
protected function processLines(SplFileObject $file)
6565
{
6666
$filename = $file->getPathname();
67+
68+
$lines = [];
6769
$totalLines = 0;
68-
$code = [];
70+
$isMultilines = false;
6971
while ($file->valid()) {
7072
$currentLine = $file->fgets();
7173
$trimLine = trim($currentLine);
74+
$lineProperties = [];
7275

7376
// Ignoring the last new line
7477
if ($file->eof() && empty($trimLine)) {
7578
break;
7679
}
7780

7881
$totalLines ++;
82+
if (empty($trimLine)) {
83+
$lineProperties['blank'] = true;
84+
}
85+
86+
// Detecting comments
87+
if (strpos($trimLine, '//') === 0
88+
|| strpos($trimLine, '#') === 0) {
89+
$lineProperties['comment'] = true;
90+
}
7991

80-
if (!empty($trimLine)) {
81-
$code[] = $trimLine;
92+
// Detecting multilines comments
93+
if (strpos($trimLine, '/*') === 0) {
94+
$isMultilines = true;
95+
}
96+
if ($isMultilines) {
97+
$lineProperties['comment'] = true;
98+
}
99+
if (strpos($trimLine, '*/') === 0) {
100+
$isMultilines = false;
82101
}
102+
103+
$lineProperties['code'] = $trimLine;
104+
$lines[] = $lineProperties;
83105
}
84106

85-
$totalCode = count($code);
86-
$uniqueCode = array_unique($code);
87-
$totalUniqueCode = count($uniqueCode);
107+
$code = array_filter($lines, function ($line) {
108+
if (isset($line['blank']) || isset($line['comment']) || in_array($line['code'], ['{', '}'])) {
109+
return false;
110+
}
111+
112+
return true;
113+
});
114+
115+
$codeFlatten = array_column($code, 'code');
116+
$totalCode = count($codeFlatten);
117+
$totalUniqueCode = count(array_unique($codeFlatten));
88118
$duplicate = $totalCode - $totalUniqueCode;
89119

90120
if ($duplicate > 0) {

0 commit comments

Comments
 (0)