44
55use PHPSemVerChecker \Operation \ClassAdded ;
66use PHPSemVerChecker \Operation \ClassRemoved ;
7+ use PHPSemVerChecker \Operation \ClassRenamedCaseOnly ;
78use PHPSemVerChecker \Registry \Registry ;
89use PHPSemVerChecker \Report \Report ;
910
@@ -14,30 +15,58 @@ public function analyze(Registry $registryBefore, Registry $registryAfter)
1415 {
1516 $ report = new Report ();
1617
17- $ keysBefore = array_keys ($ registryBefore ->data ['class ' ]);
18- $ keysAfter = array_keys ($ registryAfter ->data ['class ' ]);
19- $ added = array_diff ($ keysAfter , $ keysBefore );
20- $ removed = array_diff ($ keysBefore , $ keysAfter );
21- $ toVerify = array_intersect ($ keysBefore , $ keysAfter );
18+ $ classesBefore = $ registryBefore ->data ['class ' ];
19+ $ classesAfter = $ registryAfter ->data ['class ' ];
20+
21+ $ classesBeforeKeyed = [];
22+ $ mappingsBeforeKeyed = [];
23+ foreach ($ classesBefore as $ key => $ classBefore )
24+ {
25+ $ classesBeforeKeyed [strtolower ($ classBefore ->name )] = $ classBefore ;
26+ $ mappingsBeforeKeyed [strtolower ($ classBefore ->name )] = $ registryBefore ->mapping ['class ' ][$ key ];
27+ }
28+
29+ $ classesAfterKeyed = [];
30+ $ mappingsAfterKeyed = [];
31+ foreach ($ classesAfter as $ key => $ classAfter )
32+ {
33+ $ classesAfterKeyed [strtolower ($ classAfter ->name )] = $ classAfter ;
34+ $ mappingsAfterKeyed [strtolower ($ classAfter ->name )] = $ registryAfter ->mapping ['class ' ][$ key ];
35+ }
36+
37+ $ classNamesBefore = array_keys ($ classesBeforeKeyed );
38+ $ classNamesAfter = array_keys ($ classesAfterKeyed );
39+ $ added = array_diff ($ classNamesAfter , $ classNamesBefore );
40+ $ removed = array_diff ($ classNamesBefore , $ classNamesAfter );
41+ $ toVerify = array_intersect ($ classNamesBefore , $ classNamesAfter );
2242
2343 foreach ($ removed as $ key ) {
24- $ fileBefore = $ registryBefore -> mapping [ ' class ' ] [$ key ];
25- $ classBefore = $ registryBefore -> data [ ' class ' ] [$ key ];
44+ $ fileBefore = $ mappingsBeforeKeyed [$ key ];
45+ $ classBefore = $ classesBeforeKeyed [$ key ];
2646
2747 $ data = new ClassRemoved ($ fileBefore , $ classBefore );
2848 $ report ->addClass ($ data );
2949 }
3050
3151 foreach ($ toVerify as $ key ) {
32- $ fileBefore = $ registryBefore -> mapping [ ' class ' ] [$ key ];
52+ $ fileBefore = $ mappingsBeforeKeyed [$ key ];
3353 /** @var \PhpParser\Node\Stmt\Class_ $classBefore */
34- $ classBefore = $ registryBefore -> data [ ' class ' ] [$ key ];
35- $ fileAfter = $ registryAfter -> mapping [ ' class ' ] [$ key ];
54+ $ classBefore = $ classesBeforeKeyed [$ key ];
55+ $ fileAfter = $ mappingsAfterKeyed [$ key ];
3656 /** @var \PhpParser\Node\Stmt\Class_ $classBefore */
37- $ classAfter = $ registryAfter -> data [ ' class ' ] [$ key ];
57+ $ classAfter = $ classesAfterKeyed [$ key ];
3858
3959 // Leave non-strict comparison here
4060 if ($ classBefore != $ classAfter ) {
61+
62+ // Check for case change of class name
63+ if (
64+ $ classBefore ->name !== $ classAfter ->name
65+ && strtolower ($ classBefore ->name ) === strtolower ($ classAfter ->name )
66+ ) {
67+ $ report ->add ($ this ->context , new ClassRenamedCaseOnly ($ fileAfter , $ classAfter ));
68+ }
69+
4170 $ analyzers = [
4271 new ClassMethodAnalyzer ('class ' , $ fileBefore , $ fileAfter ),
4372 new PropertyAnalyzer ('class ' , $ fileBefore , $ fileAfter ),
@@ -51,8 +80,8 @@ public function analyze(Registry $registryBefore, Registry $registryAfter)
5180 }
5281
5382 foreach ($ added as $ key ) {
54- $ fileAfter = $ registryAfter -> mapping [ ' class ' ] [$ key ];
55- $ classAfter = $ registryAfter -> data [ ' class ' ] [$ key ];
83+ $ fileAfter = $ mappingsAfterKeyed [$ key ];
84+ $ classAfter = $ classesAfterKeyed [$ key ];
5685
5786 $ data = new ClassAdded ($ fileAfter , $ classAfter );
5887 $ report ->addClass ($ data );
0 commit comments