@@ -266,8 +266,24 @@ protected function reportChanged($report, $contextBefore, $contextAfter, $method
266
266
$ beforeParam = $ paramsBefore [$ i ];
267
267
$ afterParam = $ paramsAfter [$ i ];
268
268
269
+ // $beforeParam->
270
+
269
271
$ beforeType = $ beforeParam ->type ;
270
272
$ afterType = $ afterParam ->type ;
273
+ // $beforeParam->default->
274
+
275
+ $ beforeNullable = $ this ->isNullable ($ beforeType );
276
+ $ afterNullable = $ this ->isNullable ($ afterType );
277
+
278
+ $ beforeTypeName = $ this ->getTypeName ($ beforeType );
279
+ $ afterTypeName = $ this ->getTypeName ($ afterType );
280
+
281
+ if ($ beforeNullable !== $ afterNullable && $ beforeTypeName === $ afterTypeName ) {
282
+ echo "️Nullable type change detected for parameter \${$ beforeParam ->var ->name }: \n" ;
283
+ echo "Before: " . ($ beforeNullable ? '? ' : '' ) . $ beforeTypeName . "\n" ;
284
+ echo "After: " . ($ afterNullable ? '? ' : '' ) . $ afterTypeName . "\n" ;
285
+ }
286
+
271
287
272
288
$ beforeDefaultIsNull = isset ($ beforeParam ->default ) && $ beforeParam ->default ->value === null ;
273
289
print_r ("Default value: $ beforeParam ->default ->value \n" );
@@ -421,6 +437,19 @@ protected function reportChanged($report, $contextBefore, $contextAfter, $method
421
437
}
422
438
}
423
439
440
+ private function isNullable ($ type ): bool {
441
+ return $ type instanceof \PhpParser \Node \NullableType;
442
+ }
443
+
444
+ private function getTypeName ($ type ): ?string {
445
+ if ($ type instanceof \PhpParser \Node \NullableType) {
446
+ return $ type ->type instanceof \PhpParser \Node \Identifier ? $ type ->type ->name : null ;
447
+ } elseif ($ type instanceof \PhpParser \Node \Identifier) {
448
+ return $ type ->name ;
449
+ }
450
+ return null ; // For union types or no type
451
+ }
452
+
424
453
/**
425
454
* Checks if return type declaration or annotation was changed
426
455
*
0 commit comments