44
55use PHPSemVerChecker \Operation \TraitAdded ;
66use PHPSemVerChecker \Operation \TraitRemoved ;
7+ use PHPSemVerChecker \Operation \TraitRenamedCaseOnly ;
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 ['trait ' ]);
18- $ keysAfter = array_keys ($ registryAfter ->data ['trait ' ]);
19- $ added = array_diff ($ keysAfter , $ keysBefore );
20- $ removed = array_diff ($ keysBefore , $ keysAfter );
21- $ toVerify = array_intersect ($ keysBefore , $ keysAfter );
18+ $ traitsBefore = $ registryBefore ->data ['trait ' ];
19+ $ traitsAfter = $ registryAfter ->data ['trait ' ];
20+
21+ $ traitsBeforeKeyed = [];
22+ $ mappingsBeforeKeyed = [];
23+ foreach ($ traitsBefore as $ key => $ traitBefore )
24+ {
25+ $ traitsBeforeKeyed [strtolower ($ traitBefore ->name )] = $ traitBefore ;
26+ $ mappingsBeforeKeyed [strtolower ($ traitBefore ->name )] = $ registryBefore ->mapping ['trait ' ][$ key ];
27+ }
28+
29+ $ traitsAfterKeyed = [];
30+ $ mappingsAfterKeyed = [];
31+ foreach ($ traitsAfter as $ key => $ traitAfter )
32+ {
33+ $ traitsAfterKeyed [strtolower ($ traitAfter ->name )] = $ traitAfter ;
34+ $ mappingsAfterKeyed [strtolower ($ traitAfter ->name )] = $ registryAfter ->mapping ['trait ' ][$ key ];
35+ }
36+
37+ $ traitNamesBefore = array_keys ($ traitsBeforeKeyed );
38+ $ traitNamesAfter = array_keys ($ traitsAfterKeyed );
39+ $ added = array_diff ($ traitNamesAfter , $ traitNamesBefore );
40+ $ removed = array_diff ($ traitNamesBefore , $ traitNamesAfter );
41+ $ toVerify = array_intersect ($ traitNamesBefore , $ traitNamesAfter );
2242
2343 foreach ($ removed as $ key ) {
24- $ fileBefore = $ registryBefore -> mapping [ ' trait ' ] [$ key ];
25- $ traitBefore = $ registryBefore -> data [ ' trait ' ] [$ key ];
44+ $ fileBefore = $ mappingsBeforeKeyed [$ key ];
45+ $ traitBefore = $ traitsBeforeKeyed [$ key ];
2646
2747 $ data = new TraitRemoved ($ fileBefore , $ traitBefore );
2848 $ report ->addTrait ($ data );
2949 }
3050
3151 foreach ($ toVerify as $ key ) {
32- $ fileBefore = $ registryBefore -> mapping [ ' trait ' ] [$ key ];
52+ $ fileBefore = $ mappingsBeforeKeyed [$ key ];
3353 /** @var \PhpParser\Node\Stmt\Class_ $traitBefore */
34- $ traitBefore = $ registryBefore -> data [ ' trait ' ] [$ key ];
35- $ fileAfter = $ registryAfter -> mapping [ ' trait ' ] [$ key ];
54+ $ traitBefore = $ traitsBeforeKeyed [$ key ];
55+ $ fileAfter = $ mappingsAfterKeyed [$ key ];
3656 /** @var \PhpParser\Node\Stmt\Class_ $traitBefore */
37- $ traitAfter = $ registryAfter -> data [ ' trait ' ] [$ key ];
57+ $ traitAfter = $ traitsAfterKeyed [$ key ];
3858
3959 // Leave non-strict comparison here
4060 if ($ traitBefore != $ traitAfter ) {
61+
62+ // Check for name case change.
63+ if (
64+ $ traitBefore ->name !== $ traitAfter ->name
65+ && strtolower ($ traitBefore ->name ) === strtolower ($ traitAfter ->name )
66+ ) {
67+ $ report ->add ($ this ->context , new TraitRenamedCaseOnly ($ fileAfter , $ traitAfter ));
68+ }
69+
4170 $ analyzers = [
4271 new ClassMethodAnalyzer ('trait ' , $ fileBefore , $ fileAfter ),
4372 new PropertyAnalyzer ('trait ' , $ fileBefore , $ fileAfter ),
@@ -51,8 +80,8 @@ public function analyze(Registry $registryBefore, Registry $registryAfter)
5180 }
5281
5382 foreach ($ added as $ key ) {
54- $ fileAfter = $ registryAfter -> mapping [ ' trait ' ] [$ key ];
55- $ traitAfter = $ registryAfter -> data [ ' trait ' ] [$ key ];
83+ $ fileAfter = $ mappingsAfterKeyed [$ key ];
84+ $ traitAfter = $ traitsAfter [$ key ];
5685
5786 $ data = new TraitAdded ($ fileAfter , $ traitAfter );
5887 $ report ->addTrait ($ data );
0 commit comments