mirror of
https://github.com/rectorphp/rector.git
synced 2025-01-17 21:38:22 +01:00
70 lines
2.3 KiB
PHP
70 lines
2.3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use Nette\Utils\DateTime;
|
|
use Nette\Utils\Strings;
|
|
use Rector\Compiler\PhpScoper\StaticEasyPrefixer;
|
|
use Rector\Compiler\Unprefixer;
|
|
use Rector\Compiler\ValueObject\ScoperOption;
|
|
|
|
require_once __DIR__ . '/vendor/autoload.php';
|
|
|
|
// [BEWARE] this path is relative to the root and location of this file
|
|
$filePathsToSkip = [
|
|
// @see https://github.com/rectorphp/rector/issues/2852#issuecomment-586315588
|
|
'vendor/symfony/deprecation-contracts/function.php'
|
|
];
|
|
|
|
// remove phpstan, because it is already prefixed in its own scope
|
|
|
|
$dateTime = DateTime::from('now');
|
|
$timestamp = $dateTime->format('Ymd');
|
|
|
|
// see https://github.com/humbug/php-scoper
|
|
return [
|
|
ScoperOption::PREFIX => 'RectorPrefix' . $timestamp,
|
|
ScoperOption::FILES_WHITELIST => $filePathsToSkip,
|
|
ScoperOption::WHITELIST => StaticEasyPrefixer::getExcludedNamespacesAndClasses(),
|
|
ScoperOption::PATCHERS => [
|
|
// [BEWARE] $filePath is absolute!
|
|
|
|
// unprefix string classes, as they're string on purpose - they have to be checked in original form, not prefixed
|
|
function (string $filePath, string $prefix, string $content): string {
|
|
// skip vendor
|
|
if (Strings::contains($filePath, 'vendor/')) {
|
|
return $content;
|
|
}
|
|
|
|
// skip bin/rector.php for composer autoload class
|
|
if (Strings::endsWith($filePath, 'bin/rector.php')) {
|
|
return $content;
|
|
}
|
|
|
|
// skip scoper-autoload
|
|
if (Strings::endsWith($filePath, 'vendor/scoper-autoload.php')) {
|
|
return $content;
|
|
}
|
|
|
|
return Unprefixer::unprefixQuoted($content, $prefix);
|
|
},
|
|
|
|
// scoper missed PSR-4 autodiscovery in Symfony
|
|
function (string $filePath, string $prefix, string $content): string {
|
|
|
|
|
|
// scoper missed PSR-4 autodiscovery in Symfony
|
|
if (! Strings::endsWith($filePath, 'config.php') && ! Strings::endsWith($filePath, 'services.php')) {
|
|
return $content;
|
|
}
|
|
|
|
// skip "Rector\\" namespace
|
|
if (Strings::contains($content, '$services->load(\'Rector')) {
|
|
return $content;
|
|
}
|
|
|
|
return Strings::replace($content, '#services\->load\(\'#', 'services->load(\'' . $prefix . '\\');
|
|
},
|
|
],
|
|
];
|