2323use PhpParser \Node \UnionType ;
2424use Rector \NodeNameResolver \NodeNameResolver ;
2525use Rector \NodeTypeResolver \Node \AttributeKey ;
26+ use Rector \Php \ReservedKeywordAnalyzer ;
2627use Rector \PhpDocParser \NodeTraverser \SimpleCallableNodeTraverser ;
2728use Rector \PhpParser \Node \BetterNodeFinder ;
2829use Rector \PhpParser \Parser \InlineCodeParser ;
@@ -49,18 +50,23 @@ final class AnonymousFunctionFactory
4950 * @readonly
5051 */
5152 private InlineCodeParser $ inlineCodeParser ;
53+ /**
54+ * @readonly
55+ */
56+ private ReservedKeywordAnalyzer $ reservedKeywordAnalyzer ;
5257 /**
5358 * @var string
5459 * @see https://regex101.com/r/jkLLlM/2
5560 */
5661 private const DIM_FETCH_REGEX = '#( \\$| \\\\| \\x0)(?<number> \\d+)# ' ;
57- public function __construct (NodeNameResolver $ nodeNameResolver , BetterNodeFinder $ betterNodeFinder , SimpleCallableNodeTraverser $ simpleCallableNodeTraverser , SimplePhpParser $ simplePhpParser , InlineCodeParser $ inlineCodeParser )
62+ public function __construct (NodeNameResolver $ nodeNameResolver , BetterNodeFinder $ betterNodeFinder , SimpleCallableNodeTraverser $ simpleCallableNodeTraverser , SimplePhpParser $ simplePhpParser , InlineCodeParser $ inlineCodeParser, ReservedKeywordAnalyzer $ reservedKeywordAnalyzer )
5863 {
5964 $ this ->nodeNameResolver = $ nodeNameResolver ;
6065 $ this ->betterNodeFinder = $ betterNodeFinder ;
6166 $ this ->simpleCallableNodeTraverser = $ simpleCallableNodeTraverser ;
6267 $ this ->simplePhpParser = $ simplePhpParser ;
6368 $ this ->inlineCodeParser = $ inlineCodeParser ;
69+ $ this ->reservedKeywordAnalyzer = $ reservedKeywordAnalyzer ;
6470 }
6571 /**
6672 * @api
@@ -150,6 +156,10 @@ private function createUseVariablesFromParams(array $nodes, array $params) : arr
150156 if (\in_array ($ variableName , $ paramNames , \true)) {
151157 continue ;
152158 }
159+ // Superglobal variables cannot be in a use statement
160+ if ($ this ->reservedKeywordAnalyzer ->isNativeVariable ($ variableName )) {
161+ continue ;
162+ }
153163 if ($ variable ->getAttribute (AttributeKey::IS_BEING_ASSIGNED ) === \true || $ variable ->getAttribute (AttributeKey::IS_PARAM_VAR ) === \true || $ variable ->getAttribute (AttributeKey::IS_VARIABLE_LOOP ) === \true) {
154164 $ alreadyAssignedVariables [] = $ variableName ;
155165 }
0 commit comments