Updated Rector to commit 08d73a1af5ebc77bf37e9854fc1aca76cd5fcbcb

08d73a1af5 [Printer] Apply configurable multiline on Fluent Method Call on print after method call created/re-printed (#5779)
This commit is contained in:
Tomas Votruba 2024-03-28 16:05:42 +00:00
parent 7af3ed15e0
commit 42078c4127
7 changed files with 57 additions and 10 deletions

View File

@ -31,4 +31,6 @@ return static function (RectorConfig $rectorConfig) : void {
foreach ($extensionConfigResolver->provide() as $extensionConfigFile) { foreach ($extensionConfigResolver->provide() as $extensionConfigFile) {
$rectorConfig->import($extensionConfigFile); $rectorConfig->import($extensionConfigFile);
} }
// use original php-parser printer to avoid BC break on fluent call
$rectorConfig->newLineOnFluentCall(\false);
}; };

View File

@ -19,12 +19,12 @@ final class VersionResolver
* @api * @api
* @var string * @var string
*/ */
public const PACKAGE_VERSION = '3122ef482389945d97c26bb3ff5c2b0b3faf867b'; public const PACKAGE_VERSION = '08d73a1af5ebc77bf37e9854fc1aca76cd5fcbcb';
/** /**
* @api * @api
* @var string * @var string
*/ */
public const RELEASE_DATE = '2024-03-28 09:09:29'; public const RELEASE_DATE = '2024-03-28 17:03:10';
/** /**
* @var int * @var int
*/ */

View File

@ -247,6 +247,10 @@ final class RectorConfig extends Container
{ {
SimpleParameterProvider::setParameter(Option::SYMFONY_CONTAINER_PHP_PATH_PARAMETER, $filePath); SimpleParameterProvider::setParameter(Option::SYMFONY_CONTAINER_PHP_PATH_PARAMETER, $filePath);
} }
public function newLineOnFluentCall(bool $enabled = \true) : void
{
SimpleParameterProvider::setParameter(Option::NEW_LINE_ON_FLUENT_CALL, $enabled);
}
/** /**
* @param string[] $extensions * @param string[] $extensions
*/ */

View File

@ -71,6 +71,11 @@ final class Option
* @var string * @var string
*/ */
public const SYMFONY_CONTAINER_PHP_PATH_PARAMETER = 'symfony_container_php_path'; public const SYMFONY_CONTAINER_PHP_PATH_PARAMETER = 'symfony_container_php_path';
/**
* @internal Use @see \Rector\Config\RectorConfig::newLineOnFluentCall()
* @var string
*/
public const NEW_LINE_ON_FLUENT_CALL = 'new_line_on_fluent_call';
/** /**
* @var string * @var string
*/ */

View File

