diff --git a/PHPCSUtils/Utils/Lists.php b/PHPCSUtils/Utils/Lists.php index 0623722f..4ffc0eee 100644 --- a/PHPCSUtils/Utils/Lists.php +++ b/PHPCSUtils/Utils/Lists.php @@ -25,6 +25,27 @@ class Lists { + /** + * Default values for individual list items. + * + * Used by the `getAssignments()` method. + * + * @since 1.0.0 + * + * @var array + */ + private static $listItemDefaults = [ + 'raw' => '', + 'assignment' => '', + 'is_empty' => false, + 'is_nested_list' => false, + 'variable' => false, + 'assignment_token' => false, + 'assignment_end_token' => false, + 'assign_by_reference' => false, + 'reference_token' => false, + ]; + /** * Determine whether a `T_OPEN/CLOSE_SHORT_ARRAY` token is a short list() construct. * @@ -229,27 +250,23 @@ public static function getOpenClose(File $phpcsFile, $stackPtr, $isShortList = n * * * 0 => array( - * 'raw' => string, // The full content of the variable definition, including - * // whitespace and comments. - * // This may be an empty string when an item is being skipped. - * 'is_empty' => bool, // Whether this is an empty list item, i.e. the - * // second item in `list($a, , $b)`. - * ) - * - * - * Non-empty list items will have the following additional array indexes set: - * - * 'assignment' => string, // The content of the assignment part, cleaned of comments. - * // This could be a nested list. - * 'nested_list' => bool, // Whether this is a nested list. + * 'raw' => string, // The full content of the variable definition, including + * // whitespace and comments. + * // This may be an empty string when an item is being skipped. + * 'assignment' => string, // The content of the assignment part, _cleaned of comments_. + * // This may be an empty string for an empty list item; + * // it could also be a nested list represented as a string. + * 'is_empty' => bool, // Whether this is an empty list item, i.e. the + * // second item in `list($a, , $b)`. + * 'is_nested_list' => bool, // Whether this is a nested list. + * 'variable' => string|false, // The base variable being assigned to or + * // FALSE in case of a nested list or avariable variable. + * // I.e. `$a` in `list($a['key'])`. + * 'assignment_token' => int|false, // The start pointer for the assignment. + * 'assignment_end_token' => int|false, // The end pointer for the assignment. * 'assign_by_reference' => bool, // Is the variable assigned by reference? * 'reference_token' => int|false, // The stack pointer to the reference operator or * // FALSE when not a reference assignment. - * 'variable' => string|false, // The base variable being assigned to or - * // FALSE in case of a nested list or variable variable. - * // I.e. `$a` in `list($a['key'])`. - * 'assignment_token' => int, // The start pointer for the assignment. - * 'assignment_end_token' => int, // The end pointer for the assignment. * * * @@ -293,7 +310,7 @@ public static function getAssignments(File $phpcsFile, $stackPtr) $reference = null; $list = null; $lastComma = $opener; - $current = []; + $keys = []; for ($i = ($opener + 1); $i <= $closer; $i++) { if (isset(Tokens::$emptyTokens[$tokens[$i]['code']])) { @@ -302,11 +319,10 @@ public static function getAssignments(File $phpcsFile, $stackPtr) switch ($tokens[$i]['code']) { case \T_DOUBLE_ARROW: - $current['key'] = GetTokensAsString::compact($phpcsFile, $start, $lastNonEmpty, true); - - $current['key_token'] = $start; - $current['key_end_token'] = $lastNonEmpty; - $current['double_arrow_token'] = $i; + $keys['key'] = GetTokensAsString::compact($phpcsFile, $start, $lastNonEmpty, true); + $keys['key_token'] = $start; + $keys['key_end_token'] = $lastNonEmpty; + $keys['double_arrow_token'] = $i; // Partial reset. $start = null; @@ -316,6 +332,7 @@ public static function getAssignments(File $phpcsFile, $stackPtr) case \T_COMMA: case $tokens[$closer]['code']: + // Check if this is the end of the list or only a token with the same type as the list closer. if ($tokens[$i]['code'] === $tokens[$closer]['code']) { if ($i !== $closer) { $lastNonEmpty = $i; @@ -326,23 +343,17 @@ public static function getAssignments(File $phpcsFile, $stackPtr) } } + // Ok, so this is actually the end of the list item. + $current = self::$listItemDefaults; $current['raw'] = \trim(GetTokensAsString::normal($phpcsFile, ($lastComma + 1), ($i - 1))); if ($start === null) { $current['is_empty'] = true; } else { - $current['is_empty'] = false; - $current['assignment'] = \trim( + $current['assignment'] = \trim( GetTokensAsString::compact($phpcsFile, $start, $lastNonEmpty, true) ); - $current['nested_list'] = isset($list); - - $current['assign_by_reference'] = false; - $current['reference_token'] = false; - if (isset($reference)) { - $current['assign_by_reference'] = true; - $current['reference_token'] = $reference; - } + $current['is_nested_list'] = isset($list); $current['variable'] = false; if (isset($list) === false && $tokens[$start]['code'] === \T_VARIABLE) { @@ -350,6 +361,15 @@ public static function getAssignments(File $phpcsFile, $stackPtr) } $current['assignment_token'] = $start; $current['assignment_end_token'] = $lastNonEmpty; + + if (isset($reference)) { + $current['assign_by_reference'] = true; + $current['reference_token'] = $reference; + } + } + + if (empty($keys) === false) { + $current += $keys; } $vars[] = $current; @@ -360,7 +380,7 @@ public static function getAssignments(File $phpcsFile, $stackPtr) $reference = null; $list = null; $lastComma = $i; - $current = []; + $keys = []; break; diff --git a/Tests/Utils/Lists/GetAssignmentsTest.php b/Tests/Utils/Lists/GetAssignmentsTest.php index bc7f3213..7876d464 100644 --- a/Tests/Utils/Lists/GetAssignmentsTest.php +++ b/Tests/Utils/Lists/GetAssignmentsTest.php @@ -105,10 +105,10 @@ public function testGetAssignments($testMarker, $targetToken, $expected) if (isset($subset['reference_token']) && $subset['reference_token'] !== false) { $expected[$index]['reference_token'] += $stackPtr; } - if (isset($subset['assignment_token'])) { + if (isset($subset['assignment_token']) && $subset['assignment_token'] !== false) { $expected[$index]['assignment_token'] += $stackPtr; } - if (isset($subset['assignment_end_token'])) { + if (isset($subset['assignment_end_token']) && $subset['assignment_end_token'] !== false) { $expected[$index]['assignment_end_token'] += $stackPtr; } } @@ -145,19 +145,47 @@ public function dataGetAssignments() [ 0 => [ 'raw' => '', + 'assignment' => '', 'is_empty' => true, + 'is_nested_list' => false, + 'variable' => false, + 'assignment_token' => false, + 'assignment_end_token' => false, + 'assign_by_reference' => false, + 'reference_token' => false, ], 1 => [ 'raw' => '/* comment */', + 'assignment' => '', 'is_empty' => true, + 'is_nested_list' => false, + 'variable' => false, + 'assignment_token' => false, + 'assignment_end_token' => false, + 'assign_by_reference' => false, + 'reference_token' => false, ], 2 => [ 'raw' => '', + 'assignment' => '', 'is_empty' => true, + 'is_nested_list' => false, + 'variable' => false, + 'assignment_token' => false, + 'assignment_end_token' => false, + 'assign_by_reference' => false, + 'reference_token' => false, ], 3 => [ 'raw' => '', + 'assignment' => '', 'is_empty' => true, + 'is_nested_list' => false, + 'variable' => false, + 'assignment_token' => false, + 'assignment_end_token' => false, + 'assign_by_reference' => false, + 'reference_token' => false, ], ], ], @@ -172,25 +200,25 @@ public function dataGetAssignments() [ 0 => [ 'raw' => '$id', - 'is_empty' => false, 'assignment' => '$id', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$id', 'assignment_token' => 2, 'assignment_end_token' => 2, + 'assign_by_reference' => false, + 'reference_token' => false, ], 1 => [ 'raw' => '$name', - 'is_empty' => false, 'assignment' => '$name', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$name', 'assignment_token' => 5, 'assignment_end_token' => 5, + 'assign_by_reference' => false, + 'reference_token' => false, ], ], ], @@ -200,25 +228,25 @@ public function dataGetAssignments() [ 0 => [ 'raw' => '$this->propA', - 'is_empty' => false, 'assignment' => '$this->propA', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$this', 'assignment_token' => 1, 'assignment_end_token' => 3, + 'assign_by_reference' => false, + 'reference_token' => false, ], 1 => [ 'raw' => '$this->propB', - 'is_empty' => false, 'assignment' => '$this->propB', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$this', 'assignment_token' => 6, 'assignment_end_token' => 8, + 'assign_by_reference' => false, + 'reference_token' => false, ], ], ], @@ -227,34 +255,34 @@ public function dataGetAssignments() \T_OPEN_SHORT_ARRAY, [ 0 => [ - 'key' => "'id'", - 'key_token' => 1, - 'key_end_token' => 1, - 'double_arrow_token' => 3, 'raw' => '\'id\' => & $id', - 'is_empty' => false, 'assignment' => '$id', - 'nested_list' => false, - 'assign_by_reference' => true, - 'reference_token' => 5, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$id', 'assignment_token' => 7, 'assignment_end_token' => 7, + 'assign_by_reference' => true, + 'reference_token' => 5, + 'key' => "'id'", + 'key_token' => 1, + 'key_end_token' => 1, + 'double_arrow_token' => 3, ], 1 => [ - 'key' => "'name'", - 'key_token' => 10, - 'key_end_token' => 10, - 'double_arrow_token' => 12, 'raw' => '\'name\' => $name', - 'is_empty' => false, 'assignment' => '$name', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$name', 'assignment_token' => 14, 'assignment_end_token' => 14, + 'assign_by_reference' => false, + 'reference_token' => false, + 'key' => "'name'", + 'key_token' => 10, + 'key_end_token' => 10, + 'double_arrow_token' => 12, ], ], ], @@ -264,25 +292,25 @@ public function dataGetAssignments() [ 0 => [ 'raw' => '$a', - 'is_empty' => false, 'assignment' => '$a', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$a', 'assignment_token' => 2, 'assignment_end_token' => 2, + 'assign_by_reference' => false, + 'reference_token' => false, ], 1 => [ 'raw' => 'list($b, $c)', - 'is_empty' => false, 'assignment' => 'list($b, $c)', - 'nested_list' => true, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => true, 'variable' => false, 'assignment_token' => 5, 'assignment_end_token' => 11, + 'assign_by_reference' => false, + 'reference_token' => false, ], ], ], @@ -291,49 +319,49 @@ public function dataGetAssignments() \T_LIST, [ 0 => [ - 'key' => "'name'", - 'key_token' => 2, - 'key_end_token' => 2, - 'double_arrow_token' => 4, 'raw' => '\'name\' => $a', - 'is_empty' => false, 'assignment' => '$a', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$a', 'assignment_token' => 6, 'assignment_end_token' => 6, + 'assign_by_reference' => false, + 'reference_token' => false, + 'key' => "'name'", + 'key_token' => 2, + 'key_end_token' => 2, + 'double_arrow_token' => 4, ], 1 => [ - 'key' => "'id'", - 'key_token' => 9, - 'key_end_token' => 9, - 'double_arrow_token' => 11, 'raw' => '\'id\' => $b', - 'is_empty' => false, 'assignment' => '$b', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$b', 'assignment_token' => 13, 'assignment_end_token' => 13, + 'assign_by_reference' => false, + 'reference_token' => false, + 'key' => "'id'", + 'key_token' => 9, + 'key_end_token' => 9, + 'double_arrow_token' => 11, ], 2 => [ - 'key' => "'field'", - 'key_token' => 16, - 'key_end_token' => 16, - 'double_arrow_token' => 18, 'raw' => '\'field\' => $c', - 'is_empty' => false, 'assignment' => '$c', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$c', 'assignment_token' => 20, 'assignment_end_token' => 20, + 'assign_by_reference' => false, + 'reference_token' => false, + 'key' => "'field'", + 'key_token' => 16, + 'key_end_token' => 16, + 'double_arrow_token' => 18, ], ], ], @@ -343,56 +371,91 @@ public function dataGetAssignments() [ 0 => [ 'raw' => '', + 'assignment' => '', 'is_empty' => true, + 'is_nested_list' => false, + 'variable' => false, + 'assignment_token' => false, + 'assignment_end_token' => false, + 'assign_by_reference' => false, + 'reference_token' => false, ], 1 => [ 'raw' => '$a', - 'is_empty' => false, 'assignment' => '$a', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$a', 'assignment_token' => 5, 'assignment_end_token' => 5, + 'assign_by_reference' => false, + 'reference_token' => false, ], 2 => [ 'raw' => '', + 'assignment' => '', 'is_empty' => true, + 'is_nested_list' => false, + 'variable' => false, + 'assignment_token' => false, + 'assignment_end_token' => false, + 'assign_by_reference' => false, + 'reference_token' => false, ], 3 => [ 'raw' => '$b', - 'is_empty' => false, 'assignment' => '$b', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$b', 'assignment_token' => 10, 'assignment_end_token' => 10, + 'assign_by_reference' => false, + 'reference_token' => false, ], 4 => [ 'raw' => '', + 'assignment' => '', 'is_empty' => true, + 'is_nested_list' => false, + 'variable' => false, + 'assignment_token' => false, + 'assignment_end_token' => false, + 'assign_by_reference' => false, + 'reference_token' => false, ], 5 => [ 'raw' => '$c', - 'is_empty' => false, 'assignment' => '$c', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$c', 'assignment_token' => 14, 'assignment_end_token' => 14, + 'assign_by_reference' => false, + 'reference_token' => false, ], 6 => [ 'raw' => '', + 'assignment' => '', 'is_empty' => true, + 'is_nested_list' => false, + 'variable' => false, + 'assignment_token' => false, + 'assignment_end_token' => false, + 'assign_by_reference' => false, + 'reference_token' => false, ], 7 => [ 'raw' => '', + 'assignment' => '', 'is_empty' => true, + 'is_nested_list' => false, + 'variable' => false, + 'assignment_token' => false, + 'assignment_end_token' => false, + 'assign_by_reference' => false, + 'reference_token' => false, ], ], ], @@ -401,68 +464,75 @@ public function dataGetAssignments() \T_LIST, [ 0 => [ - 'key' => '"name"', - 'key_token' => 4, - 'key_end_token' => 4, - 'double_arrow_token' => 6, 'raw' => '"name" => $this->name', - 'is_empty' => false, 'assignment' => '$this->name', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$this', 'assignment_token' => 8, 'assignment_end_token' => 10, + 'assign_by_reference' => false, + 'reference_token' => false, + 'key' => '"name"', + 'key_token' => 4, + 'key_end_token' => 4, + 'double_arrow_token' => 6, ], 1 => [ - 'key' => '"colour"', - 'key_token' => 14, - 'key_end_token' => 14, - 'double_arrow_token' => 16, 'raw' => '"colour" => $this->colour', - 'is_empty' => false, 'assignment' => '$this->colour', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$this', 'assignment_token' => 18, 'assignment_end_token' => 20, + 'assign_by_reference' => false, + 'reference_token' => false, + 'key' => '"colour"', + 'key_token' => 14, + 'key_end_token' => 14, + 'double_arrow_token' => 16, ], 2 => [ - 'key' => '"age"', - 'key_token' => 24, - 'key_end_token' => 24, - 'double_arrow_token' => 26, 'raw' => '"age" => $this->age', - 'is_empty' => false, 'assignment' => '$this->age', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$this', 'assignment_token' => 28, 'assignment_end_token' => 30, + 'assign_by_reference' => false, + 'reference_token' => false, + 'key' => '"age"', + 'key_token' => 24, + 'key_end_token' => 24, + 'double_arrow_token' => 26, ], 3 => [ - 'key' => '"cuteness"', - 'key_token' => 34, - 'key_end_token' => 34, - 'double_arrow_token' => 36, 'raw' => '"cuteness" => $this->cuteness', - 'is_empty' => false, 'assignment' => '$this->cuteness', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$this', 'assignment_token' => 38, 'assignment_end_token' => 40, + 'assign_by_reference' => false, + 'reference_token' => false, + 'key' => '"cuteness"', + 'key_token' => 34, + 'key_end_token' => 34, + 'double_arrow_token' => 36, ], 4 => [ 'raw' => '', + 'assignment' => '', 'is_empty' => true, + 'is_nested_list' => false, + 'variable' => false, + 'assignment_token' => false, + 'assignment_end_token' => false, + 'assign_by_reference' => false, + 'reference_token' => false, ], ], ], @@ -471,34 +541,34 @@ public function dataGetAssignments() [\T_OPEN_SHORT_ARRAY, \T_OPEN_SQUARE_BRACKET], [ 0 => [ - 'key' => "'a'", - 'key_token' => 1, - 'key_end_token' => 1, - 'double_arrow_token' => 3, 'raw' => '\'a\' => [&$a, $b]', - 'is_empty' => false, 'assignment' => '[&$a, $b]', - 'nested_list' => true, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => true, 'variable' => false, 'assignment_token' => 5, 'assignment_end_token' => 11, + 'assign_by_reference' => false, + 'reference_token' => false, + 'key' => "'a'", + 'key_token' => 1, + 'key_end_token' => 1, + 'double_arrow_token' => 3, ], 1 => [ - 'key' => "'b'", - 'key_token' => 14, - 'key_end_token' => 14, - 'double_arrow_token' => 16, 'raw' => '\'b\' => [$c, &$d]', - 'is_empty' => false, 'assignment' => '[$c, &$d]', - 'nested_list' => true, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => true, 'variable' => false, 'assignment_token' => 18, 'assignment_end_token' => 24, + 'assign_by_reference' => false, + 'reference_token' => false, + 'key' => "'b'", + 'key_token' => 14, + 'key_end_token' => 14, + 'double_arrow_token' => 16, ], ], ], @@ -508,36 +578,36 @@ public function dataGetAssignments() [ 0 => [ 'raw' => '$a[]', - 'is_empty' => false, 'assignment' => '$a[]', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$a', 'assignment_token' => 2, 'assignment_end_token' => 4, + 'assign_by_reference' => false, + 'reference_token' => false, ], 1 => [ 'raw' => '$a[0]', - 'is_empty' => false, 'assignment' => '$a[0]', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$a', 'assignment_token' => 7, 'assignment_end_token' => 10, + 'assign_by_reference' => false, + 'reference_token' => false, ], 2 => [ 'raw' => '$a[]', - 'is_empty' => false, 'assignment' => '$a[]', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$a', 'assignment_token' => 13, 'assignment_end_token' => 15, + 'assign_by_reference' => false, + 'reference_token' => false, ], ], ], @@ -546,129 +616,136 @@ public function dataGetAssignments() \T_OPEN_SHORT_ARRAY, [ 0 => [ - 'key' => "'a' . 'b'", - 'key_token' => 3, - 'key_end_token' => 7, - 'double_arrow_token' => 9, 'raw' => '\'a\' . \'b\' => $a', - 'is_empty' => false, 'assignment' => '$a', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$a', 'assignment_token' => 11, 'assignment_end_token' => 11, + 'assign_by_reference' => false, + 'reference_token' => false, + 'key' => "'a' . 'b'", + 'key_token' => 3, + 'key_end_token' => 7, + 'double_arrow_token' => 9, ], 1 => [ - 'key' => '($a * 2)', - 'key_token' => 15, - 'key_end_token' => 21, - 'double_arrow_token' => 24, 'raw' => '($a * 2) => $b->prop->prop /* comment */ [\'index\']', - 'is_empty' => false, 'assignment' => '$b->prop->prop [\'index\']', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$b', 'assignment_token' => 26, 'assignment_end_token' => 36, + 'assign_by_reference' => false, + 'reference_token' => false, + 'key' => '($a * 2)', + 'key_token' => 15, + 'key_end_token' => 21, + 'double_arrow_token' => 24, ], 2 => [ - 'key' => 'CONSTANT & OTHER', - 'key_token' => 40, - 'key_end_token' => 46, - 'double_arrow_token' => 48, 'raw' => 'CONSTANT & /*comment*/ OTHER => $c', - 'is_empty' => false, 'assignment' => '$c', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$c', 'assignment_token' => 50, 'assignment_end_token' => 50, + 'assign_by_reference' => false, + 'reference_token' => false, + 'key' => 'CONSTANT & OTHER', + 'key_token' => 40, + 'key_end_token' => 46, + 'double_arrow_token' => 48, ], 3 => [ - 'key' => '(string) &$c', - 'key_token' => 54, - 'key_end_token' => 57, - 'double_arrow_token' => 59, 'raw' => '(string) &$c => &$d["D"]', - 'is_empty' => false, 'assignment' => '$d["D"]', - 'nested_list' => false, - 'assign_by_reference' => true, - 'reference_token' => 61, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$d', 'assignment_token' => 62, 'assignment_end_token' => 65, + 'assign_by_reference' => true, + 'reference_token' => 61, + 'key' => '(string) &$c', + 'key_token' => 54, + 'key_end_token' => 57, + 'double_arrow_token' => 59, ], 4 => [ - 'key' => 'get_key()[1]', - 'key_token' => 69, - 'key_end_token' => 74, - 'double_arrow_token' => 76, 'raw' => 'get_key()[1] => $e', - 'is_empty' => false, 'assignment' => '$e', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$e', 'assignment_token' => 78, 'assignment_end_token' => 78, + 'assign_by_reference' => false, + 'reference_token' => false, + 'key' => 'get_key()[1]', + 'key_token' => 69, + 'key_end_token' => 74, + 'double_arrow_token' => 76, ], 5 => [ - 'key' => '$prop[\'index\']', - 'key_token' => 82, - 'key_end_token' => 85, - 'double_arrow_token' => 87, 'raw' => '$prop[\'index\'] => $f->prop[\'index\']', - 'is_empty' => false, 'assignment' => '$f->prop[\'index\']', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$f', 'assignment_token' => 89, 'assignment_end_token' => 94, + 'assign_by_reference' => false, + 'reference_token' => false, + 'key' => '$prop[\'index\']', + 'key_token' => 82, + 'key_end_token' => 85, + 'double_arrow_token' => 87, ], 6 => [ - 'key' => '$obj->fieldname', - 'key_token' => 98, - 'key_end_token' => 100, - 'double_arrow_token' => 102, 'raw' => '$obj->fieldname => ${$g}', - 'is_empty' => false, 'assignment' => '${$g}', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => false, 'assignment_token' => 104, 'assignment_end_token' => 107, + 'assign_by_reference' => false, + 'reference_token' => false, + 'key' => '$obj->fieldname', + 'key_token' => 98, + 'key_end_token' => 100, + 'double_arrow_token' => 102, ], 7 => [ - 'key' => '$simple', - 'key_token' => 111, - 'key_end_token' => 111, - 'double_arrow_token' => 113, 'raw' => '$simple => &$h', - 'is_empty' => false, 'assignment' => '$h', - 'nested_list' => false, - 'assign_by_reference' => true, - 'reference_token' => 115, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$h', 'assignment_token' => 116, 'assignment_end_token' => 116, + 'assign_by_reference' => true, + 'reference_token' => 115, + 'key' => '$simple', + 'key_token' => 111, + 'key_end_token' => 111, + 'double_arrow_token' => 113, ], 8 => [ 'raw' => '', + 'assignment' => '', 'is_empty' => true, + 'is_nested_list' => false, + 'variable' => false, + 'assignment_token' => false, + 'assignment_end_token' => false, + 'assign_by_reference' => false, + 'reference_token' => false, ], ], ], @@ -677,19 +754,19 @@ public function dataGetAssignments() \T_LIST, [ 0 => [ - 'key' => 'get_key()[1]', - 'key_token' => 2, - 'key_end_token' => 7, - 'double_arrow_token' => 9, 'raw' => 'get_key()[1] => &$e', - 'is_empty' => false, 'assignment' => '$e', - 'nested_list' => false, - 'assign_by_reference' => true, - 'reference_token' => 11, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$e', 'assignment_token' => 12, 'assignment_end_token' => 12, + 'assign_by_reference' => true, + 'reference_token' => 11, + 'key' => 'get_key()[1]', + 'key_token' => 2, + 'key_end_token' => 7, + 'double_arrow_token' => 9, ], ], ], @@ -699,25 +776,25 @@ public function dataGetAssignments() [ 0 => [ 'raw' => '${$drink}', - 'is_empty' => false, 'assignment' => '${$drink}', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => false, 'assignment_token' => 3, 'assignment_end_token' => 6, + 'assign_by_reference' => false, + 'reference_token' => false, ], 1 => [ 'raw' => '$foo->{$bar[\'baz\']}', - 'is_empty' => false, 'assignment' => '$foo->{$bar[\'baz\']}', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$foo', 'assignment_token' => 9, 'assignment_end_token' => 16, + 'assign_by_reference' => false, + 'reference_token' => false, ], ], ], @@ -726,36 +803,36 @@ public function dataGetAssignments() \T_LIST, [ 0 => [ - 'key' => "'a'", - 'key_token' => 4, - 'key_end_token' => 4, - 'double_arrow_token' => 6, 'raw' => '\'a\' => list("x" => $x1, "y" => $y1)', - 'is_empty' => false, 'assignment' => 'list("x" => $x1, "y" => $y1)', - 'nested_list' => true, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => true, 'variable' => false, 'assignment_token' => 9, 'assignment_end_token' => 23, + 'assign_by_reference' => false, + 'reference_token' => false, + 'key' => "'a'", + 'key_token' => 4, + 'key_end_token' => 4, + 'double_arrow_token' => 6, ], 1 => [ - 'key' => "'b'", - 'key_token' => 27, - 'key_end_token' => 27, - 'double_arrow_token' => 29, 'raw' => '\'b\' => list("x" => $x2, "y" => $y2)', - 'is_empty' => false, 'assignment' => 'list("x" => $x2, "y" => $y2)', - 'nested_list' => true, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => true, 'variable' => false, 'assignment_token' => 32, 'assignment_end_token' => 46, + 'assign_by_reference' => false, + 'reference_token' => false, + 'key' => "'b'", + 'key_token' => 27, + 'key_end_token' => 27, + 'double_arrow_token' => 29, ], ], ], @@ -765,29 +842,29 @@ public function dataGetAssignments() [ 0 => [ 'raw' => '$unkeyed', - 'is_empty' => false, 'assignment' => '$unkeyed', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$unkeyed', 'assignment_token' => 2, 'assignment_end_token' => 2, + 'assign_by_reference' => false, + 'reference_token' => false, ], 1 => [ - 'key' => '"key"', - 'key_token' => 5, - 'key_end_token' => 5, - 'double_arrow_token' => 7, 'raw' => '"key" => $keyed', - 'is_empty' => false, 'assignment' => '$keyed', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$keyed', 'assignment_token' => 9, 'assignment_end_token' => 9, + 'assign_by_reference' => false, + 'reference_token' => false, + 'key' => '"key"', + 'key_token' => 5, + 'key_end_token' => 5, + 'double_arrow_token' => 7, ], ], ], @@ -797,34 +874,62 @@ public function dataGetAssignments() [ 0 => [ 'raw' => '', + 'assignment' => '', 'is_empty' => true, + 'is_nested_list' => false, + 'variable' => false, + 'assignment_token' => false, + 'assignment_end_token' => false, + 'assign_by_reference' => false, + 'reference_token' => false, ], 1 => [ 'raw' => '', + 'assignment' => '', 'is_empty' => true, + 'is_nested_list' => false, + 'variable' => false, + 'assignment_token' => false, + 'assignment_end_token' => false, + 'assign_by_reference' => false, + 'reference_token' => false, ], 2 => [ 'raw' => '', + 'assignment' => '', 'is_empty' => true, + 'is_nested_list' => false, + 'variable' => false, + 'assignment_token' => false, + 'assignment_end_token' => false, + 'assign_by_reference' => false, + 'reference_token' => false, ], 3 => [ 'raw' => '', + 'assignment' => '', 'is_empty' => true, + 'is_nested_list' => false, + 'variable' => false, + 'assignment_token' => false, + 'assignment_end_token' => false, + 'assign_by_reference' => false, + 'reference_token' => false, ], 4 => [ - 'key' => '"key"', - 'key_token' => 6, - 'key_end_token' => 6, - 'double_arrow_token' => 8, 'raw' => '"key" => $keyed', - 'is_empty' => false, 'assignment' => '$keyed', - 'nested_list' => false, - 'assign_by_reference' => false, - 'reference_token' => false, + 'is_empty' => false, + 'is_nested_list' => false, 'variable' => '$keyed', 'assignment_token' => 10, 'assignment_end_token' => 10, + 'assign_by_reference' => false, + 'reference_token' => false, + 'key' => '"key"', + 'key_token' => 6, + 'key_end_token' => 6, + 'double_arrow_token' => 8, ], ], ],