2
2
3
3
class Tokenizer {
4
4
private $ filename ;
5
+ private $ functions = [];
6
+ private $ classes = [];
7
+ private $ traits = [];
5
8
private $ linesOfCode = array ('loc ' => 0 , 'cloc ' => 0 , 'ncloc ' => 0 );
6
9
7
10
/**
@@ -42,13 +45,14 @@ public function __construct($filename) {
42
45
$ this ->filename = $ filename ;
43
46
}
44
47
45
- public function next () {
48
+ public function tokenize () {
46
49
$ sourceCode = file_get_contents ($ this ->filename );
47
50
$ tokens = token_get_all ($ sourceCode );
48
51
$ numTokens = count ($ tokens );
49
52
50
53
for ($ i = 0 ; $ i < $ numTokens ; ++$ i ) {
51
54
$ token = $ tokens [$ i ];
55
+
52
56
if (is_array ($ token )) {
53
57
$ name = substr (token_name ($ token [0 ]), 2 );
54
58
$ text = $ token [1 ];
@@ -69,42 +73,26 @@ public function next() {
69
73
case 'PHP_Token_HALT_COMPILER ' :
70
74
break ;
71
75
72
- case 'PHP_Token_INTERFACE ' :
73
- $ interface = $ token ->getName ();
74
- $ interfaceEndLine = $ token ->getEndLine ();
75
-
76
- $ this ->interfaces [$ interface ] = array (
76
+ case 'PHP_Token_CLASS ' :
77
+ case 'PHP_Token_TRAIT ' :
78
+ $ tmp = array (
77
79
'methods ' => array (),
78
80
'parent ' => $ token ->getParent (),
81
+ 'interfaces ' => $ token ->getInterfaces (),
79
82
'keywords ' => $ token ->getKeywords (),
80
83
'docblock ' => $ token ->getDocblock (),
81
84
'startLine ' => $ token ->getLine (),
82
- 'endLine ' => $ interfaceEndLine ,
85
+ 'endLine ' => $ token -> getEndLine () ,
83
86
'package ' => $ token ->getPackage (),
84
87
'file ' => $ this ->filename
85
88
);
86
- break ;
87
-
88
- case 'PHP_Token_CLASS ' :
89
- case 'PHP_Token_TRAIT ' :
90
- $ tmp = array (
91
- 'methods ' => array (),
92
- 'parent ' => $ token ->getParent (),
93
- 'interfaces ' => $ token ->getInterfaces (),
94
- 'keywords ' => $ token ->getKeywords (),
95
- 'docblock ' => $ token ->getDocblock (),
96
- 'startLine ' => $ token ->getLine (),
97
- 'endLine ' => $ token ->getEndLine (),
98
- 'package ' => $ token ->getPackage (),
99
- 'file ' => $ this ->filename
100
- );
101
89
102
90
if ($ token instanceof PHP_Token_CLASS) {
103
- $ class = $ token -> getName () ;
91
+ $ class = ( string ) $ tokens [ $ i + 2 ] ;
104
92
$ classEndLine = $ token ->getEndLine ();
105
93
$ this ->classes [$ class ] = $ tmp ;
106
94
} else {
107
- $ trait = $ token -> getName () ;
95
+ $ trait = ( string ) $ tokens [ $ i + 2 ] ;
108
96
$ traitEndLine = $ token ->getEndLine ();
109
97
$ this ->traits [$ trait ] = $ tmp ;
110
98
}
@@ -179,14 +167,6 @@ public function next() {
179
167
} elseif ($ name != 'WHITESPACE ' ) {
180
168
$ lastNonWhitespaceTokenWasDoubleColon = false ;
181
169
}
182
-
183
- if (false ) {
184
- yield "class " => [];
185
- } else if (false ) {
186
- yield "trait " => [];
187
- } else if (false ) {
188
- yield "function " => [];
189
- }
190
170
}
191
171
192
172
$ this ->linesOfCode ['loc ' ] = substr_count ($ sourceCode , "\n" );
@@ -197,4 +177,16 @@ public function next() {
197
177
public function getLinesOfCode () {
198
178
return $ this ->linesOfCode ;
199
179
}
180
+
181
+ public function getClasses () {
182
+ return $ this ->classes ;
183
+ }
184
+
185
+ public function getTraits () {
186
+ return $ this ->traits ;
187
+ }
188
+
189
+ public function getFunctions () {
190
+ return $ this ->functions ;
191
+ }
200
192
}
0 commit comments