File tree Expand file tree Collapse file tree 2 files changed +33
-0
lines changed
rules-tests/CodeQuality/Rector/ClassMethod/InlineArrayReturnAssignRector/Fixture
rules/CodeQuality/Rector/ClassMethod Expand file tree Collapse file tree 2 files changed +33
-0
lines changed Original file line number Diff line number Diff line change 1+ <?php
2+
3+ namespace Rector \Tests \CodeQuality \Rector \ClassMethod \InlineArrayReturnAssignRector \Fixture ;
4+
5+ final class SkipUseClosureUseByRef
6+ {
7+ public static function getData (): array
8+ {
9+ $ closure = function () use (&$ person )
10+ {
11+ $ person ['name ' ] = 'Timmy ' ;
12+ $ person ['surname ' ] = 'Back ' ;
13+
14+ return $ person ;
15+ };
16+
17+ $ person = ['test ' ];
18+ var_dump ($ closure ());
19+ }
20+ }
Original file line number Diff line number Diff line change 88use PhpParser \Node \Expr \Array_ ;
99use PhpParser \Node \Expr \ArrayDimFetch ;
1010use PhpParser \Node \Expr \Assign ;
11+ use PhpParser \Node \Expr \Closure ;
1112use PhpParser \Node \Expr \New_ ;
1213use PhpParser \Node \Expr \Variable ;
1314use PhpParser \Node \FunctionLike ;
@@ -100,6 +101,18 @@ public function refactor(Node $node): ?Node
100101 return null ;
101102 }
102103 }
104+
105+ if ($ node instanceof Closure) {
106+ foreach ($ node ->uses as $ use ) {
107+ if (! $ use ->byRef ) {
108+ continue ;
109+ }
110+
111+ if ($ this ->isName ($ use ->var , $ returnedVariableName )) {
112+ return null ;
113+ }
114+ }
115+ }
103116 }
104117
105118 $ emptyArrayAssign = $ this ->resolveDefaultEmptyArrayAssign ($ stmts , $ returnedVariableName );
You can’t perform that action at this time.
0 commit comments