Skip to content

Commit

Permalink
[DX] Remove CommandNaming magic, check rector class exists in RectorC…
Browse files Browse the repository at this point in the history
…onfig (#2372)
  • Loading branch information
TomasVotruba committed May 27, 2022
1 parent 03da987 commit a9dd89b
Show file tree
Hide file tree
Showing 23 changed files with 191 additions and 358 deletions.
158 changes: 155 additions & 3 deletions config/config.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,59 @@

declare(strict_types=1);

use Composer\Semver\VersionParser;
use Doctrine\Inflector\Inflector;
use Doctrine\Inflector\Rules\English\InflectorFactory;
use Ergebnis\Json\Printer\Printer;
use Ergebnis\Json\Printer\PrinterInterface;
use Idiosyncratic\EditorConfig\EditorConfig;
use OndraM\CiDetector\CiDetector;
use PhpParser\BuilderFactory;
use PhpParser\Lexer;
use PhpParser\NodeFinder;
use PhpParser\NodeVisitor\CloningVisitor;
use PhpParser\NodeVisitor\NodeConnectingVisitor;
use PHPStan\Analyser\NodeScopeResolver;
use PHPStan\Analyser\ScopeFactory;
use PHPStan\Dependency\DependencyResolver;
use PHPStan\File\FileHelper;
use PHPStan\Parser\Parser;
use PHPStan\PhpDoc\TypeNodeResolver;
use PHPStan\PhpDocParser\Parser\PhpDocParser;
use PHPStan\PhpDocParser\Parser\TypeParser;
use PHPStan\Reflection\ReflectionProvider;
use Rector\BetterPhpDocParser\PhpDocParser\BetterPhpDocParser;
use Rector\BetterPhpDocParser\PhpDocParser\BetterTypeParser;
use Rector\Caching\Cache;
use Rector\Caching\CacheFactory;
use Rector\Caching\ValueObject\Storage\MemoryCacheStorage;
use Rector\Config\RectorConfig;
use Rector\Core\Bootstrap\ExtensionConfigResolver;
use Rector\Core\Console\ConsoleApplication;
use Rector\Core\Console\Style\RectorConsoleOutputStyle;
use Rector\Core\Console\Style\RectorConsoleOutputStyleFactory;
use Rector\Core\Validation\Collector\EmptyConfigurableRectorCollector;
use Rector\NodeTypeResolver\DependencyInjection\PHPStanServicesFactory;
use Rector\NodeTypeResolver\Reflection\BetterReflection\SourceLocator\IntermediateSourceLocator;
use Rector\NodeTypeResolver\Reflection\BetterReflection\SourceLocatorProvider\DynamicSourceLocatorProvider;
use Rector\PSR4\Composer\PSR4NamespaceMatcher;
use Rector\PSR4\Contract\PSR4AutoloadNamespaceMatcherInterface;
use Symfony\Component\Console\Application;
use function Symfony\Component\DependencyInjection\Loader\Configurator\service;
use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser;
use Symplify\EasyParallel\ValueObject\EasyParallelConfig;
use Symplify\PackageBuilder\Parameter\ParameterProvider;
use Symplify\PackageBuilder\Php\TypeChecker;
use Symplify\PackageBuilder\Reflection\PrivatesAccessor;
use Symplify\PackageBuilder\Reflection\PrivatesCaller;
use Symplify\PackageBuilder\Yaml\ParametersMerger;
use Symplify\SmartFileSystem\FileSystemFilter;
use Symplify\SmartFileSystem\FileSystemGuard;
use Symplify\SmartFileSystem\Finder\FinderSanitizer;
use Symplify\SmartFileSystem\Json\JsonFileSystem;
use Symplify\SmartFileSystem\SmartFileSystem;

return static function (RectorConfig $rectorConfig): void {
$rectorConfig->import(__DIR__ . '/services.php');
$rectorConfig->import(__DIR__ . '/services-rules.php');

// make use of https://github.com/symplify/easy-parallel
$rectorConfig->import(EasyParallelConfig::FILE_PATH);

Expand Down Expand Up @@ -52,6 +94,19 @@
__DIR__ . '/../packages/NodeTypeResolver/Reflection/BetterReflection/SourceLocatorProvider/DynamicSourceLocatorProvider.php',
]);

// psr-4
$services->alias(PSR4AutoloadNamespaceMatcherInterface::class, PSR4NamespaceMatcher::class);

