@@ -180,7 +180,7 @@ public function enterNode(Node $node)
180180 }
181181 };
182182
183- $ visitor ->callback = function (Node $ node ) use (&$ class , & $ namespace , $ phpFile ) {
183+ $ visitor ->callback = function (Node $ node ) use (&$ namespace , $ phpFile ) {
184184 if ($ node instanceof Node \Stmt \Class_ && !$ node ->name ) {
185185 return PhpParser \NodeTraverser::DONT_TRAVERSE_CHILDREN ;
186186 }
@@ -189,17 +189,9 @@ public function enterNode(Node $node)
189189 && $ node ->key ->name === 'strict_types '
190190 && $ node ->value instanceof Node \Scalar \LNumber => $ phpFile ->setStrictTypes ((bool ) $ node ->value ->value ),
191191 $ 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 ),
197194 $ 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 ),
203195 default => null ,
204196 };
205197 if ($ node instanceof Node \FunctionLike) {
@@ -222,7 +214,7 @@ public function enterNode(Node $node)
222214 }
223215
224216
225- private function addUseToNamespace (Node \Stmt \Use_ $ node, PhpNamespace $ namespace ): void
217+ private function addUseToNamespace (PhpNamespace $ namespace , Node \Stmt \Use_ $ node ): void
226218 {
227219 $ of = [
228220 $ node ::TYPE_NORMAL => PhpNamespace::NameNormal,
@@ -235,62 +227,53 @@ private function addUseToNamespace(Node\Stmt\Use_ $node, PhpNamespace $namespace
235227 }
236228
237229
238- private function addClassToFile (PhpFile $ phpFile , Node \Stmt \Class_ $ node ): ClassType
230+ private function addClassLikeToFile (PhpFile $ phpFile , Node \Stmt \ClassLike $ node ): ClassLike
239231 {
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+ }
262257 }
263258
264259 $ this ->addCommentAndAttributes ($ class , $ node );
260+ $ this ->addClassMembers ($ class , $ node );
265261 return $ class ;
266262 }
267263
268264
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
278266 {
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+ };
283276 }
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 );
294277 }
295278
296279
@@ -359,6 +342,13 @@ private function addEnumCaseToClass(EnumType $class, Node\Stmt\EnumCase $node):
359342 }
360343
361344
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+
362352 private function addCommentAndAttributes (
363353 PhpFile |ClassLike |Constant |Property |GlobalFunction |Method |Parameter |EnumCase |TraitUse $ element ,
364354 Node $ node ,
@@ -411,7 +401,8 @@ private function setupFunction(GlobalFunction|Method $function, Node\FunctionLik
411401
412402 $ this ->addCommentAndAttributes ($ function , $ node );
413403 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 ));
415406 }
416407 }
417408
0 commit comments