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