@@ -64,27 +64,57 @@ function ($current, $key, $iterator) use ($ext, $exclude) {
64
64
protected function processLines (SplFileObject $ file )
65
65
{
66
66
$ filename = $ file ->getPathname ();
67
+
68
+ $ lines = [];
67
69
$ totalLines = 0 ;
68
- $ code = [] ;
70
+ $ isMultilines = false ;
69
71
while ($ file ->valid ()) {
70
72
$ currentLine = $ file ->fgets ();
71
73
$ trimLine = trim ($ currentLine );
74
+ $ lineProperties = [];
72
75
73
76
// Ignoring the last new line
74
77
if ($ file ->eof () && empty ($ trimLine )) {
75
78
break ;
76
79
}
77
80
78
81
$ 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
+ }
79
91
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 ;
82
101
}
102
+
103
+ $ lineProperties ['code ' ] = $ trimLine ;
104
+ $ lines [] = $ lineProperties ;
83
105
}
84
106
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 ));
88
118
$ duplicate = $ totalCode - $ totalUniqueCode ;
89
119
90
120
if ($ duplicate > 0 ) {
0 commit comments