Updated Rector to commit 38a9718b52

38a9718b52 [CS] Fix dynamic and broken indent detection, allow to configure spacing via RectorConfig::indent() method (#2442)
This commit is contained in:
Tomas Votruba 2022-06-06 09:59:48 +00:00
parent a020925efc
commit 08cadc8e87
13 changed files with 65 additions and 63 deletions

View File

@ -61,6 +61,7 @@ return static function (\Rector\Config\RectorConfig $rectorConfig) : void {
$rectorConfig->parallel(120, 16, 20);
$rectorConfig->disableImportNames();
$rectorConfig->importShortClasses();
$rectorConfig->indent(' ', 4);
$rectorConfig->fileExtensions(['php']);
$rectorConfig->nestedChainMethodCallLimit(60);
$rectorConfig->cacheDirectory(\sys_get_temp_dir() . '/rector_cached_files');

View File

@ -84,7 +84,7 @@ final class ClassAnnotationMatcher
if (\strpos($tag, '\\') === \false) {
return $this->resolveAsAliased($uses, $tag, $returnNullOnUnknownClass);
}
if (\strncmp($tag, '\\', \strlen('\\')) === 0 && $this->reflectionProvider->hasClass($tag)) {
if ($this->isPreslashedExistingClass($tag)) {
// Global or absolute Class
return $tag;
}
@ -115,10 +115,17 @@ final class ClassAnnotationMatcher
}
private function resolveClass(?string $class, bool $returnNullOnUnknownClass) : ?string
{
if (null === $class) {
if ($class === null) {
return null;
}
$resolvedClass = $this->reflectionProvider->hasClass($class) ? $class : null;
return $returnNullOnUnknownClass ? $resolvedClass : $class;
}
private function isPreslashedExistingClass(string $tag) : bool
{
if (\strncmp($tag, '\\', \strlen('\\')) !== 0) {
return \false;
}
return $this->reflectionProvider->hasClass($tag);
}
}

View File

@ -192,4 +192,13 @@ final class RectorConfig extends \Symfony\Component\DependencyInjection\Loader\C
$parameters = $this->parameters();
$parameters->set(\Rector\Core\Configuration\Option::CACHE_CLASS, $cacheClass);
}
/**
* @see https://github.com/nikic/PHP-Parser/issues/723#issuecomment-712401963
*/
public function indent(string $character, int $count) : void
{
$parameters = $this->parameters();
$parameters->set(\Rector\Core\Configuration\Option::INDENT_CHAR, $character);
$parameters->set(\Rector\Core\Configuration\Option::INDENT_SIZE, $count);
}
}

View File

@ -16,11 +16,11 @@ final class VersionResolver
/**
* @var string
*/
public const PACKAGE_VERSION = '1c64bb1fb0102d90fb652bf48637dccd18e9b8e3';
public const PACKAGE_VERSION = '38a9718b52200740c552af06b4e021da10d2c132';
/**
* @var string
*/
public const RELEASE_DATE = '2022-06-06 11:35:54';
public const RELEASE_DATE = '2022-06-06 11:51:58';
/**
* @var int
*/

View File

@ -183,4 +183,14 @@ final class Option
* @var string
*/
public const MEMORY_LIMIT = 'memory-limit';
/**
* @deprecated Use @see \Rector\Config\RectorConfig::indent() method
* @var string
*/
public const INDENT_CHAR = 'indent-char';
/**
* @deprecated Use @see \Rector\Config\RectorConfig::indent() method
* @var string
*/
public const INDENT_SIZE = 'indent-size';
}

View File

@ -31,4 +31,12 @@ final class RectorConfigProvider
{
return $this->parameterProvider->provideStringParameter(\Rector\Core\Configuration\Option::SYMFONY_CONTAINER_XML_PATH_PARAMETER);
}
public function getIndentChar() : string
{
return $this->parameterProvider->provideStringParameter(\Rector\Core\Configuration\Option::INDENT_CHAR);
}
public function getIndentSize() : int
{
return $this->parameterProvider->provideIntParameter(\Rector\Core\Configuration\Option::INDENT_SIZE);
}
}

