Skip to content

Commit

Permalink
Merge pull request #770 from BlaineSch/bug/parserLineFix
Browse files Browse the repository at this point in the history
Update parser to recognize newlines when PHP does not provide a line
  • Loading branch information
nateabele committed Dec 28, 2012
2 parents 8a8fe88 + d7d8da3 commit 7f6da57
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 4 deletions.
4 changes: 4 additions & 0 deletions analysis/Parser.php
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -74,6 +74,10 @@ public static function tokenize($code, array $options = array()) {
} }
} }
$tokens[] = array('id' => $id, 'name' => $name, 'content' => $content, 'line' => $line); $tokens[] = array('id' => $id, 'name' => $name, 'content' => $content, 'line' => $line);

if ($id === T_WHITESPACE) {
$line += count(preg_split('/\r\n|\r|\n/', $content)) - 1;
}
} }


if ($options['wrap'] && empty($options['include'])) { if ($options['wrap'] && empty($options['include'])) {
Expand Down
25 changes: 21 additions & 4 deletions tests/cases/analysis/ParserTest.php
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -56,7 +56,12 @@ public function testFullTokenization() {
$result = Parser::tokenize('$foo = function() {};'); $result = Parser::tokenize('$foo = function() {};');
$this->assertEqual(11, count($result)); $this->assertEqual(11, count($result));


$expected = array('id' => 309, 'name' => 'T_VARIABLE', 'content' => '$foo', 'line' => 1); $expected = array(
'id' => T_VARIABLE,
'name' => 'T_VARIABLE',
'content' => '$foo',
'line' => 1
);
$this->assertEqual($expected, $result[0]); $this->assertEqual($expected, $result[0]);


$expected = array('id' => null, 'name' => ';', 'content' => ';', 'line' => 1); $expected = array('id' => null, 'name' => ';', 'content' => ';', 'line' => 1);
Expand Down Expand Up @@ -99,9 +104,9 @@ public function testFilteredTokenization() {


$result = Parser::tokenize($code, array('include' => array('T_IF', 'T_WHILE', 'T_CATCH'))); $result = Parser::tokenize($code, array('include' => array('T_IF', 'T_WHILE', 'T_CATCH')));
$expected = array( $expected = array(
array('id' => 318, 'name' => 'T_WHILE', 'content' => 'while', 'line' => 1), array('id' => T_WHILE, 'name' => 'T_WHILE', 'content' => 'while', 'line' => 1),
array('id' => 301, 'name' => 'T_IF', 'content' => 'if', 'line' => 1), array('id' => T_IF, 'name' => 'T_IF', 'content' => 'if', 'line' => 1),
array('id' => 338, 'name' => 'T_CATCH', 'content' => 'catch', 'line' => 3) array('id' => T_CATCH, 'name' => 'T_CATCH', 'content' => 'catch', 'line' => 3)
); );
$this->assertEqual($expected, $result); $this->assertEqual($expected, $result);
} }
Expand Down Expand Up @@ -136,6 +141,18 @@ function ($i) { return join('', $i); },
$expected = array('ClassName', 'method'); $expected = array('ClassName', 'method');
$this->assertEqual($expected, $results); $this->assertEqual($expected, $results);
} }

public function testParserGuessesLineBleed() {
$code = <<<EOD
if (false) {
return true;
}
EOD;
$tokens = Parser::tokenize($code);
$this->assertIdentical('}', $tokens[13]['content']);
$this->assertIdentical(3, $tokens[13]['line']);
}

} }


?> ?>

0 comments on commit 7f6da57

Please sign in to comment.