$services->load('Rector\\', __DIR__ . '/../rules')
->exclude([
__DIR__ . '/../rules/*/ValueObject/*',
__DIR__ . '/../rules/*/Rector/*',
__DIR__ . '/../rules/*/Contract/*',
__DIR__ . '/../rules/*/Exception/*',
__DIR__ . '/../rules/*/Enum/*',
__DIR__ . '/../rules/DowngradePhp80/Reflection/SimplePhpParameterReflection.php',
]);

// parallel
$services->set(ParametersMerger::class);

Expand All @@ -70,4 +125,101 @@

// require only in dev
$rectorConfig->import(__DIR__ . '/../utils/compiler/config/config.php', null, 'not_found');

$services->load('Rector\Core\\', __DIR__ . '/../src')
->exclude([
__DIR__ . '/../src/Rector',
__DIR__ . '/../src/Console/Style/RectorConsoleOutputStyle.php',
__DIR__ . '/../src/Exception',
__DIR__ . '/../src/DependencyInjection/CompilerPass',
__DIR__ . '/../src/DependencyInjection/Loader',
__DIR__ . '/../src/Kernel',
__DIR__ . '/../src/ValueObject',
__DIR__ . '/../src/Bootstrap',
__DIR__ . '/../src/Enum',
__DIR__ . '/../src/PhpParser/Node/CustomNode',
__DIR__ . '/../src/PhpParser/ValueObject',
__DIR__ . '/../src/functions',
__DIR__ . '/../src/constants.php',

]);

$services->alias(Application::class, ConsoleApplication::class);

$services->set(EmptyConfigurableRectorCollector::class)
->arg('$containerBuilder', service('service_container'));

$services->set(SimpleCallableNodeTraverser::class);

$services->set(BuilderFactory::class);
$services->set(CloningVisitor::class);
$services->set(NodeConnectingVisitor::class);
$services->set(NodeFinder::class);

$services->set(RectorConsoleOutputStyle::class)
->factory([service(RectorConsoleOutputStyleFactory::class), 'create']);

$services->set(Parser::class)
->factory([service(PHPStanServicesFactory::class), 'createPHPStanParser']);

$services->set(Lexer::class)
->factory([service(PHPStanServicesFactory::class), 'createEmulativeLexer']);

// symplify/package-builder
$services->set(FileSystemGuard::class);
$services->set(PrivatesAccessor::class);
$services->set(PrivatesCaller::class);
$services->set(FinderSanitizer::class);
$services->set(FileSystemFilter::class);

$services->set(ParameterProvider::class)
->arg('$container', service('service_container'));

$services->set(SmartFileSystem::class);
$services->set(JsonFileSystem::class);

$services->set(InflectorFactory::class);
$services->set(Inflector::class)
->factory([service(InflectorFactory::class), 'build']);

$services->set(VersionParser::class);
$services->set(TypeChecker::class);

// phpdoc parser
$services->set(\PHPStan\PhpDocParser\Lexer\Lexer::class);
$services->alias(PhpDocParser::class, BetterPhpDocParser::class);

// cache
$services->set(DependencyResolver::class)
->factory([service(PHPStanServicesFactory::class), 'createDependencyResolver']);
$services->set(FileHelper::class)
->factory([service(PHPStanServicesFactory::class), 'createFileHelper']);

$services->set(Cache::class)
->factory([service(CacheFactory::class), 'create']);

// type resolving
$services->set(IntermediateSourceLocator::class);
$services->alias(TypeParser::class, BetterTypeParser::class);

// PHPStan services
$services->set(ReflectionProvider::class)
->factory([service(PHPStanServicesFactory::class), 'createReflectionProvider']);

$services->set(NodeScopeResolver::class)
->factory([service(PHPStanServicesFactory::class), 'createNodeScopeResolver']);

$services->set(ScopeFactory::class)
->factory([service(PHPStanServicesFactory::class), 'createScopeFactory']);

$services->set(TypeNodeResolver::class)
->factory([service(PHPStanServicesFactory::class), 'createTypeNodeResolver']);

$services->set(DynamicSourceLocatorProvider::class)
->factory([service(PHPStanServicesFactory::class), 'createDynamicSourceLocatorProvider']);

$services->set(EditorConfig::class);

$services->set(Printer::class);
$services->alias(PrinterInterface::class, Printer::class);
};
29 changes: 0 additions & 29 deletions config/services-rules.php

This file was deleted.

163 changes: 0 additions & 163 deletions config/services.php

This file was deleted.

0 comments on commit a9dd89b

Please sign in to comment.