From 7681d81e28ec2372019374d3d327ce096df0b98e Mon Sep 17 00:00:00 2001 From: Sebastian Bergmann Date: Mon, 27 Feb 2017 11:11:37 +0100 Subject: [PATCH 1/2] Add test for #64 --- tests/Token/ClassTest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Token/ClassTest.php b/tests/Token/ClassTest.php index cf83ed9..d1b25d8 100644 --- a/tests/Token/ClassTest.php +++ b/tests/Token/ClassTest.php @@ -118,5 +118,6 @@ public function testImportedFunctionsAreHandledCorrectly() $ts = new PHP_Token_Stream(TEST_FILES_PATH . 'classUsesNamespacedFunction.php'); $this->assertEmpty($ts->getFunctions()); + $this->assertCount(1, $ts->getClasses()); } } From e03f8f67534427a787e21a385a67ec3ca6978ea7 Mon Sep 17 00:00:00 2001 From: Sebastian Bergmann Date: Mon, 27 Feb 2017 11:12:30 +0100 Subject: [PATCH 2/2] Closes #64 --- src/Token/Stream.php | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/Token/Stream.php b/src/Token/Stream.php index 5fbe621..aff7e3d 100644 --- a/src/Token/Stream.php +++ b/src/Token/Stream.php @@ -157,6 +157,7 @@ public function getFilename() */ protected function scan($sourceCode) { + $id = 0; $line = 1; $tokens = token_get_all($sourceCode); $numTokens = count($tokens); @@ -165,7 +166,7 @@ protected function scan($sourceCode) for ($i = 0; $i < $numTokens; ++$i) { $token = $tokens[$i]; - unset($tokens[$i]); + $skip = 0; if (is_array($token)) { $name = substr(token_name($token[0]), 2); @@ -174,12 +175,8 @@ protected function scan($sourceCode) if ($lastNonWhitespaceTokenWasDoubleColon && $name == 'CLASS') { $name = 'CLASS_NAME_CONSTANT'; } elseif ($name == 'USE' && isset($tokens[$i+2][0]) && $tokens[$i+2][0] == T_FUNCTION) { - unset($tokens[$i+1]); - unset($tokens[$i+2]); - - $i += 2; - $name = 'USE_FUNCTION'; + $skip = 2; } $tokenClass = 'PHP_Token_' . $name; @@ -188,7 +185,7 @@ protected function scan($sourceCode) $tokenClass = self::$customTokens[$token]; } - $this->tokens[] = new $tokenClass($text, $line, $this, $i); + $this->tokens[] = new $tokenClass($text, $line, $this, $id++); $lines = substr_count($text, "\n"); $line += $lines; @@ -204,6 +201,8 @@ protected function scan($sourceCode) } elseif ($name != 'WHITESPACE') { $lastNonWhitespaceTokenWasDoubleColon = false; } + + $i += $skip; } $this->linesOfCode['loc'] = substr_count($sourceCode, "\n");