@ -140,13 +140,17 @@ final class RectorConfigBuilder
/** /**
* To make sure type declarations set and level are not duplicated, * To make sure type declarations set and level are not duplicated,
* as both contain same rules * as both contain same rules
* @var bool * @var bool|null
*/ */
private $isTypeCoverageLevelUsed = \false; private $isTypeCoverageLevelUsed;
/** /**
* @var bool * @var bool|null
*/ */
private $isDeadCodeLevelUsed = \false; private $isDeadCodeLevelUsed;
/**
* @var bool|null
*/
private $isFluentNewLine;
/** /**
* @var RegisteredService[] * @var RegisteredService[]
*/ */
@ -154,10 +158,10 @@ final class RectorConfigBuilder
public function __invoke(RectorConfig $rectorConfig) : void public function __invoke(RectorConfig $rectorConfig) : void
{ {
$uniqueSets = \array_unique($this->sets); $uniqueSets = \array_unique($this->sets);
if (\in_array(SetList::TYPE_DECLARATION, $uniqueSets, \true) && $this->isTypeCoverageLevelUsed) { if (\in_array(SetList::TYPE_DECLARATION, $uniqueSets, \true) && $this->isTypeCoverageLevelUsed === \true) {
throw new InvalidConfigurationException(\sprintf('Your config already enables type declarations set.%sRemove "->withTypeCoverageLevel()" as it only duplicates it, or remove type declaration set.', \PHP_EOL)); throw new InvalidConfigurationException(\sprintf('Your config already enables type declarations set.%sRemove "->withTypeCoverageLevel()" as it only duplicates it, or remove type declaration set.', \PHP_EOL));
} }
if (\in_array(SetList::DEAD_CODE, $uniqueSets, \true) && $this->isDeadCodeLevelUsed) { if (\in_array(SetList::DEAD_CODE, $uniqueSets, \true) && $this->isDeadCodeLevelUsed === \true) {
throw new InvalidConfigurationException(\sprintf('Your config already enables dead code set.%sRemove "->withDeadCodeLevel()" as it only duplicates it, or remove dead code set.', \PHP_EOL)); throw new InvalidConfigurationException(\sprintf('Your config already enables dead code set.%sRemove "->withDeadCodeLevel()" as it only duplicates it, or remove dead code set.', \PHP_EOL));
} }
if ($uniqueSets !== []) { if ($uniqueSets !== []) {
@ -240,6 +244,9 @@ final class RectorConfigBuilder
if ($this->symfonyContainerPhpFile !== null) { if ($this->symfonyContainerPhpFile !== null) {
$rectorConfig->symfonyContainerPhp($this->symfonyContainerPhpFile); $rectorConfig->symfonyContainerPhp($this->symfonyContainerPhpFile);
} }
if ($this->isFluentNewLine !== null) {
$rectorConfig->newLineOnFluentCall($this->isFluentNewLine);
}
} }
/** /**
* @param string[] $paths * @param string[] $paths
@ -541,6 +548,11 @@ final class RectorConfigBuilder
$this->rules = \array_merge($this->rules, $levelRules); $this->rules = \array_merge($this->rules, $levelRules);
return $this; return $this;
} }
public function withFluentCallNewLine(bool $isFluentNewLine = \true) : self
{
$this->isFluentNewLine = $isFluentNewLine;
return $this;
}
public function registerService(string $className, ?string $alias = null, ?string $tag = null) : self public function registerService(string $className, ?string $alias = null, ?string $tag = null) : self
{ {
$this->registerServices[] = new RegisteredService($className, $alias, $tag); $this->registerServices[] = new RegisteredService($className, $alias, $tag);

View File

@ -6,11 +6,14 @@ namespace Rector\PhpParser\Printer;
use RectorPrefix202403\Nette\Utils\Strings; use RectorPrefix202403\Nette\Utils\Strings;
use PhpParser\Comment; use PhpParser\Comment;
use PhpParser\Node; use PhpParser\Node;
use PhpParser\Node\Arg;
use PhpParser\Node\AttributeGroup; use PhpParser\Node\AttributeGroup;
use PhpParser\Node\Expr; use PhpParser\Node\Expr;
use PhpParser\Node\Expr\Array_; use PhpParser\Node\Expr\Array_;
use PhpParser\Node\Expr\ArrowFunction; use PhpParser\Node\Expr\ArrowFunction;
use PhpParser\Node\Expr\CallLike;
use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\Closure;
use PhpParser\Node\Expr\MethodCall;
use PhpParser\Node\Expr\Ternary; use PhpParser\Node\Expr\Ternary;
use PhpParser\Node\Expr\Yield_; use PhpParser\Node\Expr\Yield_;
use PhpParser\Node\Param; use PhpParser\Node\Param;
@ -134,8 +137,7 @@ final class BetterStandardPrinter extends Standard
if ($comments === []) { if ($comments === []) {
return parent::pExpr_ArrowFunction($arrowFunction); return parent::pExpr_ArrowFunction($arrowFunction);
} }
$indentSize = SimpleParameterProvider::provideIntParameter(Option::INDENT_SIZE); $indent = $this->resolveIndentSpaces();
$indent = \str_repeat($this->getIndentCharacter(), $this->indentLevel) . \str_repeat($this->getIndentCharacter(), $indentSize);
$text = "\n" . $indent; $text = "\n" . $indent;
foreach ($comments as $key => $comment) { foreach ($comments as $key => $comment) {
$commentText = $key > 0 ? $indent . $comment->getText() : $comment->getText(); $commentText = $key > 0 ? $indent . $comment->getText() : $comment->getText();
@ -355,6 +357,27 @@ final class BetterStandardPrinter extends Standard
} }
return parent::pScalar_LNumber($lNumber); return parent::pScalar_LNumber($lNumber);
} }
private function resolveIndentSpaces() : string
{
$indentSize = SimpleParameterProvider::provideIntParameter(Option::INDENT_SIZE);
return \str_repeat($this->getIndentCharacter(), $this->indentLevel) . \str_repeat($this->getIndentCharacter(), $indentSize);
}
protected function pExpr_MethodCall(MethodCall $methodCall) : string
{
if (SimpleParameterProvider::provideBoolParameter(Option::NEW_LINE_ON_FLUENT_CALL) === \false) {
return parent::pExpr_MethodCall($methodCall);
}
if ($methodCall->var instanceof CallLike) {
foreach ($methodCall->args as $arg) {
if (!$arg instanceof Arg) {
continue;
}
$arg->value->setAttribute(AttributeKey::ORIGINAL_NODE, null);
}
return $this->pDereferenceLhs($methodCall->var) . "\n" . $this->resolveIndentSpaces() . "->" . $this->pObjectProperty($methodCall->name) . '(' . $this->pMaybeMultiline($methodCall->args) . ')';
}
return parent::pExpr_MethodCall($methodCall);
}
/** /**
* Keep attributes on newlines * Keep attributes on newlines
*/ */

View File

@ -60,6 +60,7 @@ abstract class AbstractRectorTestCase extends \Rector\Testing\PHPUnit\AbstractLa
SimpleParameterProvider::setParameter(Option::INDENT_CHAR, ' '); SimpleParameterProvider::setParameter(Option::INDENT_CHAR, ' ');
SimpleParameterProvider::setParameter(Option::INDENT_SIZE, 4); SimpleParameterProvider::setParameter(Option::INDENT_SIZE, 4);
SimpleParameterProvider::setParameter(Option::POLYFILL_PACKAGES, []); SimpleParameterProvider::setParameter(Option::POLYFILL_PACKAGES, []);
SimpleParameterProvider::setParameter(Option::NEW_LINE_ON_FLUENT_CALL, \false);
} }
protected function setUp() : void protected function setUp() : void
{ {