Skip to content

Releases: rectorphp/rector

Released Rector 0.13.1

27 May 18:27
Compare
Choose a tag to compare

New Features 🎉

  • [CodeQuality] Add InlineIsAInstanceOfRector (#2364)
  • [DX] Move configure to direct call in RectorConfig (#2367)
  • [DX] Various config merge, improve RectorConfig methods (#2371)
  • [DX] Remove non-PHP file formatting based on editorconfig, rather let external coding standard tools handle the file format (#2378)

Bugfixes 🐛

  • [Php73] Skip Encapsed on StringifyStrNeedlesRector (#2352), Thanks @samsonasik!
  • [TypeDeclaration] Skip curly {@inheritdoc} on AddArrayReturnDocTypeRector (#2359), Thanks @samsonasik!
  • Allow to rename method if in interface (#2362)
  • [Php81] Skip ArrayDimFetch from ArrayObject in Assign var on ReadOnlyPropertyRector (#2363), Thanks @samsonasik!
  • [PhpDocInfo] Fixes Partial value update got duplicated on DoctrineAnnotationTagValueNode change (#1862), Thanks @samsonasik!

Released Rector 0.13 with Scope Refresh and StmtsAwareInterface

23 May 10:59
Compare
Choose a tag to compare

New Features 🎉

  • [Php82] Add ReadOnlyClassRector (#2296), Thanks @samsonasik!
  • [Order] Add a-z ordering feature to OrderAttributesRector (#2243), Thanks @Lenny4!
  • [Symfony] Add CommandPropertyToAttributeRector (#163), Thanks @stephanvierkant
  • [Experimental] Add refactorWithScope() method to get typed Scope easily and required (#2227)
  • Add Scope refresh for changed or new nodes (#2292)

From YAML routes to Annotations 🚀

  • [Symfony] Add new rule to add annotations from router configuration to symfony controllers (#169), Thanks @malteschlueter
-foo_baz:
-    path: /foo/{baz}
-    defaults: { _controller: FooBundle:Bar:baz, _format: json }
-    methods: [ GET, POST ]

+/**
+ * @Route(name="foo_baz", path="/foo/{baz}", methods={"GET","POST"}, defaults={_format="json"})
+ */
 public function bazAction(string $baz)

New StmtsAwareInterface node

  • [DX] Add StmtsAwareInterface to catch node by type (#2269)

Do you need to iterface all rules with stmts in them? Hook in one node type:

   /**
     * @return array<class-string<Node>>
     */
    public function getNodeTypes(): array
    {
        return [StmtsAwareInterface::class];
    }

Bugfixes 🐛

  • [CodeQuality] Skip CallableThisArrayToAnonymousFunctionRector when inside of Attribute (#2212), #6910, Thanks @samsonasik!
  • Added new functions to NullToStrictStringFuncCallArgRector (#2217), Thanks @FlorinProfeanu!
  • [Parallel] Fix --debug not working in parallel (#2307), Thanks @samsonasik!
  • [DowngradePhp80] Handle match inside ArrowFunction on DowngradeMatchToSwitchRector (#2330), Thanks @samsonasik!
  • [DowngradePhp80] Add in arrow function in return support on DowngradeMatchToSwitchRector (#2331), Thanks @samsonasik!
  • [DowngradePhp80] Apply PHPStan 1.7.x-dev compatible for PhpParameterReflection (#2336), Thanks @samsonasik!
  • [DeadCode] Skip used in Closure use on RemoveUnusedConstructorParamRector (#2341), Thanks @samsonasik!
  • [Naming] Move collecting param names method to FunctionLikeManipulator (#2347), Thanks @samsonasik!
  • [Naming] Handle Grouped use import on UseImportsResolver (#2348), Thanks @samsonasik!

Released Rector 0.12.23

01 May 15:51
Compare
Choose a tag to compare

This release fixes major slowdown on find parents node rules in stmts: #7144, thanks for report and provided detailed info @bobvandevijver and @jrmcpeek 🙇

Update as soon as possible to enjoy the speed again 👍

  • [Code] Improve BetterNodeFinder::findFirstPrevious() to only locate previous of parent if no previous of Node (#2209), Thanks @samsonasik!

New Features 🎉

  • [CodeQuality] Add InlineArrayReturnAssignRector (#2183)
  • Add RectorConfigProvider to ask for configuration behave for 3rd party packages (#2187)
  • [Core] Add $seconds, $maxNumberOfProcess, and $jobSize parameters to RectorConfig::parallel() method (#2188), Thanks @samsonasik!
  • [DX] Move PhpVersionProvider from AbstractRector to particular services (#2189)
  • [DowngradePhp80] Support match as array item in DowngradeMatchToSwitchRector (#2178), Thanks @jrstanley!

Bugfixes 🐛

  • [DeadCode] Improve RemoveUnreachableStatementRector performance by return after array_splice early (#2193), Thanks @samsonasik!
  • [DeadCode] Register array_splice into impure functions on PureFunctionDetector (#2194), Thanks @samsonasik!
  • [CodingStyle] Skip readonly type property on AddArrayDefaultToArrayPropertyRector (#2196), Thanks @samsonasik!
  • [DeadCode] Remove RemoveCodeAfterReturnRector, already handled at RemoveUnreachableStatementRector (#2199), Thanks @samsonasik!

Released Rector 0.12.22

28 Apr 00:07
Compare
Choose a tag to compare

This release slowly moves towards RectorConfig to improve Rector isolation from your project and ease to configuration. You can read more about it here: https://getrector.org/blog/new-in-rector-012-introducing-rector-config-with-autocomplete

New Features 🎉

  • [DX] Update super old configure to RectorConfig (#2121)
  • [DX] Add RectorConfig upgrade rule to make upgrade easier :) (#2098)
  • Improve BetterNodeFinder::findFirstPrevious() to work without statements (#2136)
  • Invalidate errored files in cache, to avoid hiding errors (#2138)
  • [NodeCollector] Remove CurrentStmtResolver service (#2143), Thanks @samsonasik!
  • [DX] Add note warning about using old config (#2177), Thanks @dritter!
  • DowngradeMatchToSwitchRector adds Method and Function call support (#2173), Thanks @jrstanley!

Bugfixes 🐛

  • [Fix][InlineSimplePropertyAnnotationRector] Add test case and minor fix (#2096), Thanks @dorrogeray!
  • [TypeDeclaration] Skip union param type on AddArrayParamDocTypeRector (#2119), Thanks @samsonasik!
  • [TypeDeclaration] Skip return property not exists by ClassReflection on ReturnTypeDeclarationRector (#2134), Thanks @samsonasik!
  • [Php80] Handle named type on JMS\AccessType on AnnotationToAttributeRector (#2141), Thanks @samsonasik!
  • [DeadCode] Skip remove variable on switch use return after break on RemoveUnusedVariableAssignRector (#2145), Thanks @samsonasik!
  • [Php80] Skip different type cases cond on ChangeSwitchToMatchRector (#2147), Thanks @samsonasik!
  • Remove PREVIOUS_STATEMENT from StatementNodeVisitor (#2146)
  • Remove CURRENT_STATEMENT where not needed (#2149)
  • [Php74] Allow change protected property of final class when property only in current class on TypedPropertyRector (#2153), Thanks @samsonasik!
  • Remove uses nodes attribute - part #1 (#2155)
  • Disable StatementNodeVisitor (#2154)
  • Remove NamespaceNodeVisitor (#2167)
  • Decouple aliased object type specifier + updgrade to PHPStan 1.6 (#2170)
  • [DowngradePhp80] Add Static Call Support on DowngradeMatchToSwitchRector (#2175), Thanks @samsonasik!
  • Adds test for DowngradeMatchToSwitchRector match having true subject expression (#2176), Thanks @jrstanley!
  • [TypeDeclaration] Skip return type defined Closure on ReturnTypeDeclarationRector (#2179), Thanks @samsonasik!
  • [Doc] Document deprecated USE_NODES and CURRENT_STATEMENT constant to use existing method call when needed (#2181), Thanks @samsonasik!
  • [Doctrine][Nette][TypeDeclaration] Handle add __construct with no Scope on InitializeDefaultEntityCollectionRector+RenderMethodParamToTypeDeclarationRector (#2180), Thanks @samsonasik!

Released Rector 0.12.21

18 Apr 12:45
Compare
Choose a tag to compare

New RectorConfig to configure your rector.php Without Effort!

  • Add RectorConfig for custom configuration methods (#2019) (#2063)

Before

use Rector\Core\Configuration\Option;
use Rector\Php74\Rector\Property\TypedPropertyRector;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;

return static function (ContainerConfigurator $containerConfigurator): void {
    $parameters = $containerConfigurator->parameters();
    $parameters->set(Option::PARALLEL, true);
    $parameters->set(Option::AUTO_IMPORT_NAMES, true);
   
    $services = $containerConfigurator->services();
    $services->set(TypedPropertyRector::class);
};

Now

use Rector\Php74\Rector\Property\TypedPropertyRector;
use Rector\Config\RectorConfig;

return static function (RectorConfig $rectorConfig): void {
    $rectorConfig->parallel();
    $rectorConfig->importNames();
 
    $rectorConfig->rule(TypedPropertyRector::class);
};

New Features 🎉

  • Add new rule to add explicit public scope to unscoped class methods (#2022), Thanks @Firehed!
  • [Transform] Add FileGetContentsAndJsonDecodeToStaticCallRector (#2059)
  • Add VarAnnotationIncorrectNullableRector for fixing incorrect null type in @var (#2053), Thanks @dorrogeray!
  • Add ReturnAnnotationIncorrectNullableRector for fixing incorrect null type in @return (#2060), Thanks @dorrogeray!
  • [TypeDeclaration] Make TypedPropertyFromAssignsRector configurable with INLINE_PUBLIC (#2052), Thanks @samsonasik!
  • Add ParamAnnotationIncorrectNullableRector for fixing incorrect null type in @param (#2069), Thanks @dorrogeray!
  • Add configurable InlineSimplePropertyAnnotationRector for inlining of simple annotations (#2070), Thanks @dorrogeray!
  • [Php74] Handle standalone false on php >=8 feature enabled on TypedPropertyRector (#2084), Thanks @samsonasik!

Bugfixes 🐛

  • [Strict] Skip ArrayDimFetch on DisallowedEmptyRuleFixerRector (#2023), Thanks @samsonasik!
  • [TypeDeclaration] Skip default type value different with type assigned (#2027), Thanks @samsonasik!
  • [Php74] Skip array var type filled default null in __construct on TypedPropertyRector (#2029), Thanks @samsonasik!
  • [Php74] Skip by ref used by inner Closure use on ClosureToArrowFunctionRector (#2031), Thanks @samsonasik!
  • [Naming] Add Closure and Function_ on RenameParamToMatchTypeRector (#2042), Thanks @samsonasik!
  • [Php56] Skip with coalesce assign on AddDefaultValueForUndefinedVariableRector (#2078), Thanks @samsonasik!
  • [Php81] Skip multiple assign on __construct on ReadOnlyPropertyRector (#2088), Thanks @samsonasik!

Changes 📊

  • [DX] Replace global BetterStandardPrinter from AbstractRector with autowired NodePrinterInterface for easier and specific re-use (#2036)
  • Move RemovedAndAddedFilesCollector, ParameterProvider from AbstractRector to rules that actually use it (#2038)
  • [DX] Remove deprecated attributes (#2039)
  • Merge SimplifyDuplicatedTernaryRector to UnnecessaryTernaryExpressionRector, almost identical rule (#2046)
  • Merge InArrayAndArrayKeysToArrayKeyExistsRector to ArrayKeysAndInArrayToArrayKeyExistsRector with almost identical behavior (#2047)
  • Merge FollowRequireByDirRector to almost identical AbsolutizeRequireAndIncludePathRector (#2048)
  • [build] fix tagging on release (rectorphp/rector-src@4519646)

Released Rector 0.12.20

06 Apr 13:14
Compare
Choose a tag to compare
  • Bump min to PHP 7.2 (#1955) - following PHPStan 1.5 bump, PHP 7.1 usage of Rector is only ~0.2 %

New Features 🎉

  • [DX] Remove different php version rector reporting to make run more clean (#1959)
  • Re-use NeighbourClassLikePrinter (#1957)
  • [Php74] Add GetCalledClassToSelfClassRector (#1971), Thanks @samsonasik!
  • [Php55] Move GetCalledClassToSelfClassRector + GetCalledClassToStaticClassRector from php 7.4 to 5.5 SetList (#1972), Thanks @samsonasik!
  • [DowngradePhp81] Add DowngradeArrayIsListRector (#1996), Thanks @samsonasik!
  • [DowngradePhp54] Add DowngradeThisInClosureRector (#1995), Thanks @samsonasik!
  • [Removing] Add RemoveNamespaceRector (#2013), #7093, Thanks @samsonasik!

Bugfixes 🐛

  • Fix bug with handling bad symlinks (#1938), Thanks @inderpreet99!
  • Fix stub PHPUnit\Framework\TestCase (#1960), Thanks @samsonasik!
  • [TypeDeclaration] Skip ArrayShapeFromConstantArrayReturnRector on key has colon (#1962), Thanks @samsonasik!
  • [TypeDeclaration] Skip key has bracket {}[] on ArrayShapeFromConstantArrayReturnRector (#1968), Thanks @samsonasik!
  • [CodeQuality] Handle not identical return false then true on SimplifyIfReturnBoolRector (#1969), Thanks @samsonasik!
  • [Php81] Skip anonymous class on FinalizePublicClassConstantRector (#1970), Thanks @samsonasik!
  • Handle annotation import with enable AUTO_IMPORT_NAMES not changed (for non-namespaced file) (#1973), Thanks @samsonasik!
  • [CodeQuality] Handle Param by reference in target method on CallableThisArrayToAnonymousFunctionRector (#1974), Thanks @samsonasik!
  • [TypeDeclaration] Skip return inside array_map on ArrayShapeFromConstantArrayReturnRector (#1977), #7079, Thanks @samsonasik!
  • [Privatization] Skip parent static property used by parent method on PrivatizeFinalClassPropertyRector (#1978), Thanks @samsonasik!
  • [Php80] Skip empty default on ChangeSwitchToMatchRector (#1980), Thanks @samsonasik!
  • [TypeDeclaration] Fix AddMethodCallBasedStrictParamTypeRector for offset type (#1982)
  • Fix AddClosureReturnTypeRector for union types of mutually related classes (#1984), Thanks @samsonasik!
  • [CodingStyle] Skip AddFalseDefaultToBoolPropertyRector on assigned in __construct (#1998), Thanks @samsonasik!
  • [TypeDeclaration] Handle default value on not inlined assignment in __construct on TypedPropertyFromStrictConstructorRector (#2008), Thanks @samsonasik!
  • [TypeDeclaration] Handle multiple methods define __construct later on TypedPropertyFromStrictConstructorRector (#2009), Thanks @samsonasik!
  • [TypeDeclaration] Skip __construct in inner class on TypedPropertyFromStrictConstructorRector (#2010), Thanks @samsonasik!
  • [PHPStan] Fix PHPStan notice on ParallelFileProcessor (#2011), Thanks @samsonasik!

Released Rector 0.12.19

23 Mar 14:23
Compare
Choose a tag to compare

New Features 🎉

  • [DX] simplify --debug output to the proccessed file path (#1933)
  • [Php80] Handle return match no default on ChangeSwitchToMatchRector (#1949), Thanks @samsonasik!
  • [Php80] Handle init in before else on ChangeSwitchToMatchRector (#1952), Thanks @samsonasik!

Bugfixes 🐛

  • [Php81] Skip has unset property fetch on ReadOnlyPropertyRector (#1954), Thanks @samsonasik!
  • Fix stub PHPUnit\Framework\TestCase (#1954), Thanks @samsonasik!
  • [TypeDeclaration] Avoid adding param type in case of different default type (#1956)

Released Rector 0.12.18

20 Mar 23:07
Compare
Choose a tag to compare

New Features 🎉

  • [TypeDeclaration] Add ArrayShapeFromConstantArrayReturnRector (#1908)
  • [Transform] Add type matching to MethodCallToPropertyFetchRector (#1905)
  • [Arguments] Add RemoveMethodCallParamRector (#1906)
  • [CodeQuality] Add InlineConstructorDefaultToPropertyRector (#1935)
  • Add StaticCall support to RemoveMethodCallParamRector (#1916)
  • [DX] simplify --debug output to the proccessed file path (#1933)

Bugfixes 🐛

  • [CodeQuality] Handle default value on CallableThisArrayToAnonymousFunctionRector (#1900), Thanks @samsonasik!
  • [TypeDeclaration] Skip ArrayShapeFromConstantArrayReturnRector on class name as key (#1911), Thanks @samsonasik!
  • [Php81] Skip override __construct from interface on NewInInitializerRector (#1913), Thanks @samsonasik!
  • [Arguments] Handle by pass 2nd argument default value on ArgumentAdderRector (#1946), Thanks @samsonasik!
  • [DeadCode] Handle used in anonymous class on RemoveUnusedConstructorParamRector (#1948), Thanks @samsonasik!
  • [Transform] Handle property exists via Property Promotion on NewToMethodCallRector (#1915), Thanks @samsonasik!
  • [Renaming] Apply rename fully qualified namespace docblock on RenameNamespaceRector (#1917), Thanks @samsonasik!
  • [CodingStyle] Handle Interface suffix on CatchExceptionNameMatchingTypeRector (#1918), Thanks @samsonasik!
  • [CodingStyle] Use alias name when exists on CatchExceptionNameMatchingTypeRector (#1920), Thanks @samsonasik!
  • Fix some minor misprints (#1922), Thanks @bocharsky-bw!
  • [Dep] Add PHPUnit\Framework\TestCase stub on target-repository bootstrap.php (#1924), Thanks @samsonasik!
  • [TypeDeclaration] Fix parent method param override (#1945)
  • [DeadCode][CodingStyle] Handle SplitDoubleAssignRector+RemoveUnusedPrivatePropertyRector (#1944), Thanks @samsonasik!
  • [Php81] Skip static property on ReadOnlyPropertyRector (#1939), Thanks @samsonasik!
  • [PHP 8.0] Fix skip of silent key in annotation to attribute (#1932)

Deprecations ⌛️

  • [MockeryToProphecy] Deprecate micro set as not practical (#1899)
  • [PhpSpecToPHPUnit] Deprecate historical set, mostly for experimental in early days (#1901)
  • Remove old PHPSpec 3 and 4 sets (#1902)
  • [Order] Deprecate rather coding standard related set, use OrderedClassElementsFixer instead (#1910)
  • [Transform] Remove AddInterfaceByParentRector as never used (#1935)
  • [DeadCode] Skip called by current classname on RemoveUnusedPrivateClassConstantRector (#1931), Thanks @samsonasik!

Released Rector 0.12.17

03 Mar 12:26
Compare
Choose a tag to compare

New Features 🎉

  • [DX] Make progress bar less verbose on CI (#1797), #6996
  • Remove min php version from OptionalParametersAfterRequiredRector (#1814), Thanks @leighman!
  • [CodeQuality] Extend SimplifyForeachToArrayFilterRector with compare cond (#1820)
  • Add Projects using Rector section to README.md (#1881), Thanks @Wirone!

Bugfixes 🐛

  • [Php74] Skip mixed type on TypedPropertyRector on auto import enabled (#1798), Thanks @connerbw!
  • [Php74] Handle Multiple types with NullType on TypedPropertyRector when PHP 8.0 Feature enabled (#1803), Thanks @samsonasik!
  • [Php74] Skip null|false type on TypedPropertyRector on php 8.0 feature enabled (#1804), Thanks @samsonasik!
  • [TypeDeclaration] Use @return type on Generator on ReturnTypeDeclarationRector (#1794), Thanks @samsonasik!
  • [Php74] Skip variable FuncCall $fn() on ReservedFnFunctionRector (#1815), Thanks @samsonasik!
  • [TypeDeclaration] Skip @inheritdoc on PropertyTypeDeclaration (#1752), Thanks @oprypkhantc!
  • [Php81] Skip used as ArrayDimFetch on Arg on side effect FuncCall on ReadOnlyPropertyRector (#1822), Thanks @samsonasik!
  • Skip removing Psalm PhpDocTagNode (#1829), Thanks @rajyan!
  • Fix annotation to attribute rector with doctrine table and nested uniqueConstraints option (#1850), Thanks @acrobat!
  • [Php81] Add ConstFetch and ClassConstFetch arg support on NewInInitializerRector (#1848), Thanks @samsonasik!
  • Do not prepend a \ to the type, if it is already Fully Qualified (#1863), Thanks @mkrauser!
  • [Core] Fixing applied rules not shown when refactor() only change docblock (#1861), Thanks @samsonasik!
  • [DowngradePhp72] Handle in assign on DowngradePregUnmatchedAsNullConstantRector (#1872), Thanks @samsonasik!

Changes ⚙️

  • Remove deprecated show command (#1796)
  • [DX] Deprecate disabling of import options to keep configuration simpler (#1817)
  • [DX] Inline PARALLEL_SYSTEM_ERROR_COUNT_LIMIT option to keep user scope outside internal system (#1818)
  • Deprecate RemovingStatic rules as very narrow use case in generic rules (#1819)
  • [DX] Remove GenericClassMethodParamRector, rather PHPStorm one-time refactoring job (#1830)
  • [DX] Remove SingleToManyMethodRector, rather one time job useful for PHPStorm (#1831)
  • [DX] Remove MoveValueObjectsToValueObjectDirectoryRector, should be handled by PHPStorm refactoring and PHPStan rule checks (#1832)
  • [DX] Remove deprecated constants (#1833)
  • [DX] Remove MoveServicesBySuffixToDirectoryRector, better handle by PHPStan + PHPStorm refacor (#1834)
  • [DX] Remove MoveInterfacesToContractNamespaceDirectoryRector as breaky, use PHPStan rule instead (#1835)
  • [DX] Remove MoveEntitiesToEntityDirectoryRector, use PHPStan rule + PhpStorm refactoring instead (#1836)

Released Rector 0.12.16

09 Feb 15:47
Compare
Choose a tag to compare

New Features 🎉

  • [RemoveFinalFromConstRector] (#1732), Thanks @reypm!
  • [DeadCode] Add support for removal readonly property on RemoveUnusedPromotedPropertyRector (#1741), Thanks @samsonasik!
  • [DowngradePhp80] Add DowngradeStringReturnTypeOnToStringRector (#1750), Thanks @samsonasik!
  • [Php74] Add inlinePublic configurable for TypedPropertyRector (#1745), Thanks @samsonasik!
  • [DowngradePhp72] Add DowngradePhp72JsonConstRector (#1765), Thanks @samsonasik!
  • [DowngradePhp73] Add DowngradePhp73JsonConstRector (#1782), Thanks @samsonasik!
  • [DowngradePhp71] Add DowngradePhp71JsonConstRector (#1784), Thanks @samsonasik!

Bugfixes 🐛

  • [Php81] Skip dynamic class on NewInInitializerRector (#1736), Thanks @samsonasik!
  • [Php81] Do not add final modifier on class constant that the class has children on FinalizePublicClassConstantRector (#1739), Thanks @samsonasik!
  • [Php81] Handle non-dynamic + dynamic args (non-array, non-scalar) passed to New_ on NewInInitializerRector (#1737), Thanks @samsonasik!
  • [Php81] Skip override abstract method on NewInInitializerRector (#1740), Thanks @samsonasik!
  • [Renaming] Fix duplicate namespacing on RenameNamespaceRector (#1761), Thanks @samsonasik!
  • [Php80] Fix configure should not remove annotation directly passed bool value (#1761), Thanks @samsonasik!
  • [PHP 8.0] Include keys in annotation to attribute transformation (#1766)
  • [CodeQuality] Skip ExplicitMethodCallOverMagicGetSetRector on method no param + variadic (#1768), Thanks @samsonasik!

Changes ⤵️

  • [DX] Deprecate show command (#1758), use --debug option on main command instead