PEAR is archived and read-only

This mirror preserves historical PEAR package releases and metadata so existing references remain available.

Home » PHP » PHP_CodeSniffer » Bug #9274

nested_parenthesis element not set for open and close parenthesis tokens

Details

Submitted2006-11-08 14:55 UTC
Frombrobertson at adviva dot com
Assignedsquiz
StatusClosed
PackagePHP_CodeSniffer
PHP Version5.1.2
OSLinux
Roadmaps(Not assigned)

Comments

[2006-11-08 14:55 UTC] brobertson at adviva dot com

Description:
------------
All tokens get the 'nested_parenthesis' element in their token array when it is applicable - except for T_OPEN_PARENTHESIS and T_CLOSE_PARENTHESIS.

This can be fixed with a simple change to PHP_CodeSniffer_File::_createParenthesisNestingMap()

Test script:
---------------
Test file to Parse:
-----------------------------------------
<?php
echo ((10 + 15) * 22);
?>
-----------------------------------------
Patch:
--- pear.orig/php/PHP/CodeSniffer/File.php 2006-10-17 12:37:28.000000000 +0100
+++ pear/php/PHP/CodeSniffer/File.php 2006-11-08 15:51:16.074794538 +0000
@@ -752,9 +752,17 @@
$map = array();
for ($i = 0; $i < $numTokens; $i++) {
if (isset($this->_tokens[$i]['parenthesis_opener']) === true && $i === $this->_tokens[$i]['parenthesis_opener']) {
+ if (empty($map) === false) {
+ $this->_tokens[$i]['nested_parenthesis'] = $map;
+ }
$map[$this->_tokens[$i]['parenthesis_opener']] = $this->_tokens[$i]['parenthesis_closer'];
+
} else if (isset($this->_tokens[$i]['parenthesis_closer']) === true && $i === $this->_tokens[$i]['parenthesis_closer']) {
array_pop($map);
+ if (empty($map) === false) {
+ $this->_tokens[$i]['nested_parenthesis'] = $map;
+ }
+
} else {
if (empty($map) === false) {
$this->_tokens[$i]['nested_parenthesis'] = $map;

Expected result:
----------------
Array
(
... SNIP ...
[4] => Array
(
[type] => T_OPEN_PARENTHESIS
[code] => 1004
[content] => (
[line] => 2
[parenthesis_opener] => 4
[parenthesis_closer] => 16
[column] => 10
[level] => 0
[conditions] => Array
(
)

)

[5] => Array
(
[type] => T_OPEN_PARENTHESIS
[code] => 1004
[content] => (
[line] => 2
[parenthesis_opener] => 5
[parenthesis_closer] => 11
[nested_parenthesis] => Array
(
[4] => 16
)

[column] => 11
[level] => 0
[conditions] => Array
(
)

)
... SNIP ...
)

Actual result:
--------------
Array
(
... SNIP ...
[4] => Array
(
[type] => T_OPEN_PARENTHESIS
[code] => 1004
[content] => (
[line] => 2
[parenthesis_opener] => 4
[parenthesis_closer] => 16
[column] => 10
[level] => 0
[conditions] => Array
(
)

)

[5] => Array
(
[type] => T_OPEN_PARENTHESIS
[code] => 1004
[content] => (
[line] => 2
[parenthesis_opener] => 5
[parenthesis_closer] => 11
[column] => 11
[level] => 0
[conditions] => Array
(
)

)
... SNIP ...
)

[2006-11-09 04:18 UTC] squiz at php dot net

This bug has been fixed in CVS.

If this was a documentation problem, the fix will appear on pear.php.net by the end of next Sunday (CET).

If this was a problem with the pear.php.net website, the change should be live shortly.

Otherwise, the fix will appear in the package's next release.

Thank you for the report and for helping us make PEAR better.

Thanks for the patch. Worked perfectly.