Rector is using static reflection to load code without running it since version 0.10. That means your classes are found without composer autoload and without running them. Rector will find them and work with them as you have PSR-4 autoload properly setup. This comes very useful in legacy projects or projects with custom autoload.
Do you want to know more about it? Continue here:
<?php
use Rector\Config\RectorConfig;
return RectorConfig::configure()
->withAutoloadPaths([
// discover specific file
__DIR__ . '/file-with-functions.php',
// or full directory
__DIR__ . '/project-without-composer',
]);
Do you need to include constants, class aliases or custom autoloader? Use bootstrap files:
<?php
use Rector\Config\RectorConfig;
return RectorConfig::configure()
->withBootstrapFiles([
__DIR__ . '/constants.php',
__DIR__ . '/project/special/autoload.php',
]);
Listed files will be executed like:
include $filePath;
Sometimes you may encounter this error (see here for an example) even if the class is there and it seems to work properly with other tools (e.g. PHPStan).
In this case you may want to try one of the following solutions:
<?php
use Rector\Config\RectorConfig;
return RectorConfig::configure()
->withAutoloadPaths([
// the path to the exact class file
__DIR__ . '/vendor/acme/my-custom-dependency/src/Your/Own/Namespace/TheAffectedClass.php',
// or you can specify a wider scope
__DIR__ . '/vendor/acme/my-custom-dependency/src',
// WARNING: beware of performances, try to narrow down the path
// as much as you can or you will slow down each run
]);
"files"
config, eg:{
"autoload-dev": {
"files": [
"vendor/acme/my-custom-dependency/src/Your/Own/Namespace/TheAffectedClass.php"
]
}
}
After that, dump classes and re-run Rector:
composer dump-autoload