Skip to content

Commit 69764a7

Browse files
calebdwsamsonasik
andauthored
fix: EnumCaseToPascalCaseRector skips existing pascal case (#7264)
* fix: EnumCaseToPascalCaseRector skips existing pascal case * use existing convertToPascalCase --------- Co-authored-by: Abdul Malik Ikhsan <samsonasik@gmail.com>
1 parent ecc0cf7 commit 69764a7

2 files changed

Lines changed: 24 additions & 2 deletions

File tree

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
namespace Rector\Tests\CodingStyle\Rector\Enum_\EnumCaseToPascalCaseRector\Fixture;
4+
5+
enum SkipExistingPascal
6+
{
7+
case Pending;
8+
case Published;
9+
case InReview;
10+
case WaitingForApproval;
11+
}

rules/CodingStyle/Rector/Enum_/EnumCaseToPascalCaseRector.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,18 @@ private function refactorClassConstFetch(ClassConstFetch $classConstFetch): ?Nod
187187

188188
private function convertToPascalCase(string $name): string
189189
{
190-
$parts = explode('_', strtolower($name));
191-
return implode('', array_map(ucfirst(...), $parts));
190+
$parts = explode('_', $name);
191+
return implode(
192+
'',
193+
array_map(
194+
fn ($part): string =>
195+
// If part is all uppercase, convert to ucfirst(strtolower())
196+
// If part is already mixed or PascalCase, keep as is except ucfirst
197+
ctype_upper((string) $part)
198+
? ucfirst(strtolower((string) $part))
199+
: ucfirst((string) $part),
200+
$parts
201+
)
202+
);
192203
}
193204
}

0 commit comments

Comments
 (0)