@@ -61,10 +61,11 @@ private function parseCode(string $code): void
61
61
public function extractMethodBodies (string $ className ): array
62
62
{
63
63
$ nodeFinder = new NodeFinder ;
64
- $ classNode = $ nodeFinder ->findFirst ($ this ->statements , function (Node $ node ) use ($ className ) {
65
- return ($ node instanceof Node \Stmt \Class_ || $ node instanceof Node \Stmt \Trait_)
66
- && $ node ->namespacedName ->toString () === $ className ;
67
- });
64
+ $ classNode = $ nodeFinder ->findFirst (
65
+ $ this ->statements ,
66
+ fn (Node $ node ) => ($ node instanceof Node \Stmt \Class_ || $ node instanceof Node \Stmt \Trait_)
67
+ && $ node ->namespacedName ->toString () === $ className ,
68
+ );
68
69
69
70
$ res = [];
70
71
foreach ($ nodeFinder ->findInstanceOf ($ classNode , Node \Stmt \ClassMethod::class) as $ methodNode ) {
@@ -81,9 +82,10 @@ public function extractMethodBodies(string $className): array
81
82
public function extractFunctionBody (string $ name ): ?string
82
83
{
83
84
/** @var Node\Stmt\Function_ $functionNode */
84
- $ functionNode = (new NodeFinder )->findFirst ($ this ->statements , function (Node $ node ) use ($ name ) {
85
- return $ node instanceof Node \Stmt \Function_ && $ node ->namespacedName ->toString () === $ name ;
86
- });
85
+ $ functionNode = (new NodeFinder )->findFirst (
86
+ $ this ->statements ,
87
+ fn (Node $ node ) => $ node instanceof Node \Stmt \Function_ && $ node ->namespacedName ->toString () === $ name ,
88
+ );
87
89
88
90
return $ this ->getReformattedContents ($ functionNode ->stmts , 1 );
89
91
}
@@ -105,9 +107,11 @@ private function prepareReplacements(array $statements): array
105
107
(new NodeFinder )->find ($ statements , function (Node $ node ) use (&$ replacements , $ start ) {
106
108
if ($ node instanceof Node \Name \FullyQualified) {
107
109
if ($ node ->getAttribute ('originalName ' ) instanceof Node \Name) {
108
- $ of = $ node ->getAttribute ('parent ' ) instanceof Node \Expr \ConstFetch
109
- ? PhpNamespace::NAME_CONSTANT
110
- : ($ node ->getAttribute ('parent ' ) instanceof Node \Expr \FuncCall ? PhpNamespace::NAME_FUNCTION : PhpNamespace::NAME_NORMAL );
110
+ $ of = match (true ) {
111
+ $ node ->getAttribute ('parent ' ) instanceof Node \Expr \ConstFetch => PhpNamespace::NAME_CONSTANT ,
112
+ $ node ->getAttribute ('parent ' ) instanceof Node \Expr \FuncCall => PhpNamespace::NAME_FUNCTION ,
113
+ default => PhpNamespace::NAME_NORMAL ,
114
+ };
111
115
$ replacements [] = [
112
116
$ node ->getStartFilePos () - $ start ,
113
117
$ node ->getEndFilePos () - $ start ,
@@ -117,7 +121,7 @@ private function prepareReplacements(array $statements): array
117
121
} elseif ($ node instanceof Node \Scalar \String_ || $ node instanceof Node \Scalar \EncapsedStringPart) {
118
122
// multi-line strings => singleline
119
123
$ token = $ this ->getNodeContents ($ node );
120
- if (strpos ($ token , "\n" ) !== false ) {
124
+ if (str_contains ($ token , "\n" )) {
121
125
$ quote = $ node instanceof Node \Scalar \String_ ? '" ' : '' ;
122
126
$ replacements [] = [
123
127
$ node ->getStartFilePos () - $ start ,
@@ -147,9 +151,7 @@ private function prepareReplacements(array $statements): array
147
151
148
152
private function performReplacements (string $ s , array $ replacements ): string
149
153
{
150
- usort ($ replacements , function ($ a , $ b ) { // sort by position in file
151
- return $ b [0 ] <=> $ a [0 ];
152
- });
154
+ usort ($ replacements , fn ($ a , $ b ) => $ b [0 ] <=> $ a [0 ]);
153
155
154
156
foreach ($ replacements as [$ start , $ end , $ replacement ]) {
155
157
$ s = substr_replace ($ s , $ replacement , $ start , $ end - $ start + 1 );
@@ -171,38 +173,25 @@ public function enterNode(Node $node)
171
173
};
172
174
173
175
$ visitor ->callback = function (Node $ node ) use (&$ class , &$ namespace , $ phpFile ) {
174
- if ($ node instanceof Node \Stmt \DeclareDeclare && $ node ->key ->name === 'strict_types ' ) {
175
- $ phpFile ->setStrictTypes ((bool ) $ node ->value ->value );
176
- } elseif ($ node instanceof Node \Stmt \Namespace_) {
177
- $ namespace = $ node ->name ? $ node ->name ->toString () : '' ;
178
- } elseif ($ node instanceof Node \Stmt \Use_) {
179
- $ this ->addUseToNamespace ($ node , $ phpFile ->addNamespace ($ namespace ));
180
- } elseif ($ node instanceof Node \Stmt \Class_) {
181
- if (!$ node ->name ) {
182
- return PhpParser \NodeTraverser::DONT_TRAVERSE_CHILDREN ;
183
- }
184
-
185
- $ class = $ this ->addClassToFile ($ phpFile , $ node );
186
- } elseif ($ node instanceof Node \Stmt \Interface_) {
187
- $ class = $ this ->addInterfaceToFile ($ phpFile , $ node );
188
- } elseif ($ node instanceof Node \Stmt \Trait_) {
189
- $ class = $ this ->addTraitToFile ($ phpFile , $ node );
190
- } elseif ($ node instanceof Node \Stmt \Enum_) {
191
- $ class = $ this ->addEnumToFile ($ phpFile , $ node );
192
- } elseif ($ node instanceof Node \Stmt \Function_) {
193
- $ this ->addFunctionToFile ($ phpFile , $ node );
194
- } elseif ($ node instanceof Node \Stmt \TraitUse) {
195
- $ this ->addTraitToClass ($ class , $ node );
196
- } elseif ($ node instanceof Node \Stmt \Property) {
197
- $ this ->addPropertyToClass ($ class , $ node );
198
- } elseif ($ node instanceof Node \Stmt \ClassMethod) {
199
- $ this ->addMethodToClass ($ class , $ node );
200
- } elseif ($ node instanceof Node \Stmt \ClassConst) {
201
- $ this ->addConstantToClass ($ class , $ node );
202
- } elseif ($ node instanceof Node \Stmt \EnumCase) {
203
- $ this ->addEnumCaseToClass ($ class , $ node );
176
+ if ($ node instanceof Node \Stmt \Class_ && !$ node ->name ) {
177
+ return PhpParser \NodeTraverser::DONT_TRAVERSE_CHILDREN ;
204
178
}
205
-
179
+ match (true ) {
180
+ $ node instanceof Node \Stmt \DeclareDeclare && $ node ->key ->name === 'strict_types ' => $ phpFile ->setStrictTypes ((bool ) $ node ->value ->value ),
181
+ $ node instanceof Node \Stmt \Namespace_ => $ namespace = $ node ->name ?->toString(),
182
+ $ node instanceof Node \Stmt \Use_ => $ this ->addUseToNamespace ($ node , $ phpFile ->addNamespace ($ namespace )),
183
+ $ node instanceof Node \Stmt \Class_ => $ class = $ this ->addClassToFile ($ phpFile , $ node ),
184
+ $ node instanceof Node \Stmt \Interface_ => $ class = $ this ->addInterfaceToFile ($ phpFile , $ node ),
185
+ $ node instanceof Node \Stmt \Trait_ => $ class = $ this ->addTraitToFile ($ phpFile , $ node ),
186
+ $ node instanceof Node \Stmt \Enum_ => $ class = $ this ->addEnumToFile ($ phpFile , $ node ),
187
+ $ node instanceof Node \Stmt \Function_ => $ this ->addFunctionToFile ($ phpFile , $ node ),
188
+ $ node instanceof Node \Stmt \TraitUse => $ this ->addTraitToClass ($ class , $ node ),
189
+ $ node instanceof Node \Stmt \Property => $ this ->addPropertyToClass ($ class , $ node ),
190
+ $ node instanceof Node \Stmt \ClassMethod => $ this ->addMethodToClass ($ class , $ node ),
191
+ $ node instanceof Node \Stmt \ClassConst => $ this ->addConstantToClass ($ class , $ node ),
192
+ $ node instanceof Node \Stmt \EnumCase => $ this ->addEnumCaseToClass ($ class , $ node ),
193
+ default => null ,
194
+ };
206
195
if ($ node instanceof Node \FunctionLike) {
207
196
return PhpParser \NodeTraverser::DONT_TRAVERSE_CHILDREN ;
208
197
}
@@ -227,7 +216,7 @@ private function addUseToNamespace(Node\Stmt\Use_ $node, PhpNamespace $namespace
227
216
$ node ::TYPE_CONSTANT => PhpNamespace::NAME_CONSTANT ,
228
217
][$ node ->type ];
229
218
foreach ($ node ->uses as $ use ) {
230
- $ namespace ->addUse ($ use ->name ->toString (), $ use ->alias ? $ use -> alias -> toString () : null , $ of );
219
+ $ namespace ->addUse ($ use ->name ->toString (), $ use ->alias ?-> toString(), $ of );
231
220
}
232
221
}
233
222
@@ -360,7 +349,7 @@ private function addConstantToClass(ClassType $class, Node\Stmt\ClassConst $node
360
349
361
350
private function addEnumCaseToClass (ClassType $ class , Node \Stmt \EnumCase $ node )
362
351
{
363
- $ case = $ class ->addCase ($ node ->name ->toString (), $ node ->expr ? $ node -> expr -> value : null );
352
+ $ case = $ class ->addCase ($ node ->name ->toString (), $ node ->expr ?-> value);
364
353
$ this ->addCommentAndAttributes ($ case , $ node );
365
354
}
366
355
0 commit comments