Skip to content

Commit c9f90d8

Browse files
committed
WIP simplified Tokenizer to really required features
1 parent ec72178 commit c9f90d8

File tree

2 files changed

+29
-47
lines changed

2 files changed

+29
-47
lines changed

src/CodeCoverage/Report/Node/File.php

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -352,22 +352,12 @@ public function getNumTestedFunctions()
352352
protected function calculateStatistics()
353353
{
354354
$tokenizer = new Tokenizer($this->getPath());
355-
$classes = $traits = $functions = array();
356-
foreach($tokenizer as $tokenName => $token) {
357-
switch ($tokenName) {
358-
case "class":
359-
$classes[] = $token;
360-
break;
361-
case "trait":
362-
$traits[] = $token;
363-
break;
364-
case "function":
365-
$functions[] = $token;
366-
break;
367-
}
368-
}
355+
$tokenizer->tokenize();
356+
357+
$classes = $tokenizer->getClasses();
358+
$traits = $tokenizer->getTraits();
359+
$functions = $tokenizer->getFunctions();
369360
$this->linesOfCode = $tokenizer->getLinesOfCode();
370-
unset($tokenizer);
371361

372362
for ($lineNumber = 1; $lineNumber <= $this->linesOfCode['loc']; $lineNumber++) {
373363
if (isset($this->startLines[$lineNumber])) {

src/CodeCoverage/Util/Tokenizer.php

Lines changed: 24 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
class Tokenizer {
44
private $filename;
5+
private $functions = [];
6+
private $classes = [];
7+
private $traits = [];
58
private $linesOfCode = array('loc' => 0, 'cloc' => 0, 'ncloc' => 0);
69

710
/**
@@ -42,13 +45,14 @@ public function __construct($filename) {
4245
$this->filename = $filename;
4346
}
4447

45-
public function next() {
48+
public function tokenize() {
4649
$sourceCode = file_get_contents($this->filename);
4750
$tokens = token_get_all($sourceCode);
4851
$numTokens = count($tokens);
4952

5053
for ($i = 0; $i < $numTokens; ++$i) {
5154
$token = $tokens[$i];
55+
5256
if (is_array($token)) {
5357
$name = substr(token_name($token[0]), 2);
5458
$text = $token[1];
@@ -69,42 +73,26 @@ public function next() {
6973
case 'PHP_Token_HALT_COMPILER':
7074
break;
7175

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(
7779
'methods' => array(),
7880
'parent' => $token->getParent(),
81+
'interfaces'=> $token->getInterfaces(),
7982
'keywords' => $token->getKeywords(),
8083
'docblock' => $token->getDocblock(),
8184
'startLine' => $token->getLine(),
82-
'endLine' => $interfaceEndLine,
85+
'endLine' => $token->getEndLine(),
8386
'package' => $token->getPackage(),
8487
'file' => $this->filename
8588
);
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-
);
10189

10290
if ($token instanceof PHP_Token_CLASS) {
103-
$class = $token->getName();
91+
$class = (string)$tokens[$i + 2];
10492
$classEndLine = $token->getEndLine();
10593
$this->classes[$class] = $tmp;
10694
} else {
107-
$trait = $token->getName();
95+
$trait = (string)$tokens[$i + 2];
10896
$traitEndLine = $token->getEndLine();
10997
$this->traits[$trait] = $tmp;
11098
}
@@ -179,14 +167,6 @@ public function next() {
179167
} elseif ($name != 'WHITESPACE') {
180168
$lastNonWhitespaceTokenWasDoubleColon = false;
181169
}
182-
183-
if (false) {
184-
yield "class" => [];
185-
} else if (false) {
186-
yield "trait" => [];
187-
} else if (false) {
188-
yield "function" => [];
189-
}
190170
}
191171

192172
$this->linesOfCode['loc'] = substr_count($sourceCode, "\n");
@@ -197,4 +177,16 @@ public function next() {
197177
public function getLinesOfCode() {
198178
return $this->linesOfCode;
199179
}
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+
}
200192
}

0 commit comments

Comments
 (0)