@@ -180,7 +180,7 @@ public function enterNode(Node $node)
180
180
}
181
181
};
182
182
183
- $ visitor ->callback = function (Node $ node ) use (&$ class , & $ namespace , $ phpFile ) {
183
+ $ visitor ->callback = function (Node $ node ) use (&$ namespace , $ phpFile ) {
184
184
if ($ node instanceof Node \Stmt \Class_ && !$ node ->name ) {
185
185
return PhpParser \NodeTraverser::DONT_TRAVERSE_CHILDREN ;
186
186
}
@@ -189,17 +189,9 @@ public function enterNode(Node $node)
189
189
&& $ node ->key ->name === 'strict_types '
190
190
&& $ node ->value instanceof Node \Scalar \LNumber => $ phpFile ->setStrictTypes ((bool ) $ node ->value ->value ),
191
191
$ node instanceof Node \Stmt \Namespace_ => $ namespace = $ node ->name ?->toString(),
192
- $ node instanceof Node \Stmt \Use_ => $ this ->addUseToNamespace ($ node , $ phpFile ->addNamespace ($ namespace )),
193
- $ node instanceof Node \Stmt \Class_ => $ class = $ this ->addClassToFile ($ phpFile , $ node ),
194
- $ node instanceof Node \Stmt \Interface_ => $ class = $ this ->addInterfaceToFile ($ phpFile , $ node ),
195
- $ node instanceof Node \Stmt \Trait_ => $ class = $ this ->addTraitToFile ($ phpFile , $ node ),
196
- $ node instanceof Node \Stmt \Enum_ => $ class = $ this ->addEnumToFile ($ phpFile , $ node ),
192
+ $ node instanceof Node \Stmt \Use_ => $ this ->addUseToNamespace ($ phpFile ->addNamespace ($ namespace ), $ node ),
193
+ $ node instanceof Node \Stmt \ClassLike => $ this ->addClassLikeToFile ($ phpFile , $ node ),
197
194
$ node instanceof Node \Stmt \Function_ => $ this ->addFunctionToFile ($ phpFile , $ node ),
198
- $ node instanceof Node \Stmt \TraitUse => $ this ->addTraitToClass ($ class , $ node ),
199
- $ node instanceof Node \Stmt \Property => $ this ->addPropertyToClass ($ class , $ node ),
200
- $ node instanceof Node \Stmt \ClassMethod => $ this ->addMethodToClass ($ class , $ node ),
201
- $ node instanceof Node \Stmt \ClassConst => $ this ->addConstantToClass ($ class , $ node ),
202
- $ node instanceof Node \Stmt \EnumCase => $ this ->addEnumCaseToClass ($ class , $ node ),
203
195
default => null ,
204
196
};
205
197
if ($ node instanceof Node \FunctionLike) {
@@ -222,7 +214,7 @@ public function enterNode(Node $node)
222
214
}
223
215
224
216
225
- private function addUseToNamespace (Node \Stmt \Use_ $ node, PhpNamespace $ namespace ): void
217
+ private function addUseToNamespace (PhpNamespace $ namespace , Node \Stmt \Use_ $ node ): void
226
218
{
227
219
$ of = [
228
220
$ node ::TYPE_NORMAL => PhpNamespace::NameNormal,
@@ -235,62 +227,53 @@ private function addUseToNamespace(Node\Stmt\Use_ $node, PhpNamespace $namespace
235
227
}
236
228
237
229
238
- private function addClassToFile (PhpFile $ phpFile , Node \Stmt \Class_ $ node ): ClassType
230
+ private function addClassLikeToFile (PhpFile $ phpFile , Node \Stmt \ClassLike $ node ): ClassLike
239
231
{
240
- $ class = $ phpFile ->addClass ($ node ->namespacedName ->toString ());
241
- if ($ node ->extends ) {
242
- $ class ->setExtends ($ node ->extends ->toString ());
243
- }
244
-
245
- foreach ($ node ->implements as $ item ) {
246
- $ class ->addImplement ($ item ->toString ());
247
- }
248
-
249
- $ class ->setFinal ($ node ->isFinal ());
250
- $ class ->setAbstract ($ node ->isAbstract ());
251
- $ class ->setReadOnly (method_exists ($ node , 'isReadonly ' ) && $ node ->isReadonly ());
252
- $ this ->addCommentAndAttributes ($ class , $ node );
253
- return $ class ;
254
- }
255
-
256
-
257
- private function addInterfaceToFile (PhpFile $ phpFile , Node \Stmt \Interface_ $ node ): InterfaceType
258
- {
259
- $ class = $ phpFile ->addInterface ($ node ->namespacedName ->toString ());
260
- foreach ($ node ->extends as $ item ) {
261
- $ class ->addExtend ($ item ->toString ());
232
+ if ($ node instanceof Node \Stmt \Class_) {
233
+ $ class = $ phpFile ->addClass ($ node ->namespacedName ->toString ());
234
+ $ class ->setFinal ($ node ->isFinal ());
235
+ $ class ->setAbstract ($ node ->isAbstract ());
236
+ $ class ->setReadOnly (method_exists ($ node , 'isReadonly ' ) && $ node ->isReadonly ());
237
+ if ($ node ->extends ) {
238
+ $ class ->setExtends ($ node ->extends ->toString ());
239
+ }
240
+ foreach ($ node ->implements as $ item ) {
241
+ $ class ->addImplement ($ item ->toString ());
242
+ }
243
+ } elseif ($ node instanceof Node \Stmt \Interface_) {
244
+ $ class = $ phpFile ->addInterface ($ node ->namespacedName ->toString ());
245
+ foreach ($ node ->extends as $ item ) {
246
+ $ class ->addExtend ($ item ->toString ());
247
+ }
248
+ } elseif ($ node instanceof Node \Stmt \Trait_) {
249
+ $ class = $ phpFile ->addTrait ($ node ->namespacedName ->toString ());
250
+
251
+ } elseif ($ node instanceof Node \Stmt \Enum_) {
252
+ $ class = $ phpFile ->addEnum ($ node ->namespacedName ->toString ());
253
+ $ class ->setType ($ node ->scalarType ?->toString());
254
+ foreach ($ node ->implements as $ item ) {
255
+ $ class ->addImplement ($ item ->toString ());
256
+ }
262
257
}
263
258
264
259
$ this ->addCommentAndAttributes ($ class , $ node );
260
+ $ this ->addClassMembers ($ class , $ node );
265
261
return $ class ;
266
262
}
267
263
268
264
269
- private function addTraitToFile (PhpFile $ phpFile , Node \Stmt \Trait_ $ node ): TraitType
270
- {
271
- $ class = $ phpFile ->addTrait ($ node ->namespacedName ->toString ());
272
- $ this ->addCommentAndAttributes ($ class , $ node );
273
- return $ class ;
274
- }
275
-
276
-
277
- private function addEnumToFile (PhpFile $ phpFile , Node \Stmt \Enum_ $ node ): EnumType
265
+ private function addClassMembers (ClassLike $ class , Node \Stmt \ClassLike $ node ): void
278
266
{
279
- $ enum = $ phpFile ->addEnum ($ node ->namespacedName ->toString ());
280
- $ enum ->setType ($ node ->scalarType ?->toString());
281
- foreach ($ node ->implements as $ item ) {
282
- $ enum ->addImplement ($ item ->toString ());
267
+ foreach ($ node ->stmts as $ stmt ) {
268
+ match (true ) {
269
+ $ stmt instanceof Node \Stmt \TraitUse => $ this ->addTraitToClass ($ class , $ stmt ),
270
+ $ stmt instanceof Node \Stmt \Property => $ this ->addPropertyToClass ($ class , $ stmt ),
271
+ $ stmt instanceof Node \Stmt \ClassMethod => $ this ->addMethodToClass ($ class , $ stmt ),
272
+ $ stmt instanceof Node \Stmt \ClassConst => $ this ->addConstantToClass ($ class , $ stmt ),
273
+ $ stmt instanceof Node \Stmt \EnumCase => $ this ->addEnumCaseToClass ($ class , $ stmt ),
274
+ default => null ,
275
+ };
283
276
}
284
-
285
- $ this ->addCommentAndAttributes ($ enum , $ node );
286
- return $ enum ;
287
- }
288
-
289
-
290
- private function addFunctionToFile (PhpFile $ phpFile , Node \Stmt \Function_ $ node ): void
291
- {
292
- $ function = $ phpFile ->addFunction ($ node ->namespacedName ->toString ());
293
- $ this ->setupFunction ($ function , $ node );
294
277
}
295
278
296
279
@@ -359,6 +342,13 @@ private function addEnumCaseToClass(EnumType $class, Node\Stmt\EnumCase $node):
359
342
}
360
343
361
344
345
+ private function addFunctionToFile (PhpFile $ phpFile , Node \Stmt \Function_ $ node ): void
346
+ {
347
+ $ function = $ phpFile ->addFunction ($ node ->namespacedName ->toString ());
348
+ $ this ->setupFunction ($ function , $ node );
349
+ }
350
+
351
+
362
352
private function addCommentAndAttributes (
363
353
PhpFile |ClassLike |Constant |Property |GlobalFunction |Method |Parameter |EnumCase |TraitUse $ element ,
364
354
Node $ node ,
@@ -411,7 +401,8 @@ private function setupFunction(GlobalFunction|Method $function, Node\FunctionLik
411
401
412
402
$ this ->addCommentAndAttributes ($ function , $ node );
413
403
if ($ node ->getStmts ()) {
414
- $ function ->setBody ($ this ->getReformattedContents ($ node ->getStmts (), 2 ));
404
+ $ indent = $ function instanceof GlobalFunction ? 1 : 2 ;
405
+ $ function ->setBody ($ this ->getReformattedContents ($ node ->getStmts (), $ indent ));
415
406
}
416
407
}
417
408
0 commit comments