skip to Main Content

I’m using the Rector ruleset UP_TO_PHP_74 to update a legacy application.

It mostly does a good job, but the problem I’m seeing a lot of is that it’s changing

...
use My/Namespace/My/Classname;
...
/** @var Guestlist */
private $myVariable;

… to this inline, fully qualified class name:

private /My/Namespace/My/Classname $myVariable;

This is something I do not want. (That’s why use statements exist!)

Is there a way I can tell Rector to use use statements instead of fully qualified inline references?

If not, is there a way I can tell Rector to run everything other than the rule that’s doing this?

Alternatively, is there a PHP CS Fixer rule that will automatically turn these inline references back into proper use statements?

2

Answers


  1. Try adding this to rector config:

    $rectorConfig->importNames();

    (https://getrector.com/documentation/import-names)

    Login or Signup to reply.
  2. For Auto Import Names:
    rector provide $rectorConfig->importNames();

    For Single short classes: $rectorConfig->importShortClasses(false); based on your requirement you will be able to pass true/false in it

    If you have set Option::AUTO_IMPORT_NAMES to true, rector is applying this to every analyzed file, even if no real change by a rector was applied to the file.
    The reason is that a so-called post-rector is responsible for this, namely the NameImportingPostRector.
    If you like to apply the Option::AUTO_IMPORT_NAMES only for real changed files, you can configure this.

    $parameters->set(Option::APPLY_AUTO_IMPORT_NAMES_ON_CHANGED_FILES_ONLY, true);
    

    To Remove unused Imports:
    use the phpcs fixer for it

    // ecs.php
    use PhpCsFixerFixerImportNoUnusedImportsFixer;
    use SymplifyEasyCodingStandardConfigECSConfig;
    
    return static function (ECSConfig $ecsConfig): void {
        $ecsConfig->rule(NoUnusedImportsFixer::class);
    };
    

    Another option is you can use the coding style:
    rule FullyQualifiedNameClassNameImportSkipVoter It will prevent adding import statements if already there.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search