From f51134283079adda7db7f44aae2f055fab4fd997 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Thu, 8 Oct 2026 21:03:53 +0200 Subject: [PATCH] [Naming] Deprecate RenameForeachValueVariableToMatchExprVariableRector --- config/set/naming.php | 2 - .../Fixture/fixture.php.inc | 33 ------ .../Fixture/keep_underscore.php.inc | 14 --- .../Fixture/not_variable_in_stmts.php.inc | 31 ----- .../Fixture/reference.php.inc | 33 ------ .../rename_to_singular_anonymous.php.inc | 31 ----- .../Fixture/singular_verb.php.inc | 33 ------ .../skip_already_prefixed_single.php.inc | 15 --- .../Fixture/skip_class_constant.php.inc | 18 --- .../Fixture/skip_cms_middle.php.inc | 14 --- .../Fixture/skip_empty_singular_value.php.inc | 13 --- .../Fixture/skip_expr_call.php.inc | 16 --- .../Fixture/skip_expr_not_variable.php.inc | 16 --- .../Fixture/skip_method_call.php.inc | 16 --- .../Fixture/skip_old_value_used_next.php.inc | 17 --- .../Fixture/skip_plural_camelcase.php.inc | 15 --- .../skip_property_not_from_this.php.inc | 16 --- .../Fixture/skip_single_prefix.php.inc | 14 --- .../Fixture/skip_this.php.inc | 14 --- .../Fixture/skip_used_in_key.php.inc | 16 --- .../Fixture/skip_used_in_stmts.php.inc | 15 --- .../Fixture/skip_used_next_foreach.php.inc | 18 --- .../skip_valid_singular_anonymous.php.inc | 13 --- .../skip_value_var_not_variable.php.inc | 20 ---- ...p_var_defined_early_from_parameter.php.inc | 20 ---- .../Fixture/skip_with_number.php.inc | 13 --- .../Fixture/some_property_fetch.php.inc | 33 ------ .../some_static_property_fetch.php.inc | 37 ------ .../some_static_property_fetch2.php.inc | 37 ------ .../used_next_foreach_outside_scope.php.inc | 41 ------- .../Fixture/with_by_middle.php.inc | 33 ------ .../Fixture/with_by_middle_multi.php.inc | 33 ------ ...eVariableToMatchExprVariableRectorTest.php | 28 ----- .../config/configured_rule.php | 9 -- .../InflectorSingularResolver.php | 110 ------------------ ...ValueVariableToMatchExprVariableRector.php | 109 ++--------------- .../InflectorSingularResolverTest.php | 51 -------- 37 files changed, 8 insertions(+), 989 deletions(-) delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/fixture.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/keep_underscore.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/not_variable_in_stmts.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/reference.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/rename_to_singular_anonymous.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/singular_verb.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_already_prefixed_single.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_class_constant.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_cms_middle.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_empty_singular_value.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_expr_call.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_expr_not_variable.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_method_call.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_old_value_used_next.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_plural_camelcase.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_property_not_from_this.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_single_prefix.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_this.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_used_in_key.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_used_in_stmts.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_used_next_foreach.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_valid_singular_anonymous.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_value_var_not_variable.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_var_defined_early_from_parameter.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_with_number.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/some_property_fetch.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/some_static_property_fetch.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/some_static_property_fetch2.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/used_next_foreach_outside_scope.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/with_by_middle.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/with_by_middle_multi.php.inc delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/RenameForeachValueVariableToMatchExprVariableRectorTest.php delete mode 100644 rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/config/configured_rule.php delete mode 100644 rules/Naming/ExpectedNameResolver/InflectorSingularResolver.php delete mode 100644 tests/Naming/ExpectedNameResolver/InflectorSingularResolverTest.php diff --git a/config/set/naming.php b/config/set/naming.php index 440570464e7..0bb524e0f8e 100644 --- a/config/set/naming.php +++ b/config/set/naming.php @@ -5,12 +5,10 @@ use Rector\Config\RectorConfig; use Rector\Naming\Rector\ClassMethod\RenameParamToMatchTypeRector; use Rector\Naming\Rector\ClassMethod\RenameVariableToMatchNewTypeRector; -use Rector\Naming\Rector\Foreach_\RenameForeachValueVariableToMatchExprVariableRector; return static function (RectorConfig $rectorConfig): void { $rectorConfig->rules([ RenameParamToMatchTypeRector::class, RenameVariableToMatchNewTypeRector::class, - RenameForeachValueVariableToMatchExprVariableRector::class, ]); }; diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/fixture.php.inc b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/fixture.php.inc deleted file mode 100644 index 7da70ed983c..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/fixture.php.inc +++ /dev/null @@ -1,33 +0,0 @@ - ------ - diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/keep_underscore.php.inc b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/keep_underscore.php.inc deleted file mode 100644 index 0c0a32558f6..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/keep_underscore.php.inc +++ /dev/null @@ -1,14 +0,0 @@ -variable[] = $property; - } - } -} - -?> ------ -variable[] = $variable; - } - } -} - -?> diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/reference.php.inc b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/reference.php.inc deleted file mode 100644 index e5d1ea48a45..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/reference.php.inc +++ /dev/null @@ -1,33 +0,0 @@ - ------ - diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/rename_to_singular_anonymous.php.inc b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/rename_to_singular_anonymous.php.inc deleted file mode 100644 index a412e0c2712..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/rename_to_singular_anonymous.php.inc +++ /dev/null @@ -1,31 +0,0 @@ - ------ - diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/singular_verb.php.inc b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/singular_verb.php.inc deleted file mode 100644 index d171aff3074..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/singular_verb.php.inc +++ /dev/null @@ -1,33 +0,0 @@ - ------ - diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_already_prefixed_single.php.inc b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_already_prefixed_single.php.inc deleted file mode 100644 index 5bf37f5e3fb..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_already_prefixed_single.php.inc +++ /dev/null @@ -1,15 +0,0 @@ - $singleTypeAsString) { - $singleTypesAsString[$key] = $singleTypeAsString . '[]'; - } - } -} - -?> diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_class_constant.php.inc b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_class_constant.php.inc deleted file mode 100644 index 469d7f7f886..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_class_constant.php.inc +++ /dev/null @@ -1,18 +0,0 @@ - diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_cms_middle.php.inc b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_cms_middle.php.inc deleted file mode 100644 index ca4459af104..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_cms_middle.php.inc +++ /dev/null @@ -1,14 +0,0 @@ - diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_empty_singular_value.php.inc b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_empty_singular_value.php.inc deleted file mode 100644 index c6766750620..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_empty_singular_value.php.inc +++ /dev/null @@ -1,13 +0,0 @@ -getVariables() as $property) { - $array[] = $property; - } - } -} - -?> diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_expr_not_variable.php.inc b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_expr_not_variable.php.inc deleted file mode 100644 index d609c42c2aa..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_expr_not_variable.php.inc +++ /dev/null @@ -1,16 +0,0 @@ - diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_method_call.php.inc b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_method_call.php.inc deleted file mode 100644 index 252c9c07e89..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_method_call.php.inc +++ /dev/null @@ -1,16 +0,0 @@ -calls() as $property) { - $array[] = $property; - } - } -} - -?> diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_old_value_used_next.php.inc b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_old_value_used_next.php.inc deleted file mode 100644 index 7195e8bd70e..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_old_value_used_next.php.inc +++ /dev/null @@ -1,17 +0,0 @@ - diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_property_not_from_this.php.inc b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_property_not_from_this.php.inc deleted file mode 100644 index f2b50b30f9a..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_property_not_from_this.php.inc +++ /dev/null @@ -1,16 +0,0 @@ -vars as $property) { - $array[] = $property; - } - } -} - -?> diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_single_prefix.php.inc b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_single_prefix.php.inc deleted file mode 100644 index b3de8879a46..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_single_prefix.php.inc +++ /dev/null @@ -1,14 +0,0 @@ - diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_used_in_key.php.inc b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_used_in_key.php.inc deleted file mode 100644 index d8247e250fa..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_used_in_key.php.inc +++ /dev/null @@ -1,16 +0,0 @@ - $property) { - $array[$variable] = $property; - } - } -} - -?> diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_used_in_stmts.php.inc b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_used_in_stmts.php.inc deleted file mode 100644 index d8ee404ef38..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_used_in_stmts.php.inc +++ /dev/null @@ -1,15 +0,0 @@ - diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_used_next_foreach.php.inc b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_used_next_foreach.php.inc deleted file mode 100644 index e6275982e6c..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_used_next_foreach.php.inc +++ /dev/null @@ -1,18 +0,0 @@ - diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_valid_singular_anonymous.php.inc b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_valid_singular_anonymous.php.inc deleted file mode 100644 index 1518a1f5f19..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_valid_singular_anonymous.php.inc +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_with_number.php.inc b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_with_number.php.inc deleted file mode 100644 index db1b864fa7d..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/skip_with_number.php.inc +++ /dev/null @@ -1,13 +0,0 @@ -variables as $property) { - $array[] = $property; - } - } -} - -?> ------ -variables as $variable) { - $array[] = $variable; - } - } -} - -?> diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/some_static_property_fetch.php.inc b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/some_static_property_fetch.php.inc deleted file mode 100644 index 439a74cb9d0..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/some_static_property_fetch.php.inc +++ /dev/null @@ -1,37 +0,0 @@ - ------ - diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/some_static_property_fetch2.php.inc b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/some_static_property_fetch2.php.inc deleted file mode 100644 index d467b1745ac..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/some_static_property_fetch2.php.inc +++ /dev/null @@ -1,37 +0,0 @@ - ------ - diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/used_next_foreach_outside_scope.php.inc b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/used_next_foreach_outside_scope.php.inc deleted file mode 100644 index 7f0908f3603..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/used_next_foreach_outside_scope.php.inc +++ /dev/null @@ -1,41 +0,0 @@ - ------ - diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/with_by_middle.php.inc b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/with_by_middle.php.inc deleted file mode 100644 index 99d2370213d..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/with_by_middle.php.inc +++ /dev/null @@ -1,33 +0,0 @@ - ------ - diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/with_by_middle_multi.php.inc b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/with_by_middle_multi.php.inc deleted file mode 100644 index 8bdb52026f6..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/Fixture/with_by_middle_multi.php.inc +++ /dev/null @@ -1,33 +0,0 @@ - ------ - diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/RenameForeachValueVariableToMatchExprVariableRectorTest.php b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/RenameForeachValueVariableToMatchExprVariableRectorTest.php deleted file mode 100644 index 2b21a488dfd..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/RenameForeachValueVariableToMatchExprVariableRectorTest.php +++ /dev/null @@ -1,28 +0,0 @@ -doTestFile($filePath); - } - - public static function provideData(): Iterator - { - return self::yieldFilesFromDirectory(__DIR__ . '/Fixture'); - } - - public function provideConfigFilePath(): string - { - return __DIR__ . '/config/configured_rule.php'; - } -} diff --git a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/config/configured_rule.php b/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/config/configured_rule.php deleted file mode 100644 index aaba8580001..00000000000 --- a/rules-tests/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector/config/configured_rule.php +++ /dev/null @@ -1,9 +0,0 @@ -withRules([RenameForeachValueVariableToMatchExprVariableRector::class]); diff --git a/rules/Naming/ExpectedNameResolver/InflectorSingularResolver.php b/rules/Naming/ExpectedNameResolver/InflectorSingularResolver.php deleted file mode 100644 index c2d59c5bda4..00000000000 --- a/rules/Naming/ExpectedNameResolver/InflectorSingularResolver.php +++ /dev/null @@ -1,110 +0,0 @@ - - */ - private const array SINGULARIZE_MAP = [ - 'news' => 'new', - ]; - - /** - * @see https://regex101.com/r/lbQaGC/3 - */ - private const string CAMELCASE_REGEX = '#(?([a-z\d]+|[A-Z\d]{1,}[a-z\d]+|_))#'; - - /** - * @see https://regex101.com/r/2aGdkZ/2 - */ - private const string BY_MIDDLE_REGEX = '#(?By[A-Z][a-zA-Z]+)#'; - - private const string CAMELCASE = 'camelcase'; - - public function __construct( - private Inflector $inflector - ) { - } - - public function resolve(string $currentName): string - { - $matchBy = Strings::match($currentName, self::BY_MIDDLE_REGEX); - if ($matchBy !== null) { - return Strings::substring($currentName, 0, -strlen((string) $matchBy['by'])); - } - - $resolvedValue = $this->resolveSingularizeMap($currentName); - if ($resolvedValue !== null) { - return $resolvedValue; - } - - $singularValueVarName = $this->singularizeCamelParts($currentName); - - if (in_array($singularValueVarName, ['', '_'], true)) { - return $currentName; - } - - $length = strlen($singularValueVarName); - if ($length < 40) { - return $singularValueVarName; - } - - return $currentName; - } - - private function resolveSingularizeMap(string $currentName): string|null - { - foreach (self::SINGULARIZE_MAP as $plural => $singular) { - if ($currentName === $plural) { - return $singular; - } - - if (StringUtils::isMatch($currentName, '#' . ucfirst($plural) . '#')) { - $resolvedValue = Strings::replace($currentName, '#' . ucfirst($plural) . '#', ucfirst($singular)); - return $this->singularizeCamelParts($resolvedValue); - } - - if (StringUtils::isMatch($currentName, '#' . $plural . '#')) { - $resolvedValue = Strings::replace($currentName, '#' . $plural . '#', $singular); - return $this->singularizeCamelParts($resolvedValue); - } - } - - return null; - } - - private function singularizeCamelParts(string $currentName): string - { - $camelCases = Strings::matchAll($currentName, self::CAMELCASE_REGEX); - - $resolvedName = ''; - foreach ($camelCases as $camelCase) { - $camelCaseValue = (string) $camelCase[self::CAMELCASE]; - - // words ending in "ous" are adjectives, not plurals, e.g. "anonymous", "previous" - if (in_array($camelCaseValue, ['is', 'has', 'cms', 'this'], true) || str_ends_with( - $camelCaseValue, - 'ous' - )) { - $value = $camelCaseValue; - } else { - $value = $this->inflector->singularize($camelCaseValue); - } - - $resolvedName .= $value; - } - - return $resolvedName; - } -} diff --git a/rules/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector.php b/rules/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector.php index d596af531b0..0851a24fc3d 100644 --- a/rules/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector.php +++ b/rules/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector.php @@ -5,31 +5,18 @@ namespace Rector\Naming\Rector\Foreach_; use PhpParser\Node; -use PhpParser\Node\Expr\Variable; -use PhpParser\Node\Stmt\Foreach_; -use Rector\Naming\ExpectedNameResolver\InflectorSingularResolver; -use Rector\NodeAnalyzer\PropertyFetchAnalyzer; -use Rector\NodeManipulator\StmtsManipulator; +use Rector\Configuration\Deprecation\Contract\DeprecatedInterface; +use Rector\Exception\ShouldNotHappenException; use Rector\PhpParser\Enum\NodeGroup; -use Rector\PhpParser\Node\BetterNodeFinder; -use Rector\PHPStan\ScopeFetcher; use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** - * @see \Rector\Tests\Naming\Rector\Foreach_\RenameForeachValueVariableToMatchExprVariableRector\RenameForeachValueVariableToMatchExprVariableRectorTest + * @deprecated This rule is deprecated, as it is risky. Renaming a foreach value variable to match the iterated expression variable can clobber meaningful local names and cause conflicts, while offering little real value. */ -final class RenameForeachValueVariableToMatchExprVariableRector extends AbstractRector +final class RenameForeachValueVariableToMatchExprVariableRector extends AbstractRector implements DeprecatedInterface { - public function __construct( - private readonly InflectorSingularResolver $inflectorSingularResolver, - private readonly PropertyFetchAnalyzer $propertyFetchAnalyzer, - private readonly StmtsManipulator $stmtsManipulator, - private readonly BetterNodeFinder $betterNodeFinder - ) { - } - public function getRuleDefinition(): RuleDefinition { return new RuleDefinition('Rename value variable name in foreach loop to match expression variable', [ @@ -77,89 +64,9 @@ public function getNodeTypes(): array */ public function refactor(Node $node): ?Node { - if ($node->stmts === null) { - return null; - } - - $hasChanged = false; - foreach ($node->stmts as $key => $stmt) { - if (! $stmt instanceof Foreach_) { - continue; - } - - $isPropertyFetch = $this->propertyFetchAnalyzer->isLocalPropertyFetch($stmt->expr); - if (! $stmt->expr instanceof Variable && ! $isPropertyFetch) { - continue; - } - - $exprName = $this->getName($stmt->expr); - if ($exprName === null) { - continue; - } - - if ($stmt->keyVar instanceof Node) { - continue; - } - - $valueVarName = $this->getName($stmt->valueVar); - if ($valueVarName === null) { - continue; - } - - $singularValueVarName = $this->inflectorSingularResolver->resolve($exprName); - if ($singularValueVarName === $exprName) { - continue; - } - - if ($singularValueVarName === $valueVarName) { - continue; - } - - $alreadyUsedVariable = $this->betterNodeFinder->findVariableOfName($stmt->stmts, $singularValueVarName); - if ($alreadyUsedVariable instanceof Variable) { - continue; - } - - if ($this->stmtsManipulator->isVariableUsedInNextStmt($node, $key + 1, $singularValueVarName)) { - continue; - } - - if ($this->stmtsManipulator->isVariableUsedInNextStmt($node, $key + 1, $valueVarName)) { - continue; - } - - $scope = ScopeFetcher::fetch($stmt); - if ($scope->hasVariableType($singularValueVarName)->yes()) { - continue; - } - - $this->processRename($stmt, $valueVarName, $singularValueVarName); - $hasChanged = true; - } - - if ($hasChanged) { - return $node; - } - - return null; - } - - private function processRename(Foreach_ $foreach, string $valueVarName, string $singularValueVarName): void - { - $foreach->valueVar = new Variable($singularValueVarName); - $this->traverseNodesWithCallable($foreach->stmts, function (Node $node) use ( - $singularValueVarName, - $valueVarName - ): ?Variable { - if (! $node instanceof Variable) { - return null; - } - - if (! $this->isName($node, $valueVarName)) { - return null; - } - - return new Variable($singularValueVarName); - }); + throw new ShouldNotHappenException(sprintf( + '"%s" rule is deprecated, as it is risky and can clobber meaningful local variable names', + self::class + )); } } diff --git a/tests/Naming/ExpectedNameResolver/InflectorSingularResolverTest.php b/tests/Naming/ExpectedNameResolver/InflectorSingularResolverTest.php deleted file mode 100644 index 6f995c3f958..00000000000 --- a/tests/Naming/ExpectedNameResolver/InflectorSingularResolverTest.php +++ /dev/null @@ -1,51 +0,0 @@ -inflectorSingularResolver = $this->make(InflectorSingularResolver::class); - } - - #[DataProvider('provideData')] - public function testResolveForForeach(string $currentName, string $expectedSingularName): void - { - $singularValue = $this->inflectorSingularResolver->resolve($currentName); - $this->assertSame($expectedSingularName, $singularValue); - } - - /** - * @return Iterator> - */ - public static function provideData(): Iterator - { - yield ['psr4NamespacesToPaths', 'psr4NamespaceToPath']; - yield ['nestedNews', 'nestedNew']; - yield ['news', 'new']; - yield ['property', 'property']; - yield ['argsOrOptions', 'argOrOption']; - - // news and plural - yield ['staticCallsToNews', 'staticCallToNew']; - yield ['newsToMethodCalls', 'newToMethodCall']; - yield ['hasFilters', 'hasFilter']; - - // "ous" adjectives must be kept as is - yield ['anonymousClassNodes', 'anonymousClassNode']; - yield ['previousItems', 'previousItem']; - yield ['anonymous', 'anonymous']; - } -}