View File

@ -26,9 +26,9 @@ use PhpParser\Node\Stmt\TraitUse;
use PhpParser\Node\Stmt\Use_;
use PhpParser\PrettyPrinter\Standard;
use Rector\Comments\NodeDocBlock\DocBlockUpdater;
use Rector\Core\Configuration\RectorConfigProvider;
use Rector\Core\Contract\PhpParser\NodePrinterInterface;
use Rector\Core\PhpParser\Node\CustomNode\FileWithoutNamespace;
use Rector\Core\PhpParser\Printer\Whitespace\IndentCharacterDetector;
use Rector\Core\Util\StringUtils;
use Rector\NodeTypeResolver\Node\AttributeKey;
/**
@ -69,23 +69,23 @@ final class BetterStandardPrinter extends \PhpParser\PrettyPrinter\Standard impl
* @var string
*/
private $tabOrSpaceIndentCharacter = ' ';
/**
* @readonly
* @var \Rector\Core\PhpParser\Printer\Whitespace\IndentCharacterDetector
*/
private $indentCharacterDetector;
/**
* @readonly
* @var \Rector\Comments\NodeDocBlock\DocBlockUpdater
*/
private $docBlockUpdater;
/**
* @readonly
* @var \Rector\Core\Configuration\RectorConfigProvider
*/
private $rectorConfigProvider;
/**
* @param mixed[] $options
*/
public function __construct(\Rector\Core\PhpParser\Printer\Whitespace\IndentCharacterDetector $indentCharacterDetector, \Rector\Comments\NodeDocBlock\DocBlockUpdater $docBlockUpdater, array $options = [])
public function __construct(\Rector\Comments\NodeDocBlock\DocBlockUpdater $docBlockUpdater, \Rector\Core\Configuration\RectorConfigProvider $rectorConfigProvider, array $options = [])
{
$this->indentCharacterDetector = $indentCharacterDetector;
$this->docBlockUpdater = $docBlockUpdater;
$this->rectorConfigProvider = $rectorConfigProvider;
parent::__construct($options);
// print return type double colon right after the bracket "function(): string"
$this->initializeInsertionMap();
@ -102,8 +102,7 @@ final class BetterStandardPrinter extends \PhpParser\PrettyPrinter\Standard impl
public function printFormatPreserving(array $stmts, array $origStmts, array $origTokens) : string
{
$newStmts = $this->resolveNewStmts($stmts);
// detect per print
$this->tabOrSpaceIndentCharacter = $this->indentCharacterDetector->detect($origTokens);
$this->tabOrSpaceIndentCharacter = $this->rectorConfigProvider->getIndentChar();
$content = parent::printFormatPreserving($newStmts, $origStmts, $origTokens);
// add new line in case of added stmts
if (\count($stmts) !== \count($origStmts) && !\Rector\Core\Util\StringUtils::isMatch($content, self::NEWLINE_END_REGEX)) {

View File

@ -1,30 +0,0 @@
<?php
declare (strict_types=1);
namespace Rector\Core\PhpParser\Printer\Whitespace;
use RectorPrefix20220606\Nette\Utils\Strings;
final class IndentCharacterDetector
{
/**
* Solves https://github.com/rectorphp/rector/issues/1964
*
* Some files have spaces, some have tabs. Keep the original indent if possible.
*
* @param mixed[] $tokens
*/
public function detect(array $tokens) : string
{
foreach ($tokens as $token) {
if ($token[0] === \T_WHITESPACE) {
$tokenContent = $token[1];
$tabMatches = \RectorPrefix20220606\Nette\Utils\Strings::matchAll($tokenContent, '#^\\t#m');
if ($tabMatches !== []) {
return "\t";
}
}
}
// use space by default
return ' ';
}
}

2
vendor/autoload.php vendored
View File

@ -9,4 +9,4 @@ if (PHP_VERSION_ID < 50600) {
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit90911ddedcc77b97c226cc5719494488::getLoader();
return ComposerAutoloaderInitbc9348bd16200a47a749f052c9f9892e::getLoader();

View File

@ -1699,7 +1699,6 @@ return array(
'Rector\\Core\\PhpParser\\Printer\\BetterStandardPrinter' => $baseDir . '/src/PhpParser/Printer/BetterStandardPrinter.php',
'Rector\\Core\\PhpParser\\Printer\\FormatPerservingPrinter' => $baseDir . '/src/PhpParser/Printer/FormatPerservingPrinter.php',
'Rector\\Core\\PhpParser\\Printer\\NodesWithFileDestinationPrinter' => $baseDir . '/src/PhpParser/Printer/NodesWithFileDestinationPrinter.php',
'Rector\\Core\\PhpParser\\Printer\\Whitespace\\IndentCharacterDetector' => $baseDir . '/src/PhpParser/Printer/Whitespace/IndentCharacterDetector.php',
'Rector\\Core\\PhpParser\\ValueObject\\StmtsAndTokens' => $baseDir . '/src/PhpParser/ValueObject/StmtsAndTokens.php',
'Rector\\Core\\Php\\PhpVersionProvider' => $baseDir . '/src/Php/PhpVersionProvider.php',
'Rector\\Core\\Php\\PhpVersionResolver\\ProjectComposerJsonPhpVersionResolver' => $baseDir . '/src/Php/PhpVersionResolver/ProjectComposerJsonPhpVersionResolver.php',

View File

@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
class ComposerAutoloaderInit90911ddedcc77b97c226cc5719494488
class ComposerAutoloaderInitbc9348bd16200a47a749f052c9f9892e
{
private static $loader;
@ -22,19 +22,19 @@ class ComposerAutoloaderInit90911ddedcc77b97c226cc5719494488
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInit90911ddedcc77b97c226cc5719494488', 'loadClassLoader'), true, true);
spl_autoload_register(array('ComposerAutoloaderInitbc9348bd16200a47a749f052c9f9892e', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInit90911ddedcc77b97c226cc5719494488', 'loadClassLoader'));
spl_autoload_unregister(array('ComposerAutoloaderInitbc9348bd16200a47a749f052c9f9892e', 'loadClassLoader'));
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit90911ddedcc77b97c226cc5719494488::getInitializer($loader));
call_user_func(\Composer\Autoload\ComposerStaticInitbc9348bd16200a47a749f052c9f9892e::getInitializer($loader));
$loader->setClassMapAuthoritative(true);
$loader->register(true);
$includeFiles = \Composer\Autoload\ComposerStaticInit90911ddedcc77b97c226cc5719494488::$files;
$includeFiles = \Composer\Autoload\ComposerStaticInitbc9348bd16200a47a749f052c9f9892e::$files;
foreach ($includeFiles as $fileIdentifier => $file) {
composerRequire90911ddedcc77b97c226cc5719494488($fileIdentifier, $file);
composerRequirebc9348bd16200a47a749f052c9f9892e($fileIdentifier, $file);
}
return $loader;
@ -46,7 +46,7 @@ class ComposerAutoloaderInit90911ddedcc77b97c226cc5719494488
* @param string $file
* @return void
*/
function composerRequire90911ddedcc77b97c226cc5719494488($fileIdentifier, $file)
function composerRequirebc9348bd16200a47a749f052c9f9892e($fileIdentifier, $file)
{
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;

View File

@ -4,7 +4,7 @@
namespace Composer\Autoload;
class ComposerStaticInit90911ddedcc77b97c226cc5719494488
class ComposerStaticInitbc9348bd16200a47a749f052c9f9892e
{
public static $files = array (
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
@ -2020,7 +2020,6 @@ class ComposerStaticInit90911ddedcc77b97c226cc5719494488
'Rector\\Core\\PhpParser\\Printer\\BetterStandardPrinter' => __DIR__ . '/../..' . '/src/PhpParser/Printer/BetterStandardPrinter.php',
'Rector\\Core\\PhpParser\\Printer\\FormatPerservingPrinter' => __DIR__ . '/../..' . '/src/PhpParser/Printer/FormatPerservingPrinter.php',
'Rector\\Core\\PhpParser\\Printer\\NodesWithFileDestinationPrinter' => __DIR__ . '/../..' . '/src/PhpParser/Printer/NodesWithFileDestinationPrinter.php',
'Rector\\Core\\PhpParser\\Printer\\Whitespace\\IndentCharacterDetector' => __DIR__ . '/../..' . '/src/PhpParser/Printer/Whitespace/IndentCharacterDetector.php',
'Rector\\Core\\PhpParser\\ValueObject\\StmtsAndTokens' => __DIR__ . '/../..' . '/src/PhpParser/ValueObject/StmtsAndTokens.php',
'Rector\\Core\\Php\\PhpVersionProvider' => __DIR__ . '/../..' . '/src/Php/PhpVersionProvider.php',
'Rector\\Core\\Php\\PhpVersionResolver\\ProjectComposerJsonPhpVersionResolver' => __DIR__ . '/../..' . '/src/Php/PhpVersionResolver/ProjectComposerJsonPhpVersionResolver.php',
@ -3797,9 +3796,9 @@ class ComposerStaticInit90911ddedcc77b97c226cc5719494488
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInit90911ddedcc77b97c226cc5719494488::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit90911ddedcc77b97c226cc5719494488::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInit90911ddedcc77b97c226cc5719494488::$classMap;
$loader->prefixLengthsPsr4 = ComposerStaticInitbc9348bd16200a47a749f052c9f9892e::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInitbc9348bd16200a47a749f052c9f9892e::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInitbc9348bd16200a47a749f052c9f9892e::$classMap;
}, null, ClassLoader::class);
}

View File

@ -9,8 +9,8 @@ $loader = require_once __DIR__.'/autoload.php';
if (!class_exists('AutoloadIncluder', false) && !interface_exists('AutoloadIncluder', false) && !trait_exists('AutoloadIncluder', false)) {
spl_autoload_call('RectorPrefix20220606\AutoloadIncluder');
}
if (!class_exists('ComposerAutoloaderInit90911ddedcc77b97c226cc5719494488', false) && !interface_exists('ComposerAutoloaderInit90911ddedcc77b97c226cc5719494488', false) && !trait_exists('ComposerAutoloaderInit90911ddedcc77b97c226cc5719494488', false)) {
spl_autoload_call('RectorPrefix20220606\ComposerAutoloaderInit90911ddedcc77b97c226cc5719494488');
if (!class_exists('ComposerAutoloaderInitbc9348bd16200a47a749f052c9f9892e', false) && !interface_exists('ComposerAutoloaderInitbc9348bd16200a47a749f052c9f9892e', false) && !trait_exists('ComposerAutoloaderInitbc9348bd16200a47a749f052c9f9892e', false)) {
spl_autoload_call('RectorPrefix20220606\ComposerAutoloaderInitbc9348bd16200a47a749f052c9f9892e');
}
if (!class_exists('Helmich\TypoScriptParser\Parser\AST\Statement', false) && !interface_exists('Helmich\TypoScriptParser\Parser\AST\Statement', false) && !trait_exists('Helmich\TypoScriptParser\Parser\AST\Statement', false)) {
spl_autoload_call('RectorPrefix20220606\Helmich\TypoScriptParser\Parser\AST\Statement');
@ -56,9 +56,9 @@ if (!function_exists('print_node')) {
return \RectorPrefix20220606\print_node(...func_get_args());
}
}
if (!function_exists('composerRequire90911ddedcc77b97c226cc5719494488')) {
function composerRequire90911ddedcc77b97c226cc5719494488() {
return \RectorPrefix20220606\composerRequire90911ddedcc77b97c226cc5719494488(...func_get_args());
if (!function_exists('composerRequirebc9348bd16200a47a749f052c9f9892e')) {
function composerRequirebc9348bd16200a47a749f052c9f9892e() {
return \RectorPrefix20220606\composerRequirebc9348bd16200a47a749f052c9f9892e(...func_get_args());
}
}
if (!function_exists('scanPath')) {