diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchMethodCallReturnTypeRector/Fixture/skip_metadata_mass_noun.php.inc b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchMethodCallReturnTypeRector/Fixture/skip_metadata_mass_noun.php.inc new file mode 100644 index 00000000000..bcaac4a467c --- /dev/null +++ b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchMethodCallReturnTypeRector/Fixture/skip_metadata_mass_noun.php.inc @@ -0,0 +1,24 @@ +findCore() as $ruleMetadata) { + $array[] = $ruleMetadata; + } + } + + /** + * @return RuleMetadata[] + */ + public function findCore(): array + { + return []; + } +} diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchMethodCallReturnTypeRector/Source/RuleMetadata.php b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchMethodCallReturnTypeRector/Source/RuleMetadata.php new file mode 100644 index 00000000000..c3e25b3ffef --- /dev/null +++ b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchMethodCallReturnTypeRector/Source/RuleMetadata.php @@ -0,0 +1,9 @@ +.+)(?Data|Info)$#'; + /** + * Mass nouns ending in lowercase "data"/"info", eg "metadata", must stay untouched + */ + private const string MASS_NOUN_SUFFIX_REGEX = '#(?:data|info)$#'; + public function __construct( private Inflector $inflector ) { @@ -22,13 +27,17 @@ public function __construct( public function singularize(string $name): string { $matches = Strings::match($name, self::DATA_INFO_SUFFIX_REGEX); - if ($matches === null) { - return $this->inflector->singularize($name); + if ($matches !== null) { + $singularized = $this->inflector->singularize((string) $matches['prefix']); + $uninflectable = $matches['suffix']; + + return $singularized . $uninflectable; } - $singularized = $this->inflector->singularize((string) $matches['prefix']); - $uninflectable = $matches['suffix']; + if (Strings::match($name, self::MASS_NOUN_SUFFIX_REGEX) !== null) { + return $name; + } - return $singularized . $uninflectable; + return $this->inflector->singularize($name); } }