Skip to content

Releases: rectorphp/rector

Released Rector 0.18.12

04 Dec 09:49
Compare
Choose a tag to compare

New Features 🥳

  • [CodeQuality] Add RemoveUselessIsObjectCheckRector (#5316)
  • [PHP83] Implements a rule to add types to class constants (#5290), Thanks @peterfox!

Bugfixes 🐛

  • [TypeDeclaration] Skip iterable already there in AddReturnTypeDeclarationFromYieldsRector (#5291)
  • [TypeDeclaration] Remove ParamTypeFromStrictTypedPropertyRector as seems similar feature with AddParamTypeFromPropertyTypeRector (#5293)
  • [CodingStyle] Remove AddArrayDefaultToArrayPropertyRector as based on docblock types and public contract, better use type declaration set instad (#5298)
  • [TypeDeclaration] Skip return void in abstract empty class in AddVoidReturnTypeWhereNoReturnRector (#5311)
  • [Php80] Skip PDO::query() on AddParamBasedOnParentClassMethodRector (#5313)
  • [TypeDeclaration] Add If else assign support on TypedPropertyFromAssignsRector (#5314)
  • [CodeQuality] Make CommonNotEqualRector skip if not <> (#5292)
  • [Naming] Skip singularize "cms" on RenameForeachValueVariableToMatchExprVariableRector (#5294)
  • [TypeDeclaration][Performance] Check typed param already early on ParamTypeByMethodCallTypeRector (#5295)
  • [Strict] Fix DisallowedEmptyRuleFixerRector empty() allow string '0' check (#5296)
  • [EarlyReturn] Skip duplicating complex expression in ChangeAndIfToEarlyReturnRector (#5301)
  • [Scoped] Exclude symfony/console/Debug/CliRequest.php from parallel-lint PHP 7.2 syntax check (#5304)
  • Skip RenameMethodRector in never (#5305), Thanks @staabm!
  • [CodeQuality] Skip with else on SimplifyForeachToCoalescingRector (#5307)
  • [Doc] Typo fix on sample code documentation on SimplifyForeachToCoalescingRector (#5308)
  • [Privatization] Skip call non-private method on non-final class on PrivatizeLocalGetterToPropertyRector (#5309)
  • [Privatization] Fix first class callable in PrivatizeLocalGetterToPropertyRector (#5310)
  • [TypeDeclaration] Keep constant false return type from strict native call (#5223), Thanks @tomi85!
  • [PHP 7.0] Skip mt_rand() replacement as not valuable (#5315)
  • [Strict] Allow check '0' empty zero on BooleanInTernaryOperatorRuleFixerRector on string type (#5297)
  • Fix annotation to attribute parsing string (#5317)
  • [Instanceof] Fix combination of dead instance and compare (#5319)
  • Remove isPositiveInteger() check for third argument to strpos() (#5257), Thanks @ikari7789!
  • Remove return type in case of void in RemoveUselessReturnTagRector (#5318)
  • [DeadCode] Skip @return never with void on RemoveUselessReturnTagRector (#5320)
  • [DeadCode] Remove useless nullable @return doc on RemoveUselessReturnTagRector (#5321)

Released Rector 0.18.11

27 Nov 13:32
Compare
Choose a tag to compare

Bugfixes 🐛

  • [DeadCode] Skip multi no stmts on RemoveDuplicatedCaseInSwitchRector (#5258)
  • [Performance][Renaming] Remove unnecessary array_reverse() on RenameClassRector (#5266)
  • [TypeDeclaration] Skip default not array type on StrictArrayParamDimFetchRector (#5259)
  • [TypeDeclaration] Skip echo-ed on StrictArrayParamDimFetchRector (#5260)
  • [Php71] Skip re-assigned as array on AssignArrayToStringRector (#5261)
  • [Php71] Ensure re-assign after definition on AssignArrayToStringRector (#5262)
  • [Renaming] Handle Rename no namespace to namespaced class with existing use statements (#5264)
  • [Renaming][Performance] Re-structure check namespace only on renamed node got Namespace_ (#5265)
  • [Php81] Skip increment/decrement on ReadOnlyPropertyRector (#5267)
  • [TypeDeclaration] Deprecate TypedPropertyFromStrictGetterMethodReturnTypeRector as depends on missing context and creates invalid code (#5269)
  • [AutoImport] Fixing auto import on multiple @\ usage (#5271)
  • [Performance][Renaming] Use FullyQualified on RenameClassRector (#5272)
  • [AutoImport] Handle complex usage of multiple @\ combined with other doc (#5273)
  • [AutoImport] Handle multi @\ usage on multiline description (#5274)
  • [Php80] Handle FQCN @\ usage on AnnotationToAttributeRector (#5240)
  • [BetterPhpDocParser] Handle nested doctrine annotation with single quote content (#5281)
  • [Privatization] Skip method with parent call (#5283)
  • [BetterPhpDocParser] Use ORIG_NODE attribute on DoctrineAnnotationDecorator on handle @\ after generic (#5285)
  • [Php80] Allow subnamespace from use statements support on AnnotationToAttributeRector (#5287)

Removed 💀

  • Remove deprecated Rector rules (#5270)

Released Rector 0.18.10

17 Nov 15:10
Compare
Choose a tag to compare

Bugfixes 🐛

  • [Renaming] FQN-ize namespaced import no namespace -> namespaced name on RenameClassRector (#5256)

Released Rector 0.18.9

17 Nov 15:08
Compare
Choose a tag to compare

New Features 🥳

  • [DeadCode]: Support functions in RemoveUnusedVariableAssignRector (#5249
  • [Performance][PostRector] Only process FullyQualified on import Node name on NameImportingPostRector (#5255)

Bugfixes 🐛

  • [AutoImport][Php70] Keep FQCN on conflict last name on TernaryToNullCoalescingRector (#5251)
  • [Naming] Fix dotted name on generics bug in RenameVariableToMatchMethodCallReturnTypeRector (#5250)
  • [Php73] Handle crash on JsonThrowOnErrorRector + SensitiveConstantNameRector (#5253)
  • [CodingStyle] Refactor UseImportsAdder to return [FileWithoutNamespace] code on no namespaced code (#5254)

Released Rector 0.18.8

14 Nov 15:34
Compare
Choose a tag to compare

Bugfixes 🐛

  • Bump to reactphp/event-loop ^1.5 (#5246)
  • [AutoImport] Skip auto import on no namespace used class on auto import enabled (#5247)
  • [AutoImport][Renaming] Handle same last name no namespace just renamed auto import (#5248)

Released Rector 0.18.7

13 Nov 10:19
Compare
Choose a tag to compare

New Features 🥳

  • [CodeQuality] Add negated support on SingleInArrayToCompareRector (#5205)
  • [Php83] Adds rule for adding Override attribute (#5170), Thanks @peterfox!

Bugfixes 🐛

  • BinaryOpBetweenNumberAndStringRector don't trust phpdoc (#5199), Thanks @staabm!
  • [CodeQuality][Php70] Handle LocallyCalledStaticMethodToNonStaticRector + ThisCallOnStaticMethodToStaticCallRector must change both method and caller (#5196)
  • CountArrayToEmptyArrayComparisonRector: don't trust phpdoc (#5203), Thanks @staabm!
  • [TypeDeclaration] Skip union false on NumericReturnTypeFromStrictScalarReturnsRector (#5204)
  • [CodeQuality] Handle negated isset on IssetOnPropertyObjectToPropertyExistsRector on property not exists (#5206)
  • [CodeQuality] Handle crash no scope on ThrowWithPreviousExceptionRector+OptionalParametersAfterRequiredRector (#5207)
  • [NodeTypeResolver] Clean up TryCatch_ Scope filling (#5208)
  • [PHPStanStaticTypeMapper] Clean up tweak false and bool check on UnionTypeMapper (#5209)
  • [TypeDeclaration] Skip default numeric string on param int on ParamTypeByMethodCallTypeRector (#5210)
  • [AutoImport] Handle AnnotationToAttributeRector + RenameClassRector then enable auto import (#5213)
  • [Php80] Keep single quoted Argument Attribute on AnnotationToAttributeRector (#5214)
  • [Php80] Keep single quoted key: 'value' on AnnotationToAttributeRector (#5215)
  • [AutoImport] Ensure change to FullyQualified for Attribute on just changed from annotation (#5216)
  • [Php52][Php70] Handle ContinueToBreakInSwitchRector + BreakNotInLoopOrSwitchToReturnRector (#5217)
  • [Php80] Handle RenameClassRector+AnnotationToAttributeRector with auto import and existing attribute defined (#5219)
  • [Testing] In case of failed test using multiple rules, show applied Rector rules to make easy to find them (#5222)
  • [NodeTypeResolver] Handle nullable extended class on ->isObjectType() on DowngradeReflectionGetAttributesRector (#5224)
  • NullableCompareToNullRector: Don't trust phpdocs (#5225), Thanks @staabm!
  • [CodingStyle] Move ArraySpreadInsteadOfArrayMergeRector from php74 to codingstyle sets list (#5230)
  • [PostRector] Ensure old classes in use statements cleaned up after rename attribuet on ClassRenamingPostRector (#5231)
  • RestoreDefaultNullToNullableTypePropertyRector: skip @readonly phpdoc (#5233), Thanks @staabm!
  • [AutoImport] Handle DeclareStrictTypesRector on importNames() enabled on no namespace (#5241)
  • [AutoImport] Allow auto import just renamed @var only docblock on RenameClassRector without removeUnusedImports() enabled (#5220)
  • Remove rule DataProviderArrayItemsNewlinedRector.php (#5227), Thanks @eerison!
  • Remove ArraySpreadInsteadOfArrayMergeRector from LevelSetList::UP_TO_PHP_74 (#5228), Thanks @staabm!
  • [DeadCode] Allow indirect duplicated grouping on RemoveDuplicatedCaseInSwitchRector (#5234)
  • [DeadCode] Reduce double loop on RemoveDuplicatedCaseInSwitchRector (#5235)
  • [DeadCode] Handle different indirect duplicated on RemoveDuplicatedCaseInSwitchRector (#5236)
  • [DeadCode] Ensure change hasChanged flag on RemoveDuplicatedCaseInSwitchRector (#5237)
  • [DeadCode] Handle repetitive jump equal case stmts on RemoveDuplicatedCaseInSwitchRector (#5239)
  • Rename parameter variable to nextCase on RemoveDuplicatedCaseInSwitchRector (#5244)

Released Rector 0.18.6

24 Oct 15:03
Compare
Choose a tag to compare

New Features and Changes 🥳

  • [CodeQuality] Add CompleteMissingIfElseBracketRector (#5121)
  • [CodeQuality] Add Else and ElseIf on CompleteMissingIfElseBracketRector (#5124)
  • [TypeDeclaration] Utilize ClassMethodReturnTypeOverrideGuard on AddReturnTypeDeclarationFromYieldsRector (#5156)
  • [DeadCode] Add RemoveUselessReturnExprInConstructRector (#5158)
  • Improve UnaryPlus and UnaryMinus support in isDynamicExpr (#5177), Thanks @JulianCBC!

Bugfixes 🐛

  • [CodeQuality] Skip VB style if endif on CompleteMissingIfElseBracketRector (#5122)
  • [CodeQuality] Skip direct InlineHTML on CompleteMissingIfElseBracketRector (#5125)
  • [CodeQuality] Skip spaced elseif cond on CompleteMissingIfElseBracketRector (#5126)
  • [CodeQuality] Only check start from current Stmt token pos up until open parentheses on CompleteMissingIfElseBracketRector (#5127)
  • [CodeQuality] Handle all if,elseif,else no bracket on CompleteMissingIfElseBracketRector (#5129)
  • [CodeQuality] Skip VB style in complex HTML on CompleteMissingIfElseBracketRector (#5132)
  • Skip __construct() in BoolReturnTypeFromStrictScalarReturnsRector (#5133), Thanks @staabm!
  • [CodeQuality] Handle missing bracket on If only on CompleteMissingIfElseBracketRector (#5134)
  • [CodeQuality] Handle on closure, anonymous function, method call on CompleteMissingIfElseBracketRector (#5135)
  • [CodeQuality] Use its start token pos on Else_ on CompleteMissingIfElseBracketRector as no cond (#5136)
  • [PhpParser] Reduce AstResolver complexity by move check fileName is null to parseFileNameToDecoratedNodes() (#5138)
  • [TypeDeclaration] Handle Union with array type on ReturnUnionTypeRector (#5144)
  • [TypeDeclaration] Handle union A extends B on ReturnUnionTypeRector (#5149)
  • [CodeQuality] Fix missing parentheses on CombineIfRector (#5151)
  • [TypeDeclaration] Utilize ClassMethodReturnTypeOverrideGuard on NumericReturnTypeFromStrictScalarReturnsRector (#5155)
  • [CodeQuality] Handle negative and positive int/float on InlineConstructorDefaultToPropertyRector (#5159)
  • [CodeQuality] Skip docblock usage on SimplifyBoolIdenticalTrueRector (#5161)
  • [CodeQuality] Skip magic property fetch on IssetOnPropertyObjectToPropertyExistsRector (#5163)
  • [PostRector] Reduce loop on ClassRenamingPostRector (#5174)
  • [PostRector] Fix ClassRenamingPostRector return when no auto import replacement (#5175)
  • [Renaming] Skip nullable object object|null on RenameMethodRector (#5181)
  • [Downgradephp81][DowngradePhp80] Handle No scope crash on DowngradeSetAccessibleReflectionPropertyRector + DowngradeMatchToSwitchRector (#5183)
  • [Naming] Skip DateTime from renaming, to keep convention of named dates (#5184)
  • Skip new self in RenameVariableToMatchNewTypeRector (#5185)
  • Skip DateTime in ExpectedNameResolver (#5186)
  • [Naming] Skip all kinds of generators (#5187)
  • [Renaming] Skip pointless names in RenameForeachValueVariableToMatchMethodCallReturnTypeRector (#5188)
  • [Php70] Fix Php4 contructor not replaced with __construct() on php 7.4 environment (#5189)
  • [Php74][Php81] Allow mixed key on ArraySpreadInsteadOfArrayMergeRector on php 8.1 version feature enabled (#5190)
  • [TypeDeclaration] Handle skipped by file path on DeclareStrictTypesRector due to use beforeTraverse() (#5191)
  • Fix phpstan notice $phpVersion on Rector\Config\RectorConfig::phpVersion() (#5193)
  • [PHPStanStaticTypeMapper] Remove BoolUnionTypeAnalyzer on UnionTypeMapper (#5141)
  • [DeadCode] Remove UnionType check on RecastingRemovalRector (#5142)
  • Remove src/constants.php for T_ENUM and T_NAME_RELATIVE (#5143)
  • [PHPStanStaticTypeMapper] Remove narrow string and int on UnionTypeMapper (#5145)
  • [PHPStanStaticTypeMapper] Remove matchArrayTypes() on UnionTypeMapper (#5146)
  • [DeadCode] Skip indirect variable definition on RemoveNonExistingVarAnnotationRector (#5152)
  • [DeadCode] Skip key used in next stmt on RemoveUnusedForeachKeyRector (#5153)
  • [DeadCode] Skip used in next For_/Foreach_ on RemoveDeadIfForeachForRector (#5154)
  • [DeadCode] Handle file_get_contents() only remove variable on RemoveUnusedVariableAssignRector (#5162)
  • [DeadCode] Skip count() on mixed on RemoveUnusedNonEmptyArrayBeforeForeachRector (#5160)
  • RemoveUnusedNonEmptyArrayBeforeForeachRector: ignore phpdoc types (#5169), Thanks @staabm!
  • RemoveUnusedNonEmptyArrayBeforeForeachRector: skip array dim fetch (#5166), Thanks @staabm!
  • [DeadCode] Skip return false pseudo type in union on RemoveUselessReturnTagRector (#5172)
  • [AutoImport] [Renaming] Skip remove used use statement on annotation during rename + auto import when no replacement on auto import (#5168)
  • [DeadCode] Mirror comment on assign method call on RemoveUnusedVariableAssignRector (#5195)

Released Rector 0.18.5

05 Oct 11:43
Compare
Choose a tag to compare

New Features and Improvements 🥳

  • [build] Remove duplicated phpstan/phpstan from the build, as require by build package in composer.json already (rectorphp/rector-src@51ed7b6)
  • AddParamTypeBasedOnPHPUnitDataProviderRector: Check all data providers (#5068), Thanks @jlherren!
  • AddParamTypeBasedOnPHPUnitDataProviderRector: Enhance existing rule to handle PHPUnit 10+ DataProvider Attribute (#4925), Thanks @mcampbell508!
  • make PhpDocInfo::findByAnnotationClass() public to use in Symfony rules (#5103)

Bugfixes 🐛

  • Feature/fix class annotation bad print (#5081), Thanks @etshy!
  • [Performance] Avoid ReflectionProvider check function exists on NameImportingPostRector (#5083)
  • InlineConstructorDefaultToPropertyRector Readonly Class (#5085), Thanks @beschoenen!
  • [CodeQuality] Handle crash on variable variable on assign closure on OptionalParametersAfterRequiredRector (#5089)
  • [NodeTypeResolver] Use isScalar()->yes() usage on StaticTypeAnalyzer and ScalarTypeComparator services (#5099)
  • [ProcessAnalyzer] Ensure instanceof Stmt on check infinite loop on not yet has "created_by_rule" attribute (#5100)
  • [DX] Rename shouldImportName() to shouldSkipName() on ClassNameImportSkipper (#5107)
  • The ReturnTypeFromReturnNewRector must only handle new instances, to avoid leaking to everything (#5115)
  • [Php80] Skip when already implements Stringable and has string return type on StringableForToStringRector (#5120)

Removed and Deprecated 💀

  • [DX] Remove CurrentFileProvider dependency on ChangedNodeScopeRefresher (#5087)
  • [DX] Remove DependencyClassMethodDecorator as not used anymore due to paralel nature (#5094)
  • [PostRector] Remove CurrentFileProvider on PostFileProcessor (#5097)
  • [Comments] Remove unused copy Node object on CommentRemover (#5103)
  • [Performance][AutoImport] Remove just renamed check on ClassNameImportSkipper (#5106)
  • Deprecate CountOnNullRector as depends on previous context and require manual adjustment of previous result (#5101)

Released Rector 0.18.4

25 Sep 17:18
Compare
Choose a tag to compare

New Features and Improvements 🥳

  • Introducing Collectors 🥳 - processing collected data + test case (#4970)
  • Run tests on macos (#5019), Thanks @staabm!
  • Move betterNodeFinder, valueResolver, phpDocInfoFactory dependencies from AbstractRector into rules (#5071)
  • DX: Validate paths in RectorConfig->paths() (#5065), Thanks @staabm!
  • [DX] Make PhpDocInfoFactory explicitly required in Rector rule constructor, if needed (#5051)
  • [DX] Make ValueResolver explicitly required in Rector rules constructor if needed (#5052)

Bugfixes 🐛

  • [DeadCode] RemoveDeadZeroAndOneOperationRector should not remove Constants (#4910), Thanks @TwanVermeulen!
  • [PostRector] Fix unused import not removed on empty generic class name exists (#5012)
  • [Parallel] Handle Spaced root project main script on parallel process (#4813)
  • Fix TypedPropertyFromStrictConstructor* order (#5021), Thanks @staabm!
  • [DX] Lower current node dependency - pass it directly to doc node parsing (#5023)
  • [AutoImport] Fix conflict current namespace auto import (#5024)
  • Simplify UseIdenticalOverEqualWithSameTypeRector (#5029), Thanks @staabm!
  • [Performance][Testing] Use str_contains instead of regex in FixtureSplitter (#5030)
  • Fix ArrayKeyFirstLastRector: Skip exection when pointer is changed (#5038), Thanks @scyzoryck!
  • [TypeDeclaration] Handle fallback from param same type object on ReturnTypeFromReturnNewRector (#5039)
  • [NodeTypeResolver] Use Scope->getType() on ArrayDimFetch on NodeTypeResolver::getNativeType() (#5037)
  • [NodeTypeResolver] pull getType() on ArrayDimFetch when not mixed type from its variable native definition (#5056)
  • [CodingStyle][EarlyReturn] Fix infinite if else on BinarySwitchToIfElseRector+RemoveAlwaysElseRector (#5057)
  • [TypeDeclaration] Skip ArrayDimFetch for return and param types (#5059), Thanks @staabm!
  • [NodeTypeResolver] Handle optional array shape on native function like with ArrayDimFetch (#5062)
  • [Php80] Mirror switch comment to match to ChangeSwitchToMatchRector (#5072)
  • [AutoImport] Skip case insensitive conflict defined class name on $rectorConfig->importNames() (#5076)
  • Docblock fix on ShortNameResolver (#5077)
  • [TypeDeclaration] Add return static property support on ReturnTypeFromStrictTypedPropertyRector (#5050)

Removed and Deprecated 💀

  • [Config] Remove asterisk support in import() for file, use explicit paths instead (#5010)
  • [Performance] Remove regex check on open tag spaced check on FileProcessor (#5073)
  • Deprecate TypedPropertyFromStrictConstructorReadonlyClassRector as based on docblock and public elements; use private elements and property promotion instead (#5049)
  • Deprecate BinarySwitchToIfElseRector as opinionated to allow more suitable match() refactoring (#5064)

Released Rector 0.18.3

12 Sep 22:44
Compare
Choose a tag to compare

New Features and Changes 🥳

  • [BC] docblock changes in custom Rector rules now have to be reprinted directly in the rule - #8201 (comment)
  • [TypeDeclaration] Add return empty string defined support on ReturnTypeFromStrictScalarReturnExprRector (#4919)
  • [TypeDeclaration] Add fallback return direct array support on ReturnTypeFromStrictNewArrayRector (#4928)
  • [TypeDeclaration] Add init assign method call support on ReturnTypeFromStrictNewArrayRector (#4929)
  • [TypeDeclaration] Ensure ArrayType on ReturnTypeFromStrictNewArrayRector::shouldAddReturnArrayDocType() (#4932)
  • [TypeDeclaration] Add test fixture return docblock on init method call assign as skipped on ReturnTypeFromStrictNewArrayRector (#4933)
  • [TypeDeclaration] Add non native function return support on ReturnTypeFromStrictScalarReturnExprRector (#4934)
  • BC: Separated regex matching in NodeNameResolver->isName() (#4951), Thanks @staabm!
  • Add support for Custom Skip Voters (#5002), Thanks @kaczenski!
  • Implement a max jobs per worker budget (#4965), Thanks @staabm!
  • Prevent unnecessary calls to spl_object_id() (#4992), Thanks @staabm!
  • Refactor use import resolving (#4998), Thanks @staabm!
  • NodeNameResolver: Throw exception in BC breaking path (#4980), Thanks @staabm!
  • [Internals] Decouple output from AbstractRector, narrow debugging output to file path (#4976)
  • Update docblock only when changed, directly in rector rule (#4986)

Bugfixes 🐛

  • AddVoidReturnTypeWhereNoReturnRector: fix never type handling (#4918), Thanks @staabm!
  • [TypeDeclaration] Skip return after return closure on AddVoidReturnTypeWhereNoReturnRector (#4930)
  • [TypeDeclaration] Use $type->isScalar()->yes() on AlwaysStrictScalarExprAnalyzer (#4920)
  • Refactor BetterNodeFinder::findFirstInFunctionLikeScoped() to work with SilentVoidResolver (#4931)
  • [NodeTypeResolver] Handle isObjectType() on new $class dynamic variable should return false compare to Object FQCN (#4936)
  • [Testing] Fix running unit test on macOS (#4941)
  • Faster name resolving (#4955), Thanks @staabm!
  • UseImportsTraverser: don't deep traverse (#4994), Thanks @staabm!
  • [tests] Replace wildcard e2e test with unit one (#5000)
  • [DocBlock] Update docblock contents right in the rule (#4999)
  • [PhpParser] Fix crash read jetbrains/phpstorm-stubs included in phpstan.phar on PHP 8.0 and PHP 7.4 (#5001)
  • RenameFunctionRector: prevent repeated isName() calls (#5003), Thanks @staabm!
  • Make PhpDocINfo::removeByType() return bool to inform about changed node (#4979)

Removed 💀

  • [cleanup] Remove deprecated NonPhpRectorInterface, PseudoNamespaceToNamespaceRector and mysql to mysqli sets (#4927)
  • Remove UnSpreadOperatorRector as not clear value and spread used on purpose (#4949)
  • [Naming] Remove matchesStringName() check completely from NodeNameResolver, including endsWith() method - use getName() and compare directly instead (#4954)
  • [Performance][Php55] Remove regex replace e on RegexMatcher (#4974)
  • Remove CurrentRectorProvider and used for docblock changes report, return bool value and node directly in the rector rule instead (#4982)
  • Deprecated PhpDocInfo::markAsChanged() to ensure doc block is changed directly in the Rector rule (#4987)