Skip to content

Commit

Permalink
[ECS] Add parallel run with 16x time faster ECS (#925)
Browse files Browse the repository at this point in the history
* [ecs] add parallel run

* fix cs
  • Loading branch information
TomasVotruba committed Sep 27, 2021
1 parent 17cfa9f commit 1d9803c
Show file tree
Hide file tree
Showing 16 changed files with 63 additions and 43 deletions.
3 changes: 3 additions & 0 deletions ecs.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@

$parameters = $containerConfigurator->parameters();

// bleeding edge 16x faster speed
$parameters->set(Option::PARALLEL, true);

$parameters->set(Option::PATHS, [
__DIR__ . '/bin',
__DIR__ . '/src',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ public function refactor(Node $node): ?Node
$arrayDimFetch = new ArrayDimFetch($node->args[0]->value);

$position = 1;
while (isset($node->args[$position]) && $node->args[$position] instanceof Arg) {
while (isset($node->args[$position]) && $node->args[$position] instanceof Arg) {
$assign = new Assign($arrayDimFetch, $node->args[$position]->value);
$assignExpression = new Expression($assign);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,9 @@
*/
final class InArrayAndArrayKeysToArrayKeyExistsRector extends AbstractRector
{
public function __construct(private ArgsAnalyzer $argsAnalyzer)
{
public function __construct(
private ArgsAnalyzer $argsAnalyzer
) {
}

public function getRuleDefinition(): RuleDefinition
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@
*/
final class RemoveSoleValueSprintfRector extends AbstractRector
{
public function __construct(private ArgsAnalyzer $argsAnalyzer)
{
public function __construct(
private ArgsAnalyzer $argsAnalyzer
) {
}

public function getRuleDefinition(): RuleDefinition
Expand Down
5 changes: 3 additions & 2 deletions rules/CodeQuality/Rector/FuncCall/SetTypeToCastRector.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,9 @@ final class SetTypeToCastRector extends AbstractRector
'string' => String_::class,
];

public function __construct(private ArgsAnalyzer $argsAnalyzer)
{
public function __construct(
private ArgsAnalyzer $argsAnalyzer
) {
}

public function getRuleDefinition(): RuleDefinition
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public function refactor(Node $node): ?Node
return null;
}

if (! $node->args[0] instanceof Arg) {
if (! $node->args[0] instanceof Arg) {
return null;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,9 @@
*/
final class UnwrapSprintfOneArgumentRector extends AbstractRector
{
public function __construct(private ArgsAnalyzer $argsAnalyzer)
{
public function __construct(
private ArgsAnalyzer $argsAnalyzer
) {
}

public function getRuleDefinition(): RuleDefinition
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,9 @@
*/
final class SimplifyIfIssetToNullCoalescingRector extends AbstractRector
{
public function __construct(private ArgsAnalyzer $argsAnalyzer)
{
public function __construct(
private ArgsAnalyzer $argsAnalyzer
) {
}

public function getRuleDefinition(): RuleDefinition
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,9 +113,7 @@ public function refactor(Node $node): ?Node

/** @var Arg[] $args */
$args = $node->args;
if (! $this->isPhpVersionConstant($args[0]->value) && ! $this->isPhpVersionConstant(
$args[1]->value
)) {
if (! $this->isPhpVersionConstant($args[0]->value) && ! $this->isPhpVersionConstant($args[1]->value)) {
return null;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,11 @@ final class SetCookieOptionsArrayToArgumentsRector extends AbstractRector

private int $highestIndex = 1;

public function __construct(
private ArgsAnalyzer $argsAnalyzer
) {
}

public function getRuleDefinition(): RuleDefinition
{
return new RuleDefinition(
Expand All @@ -66,10 +71,6 @@ public function getRuleDefinition(): RuleDefinition
);
}

public function __construct(private ArgsAnalyzer $argsAnalyzer)
{
}

/**
* @return array<class-string<Node>>
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,10 @@ public function refactor(Node $node): ?FuncCall
$node->args[0] = new Arg(new String_('SHOW DATABASES'));
}

if ($this->isName($node, 'mysql_list_fields') && $node->args[0] instanceof Arg && $node->args[1] instanceof Arg) {
if ($this->isName(
$node,
'mysql_list_fields'
) && $node->args[0] instanceof Arg && $node->args[1] instanceof Arg) {
$node->name = new Name(self::MYSQLI_QUERY);
$node->args[0]->value = $this->joinStringWithNode('SHOW COLUMNS FROM', $node->args[1]->value);

Expand Down
7 changes: 4 additions & 3 deletions rules/Php56/Rector/FuncCall/PowToExpRector.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,9 @@
*/
final class PowToExpRector extends AbstractRector implements MinPhpVersionInterface
{
public function __construct(private ArgsAnalyzer $argsAnalyzer)
{
public function __construct(
private ArgsAnalyzer $argsAnalyzer
) {
}

public function getRuleDefinition(): RuleDefinition
Expand Down Expand Up @@ -62,7 +63,7 @@ public function refactor(Node $node): ?Node
/** @var Arg $secondArgument */
$secondArgument = $node->args[1];

return new Pow($firstArgument->value, $secondArgument->value);
return new Pow($firstArgument->value, $secondArgument->value);
}

public function provideMinPhpVersion(): int
Expand Down
34 changes: 19 additions & 15 deletions rules/Php70/Rector/FuncCall/EregToPregMatchRector.php
Original file line number Diff line number Diff line change
Expand Up @@ -70,20 +70,6 @@ public function getNodeTypes(): array
return [FuncCall::class];
}

private function shouldSkip(FuncCall $funcCall): bool
{
$functionName = $this->getName($funcCall);
if ($functionName === null) {
return true;
}

if (! isset(self::OLD_NAMES_TO_NEW_ONES[$functionName])) {
return true;
}

return ! $this->argsAnalyzer->isArgInstanceInArgsPosition($funcCall->args, 0);
}

/**
* @param FuncCall $node
*/
Expand All @@ -109,7 +95,11 @@ public function refactor(Node $node): ?Node
$node->name = new Name(self::OLD_NAMES_TO_NEW_ONES[$functionName]);

// ereg|eregi 3rd argument return value fix
if (in_array($functionName, ['ereg', 'eregi'], true) && isset($node->args[2]) && $node->args[2] instanceof Arg) {
if (in_array(
$functionName,
['ereg', 'eregi'],
true
) && isset($node->args[2]) && $node->args[2] instanceof Arg) {
$parentNode = $node->getAttribute(AttributeKey::PARENT_NODE);
if ($parentNode instanceof Assign) {
return $this->createTernaryWithStrlenOfFirstMatch($node);
Expand All @@ -119,6 +109,20 @@ public function refactor(Node $node): ?Node
return $node;
}

private function shouldSkip(FuncCall $funcCall): bool
{
$functionName = $this->getName($funcCall);
if ($functionName === null) {
return true;
}

if (! isset(self::OLD_NAMES_TO_NEW_ONES[$functionName])) {
return true;
}

return ! $this->argsAnalyzer->isArgInstanceInArgsPosition($funcCall->args, 0);
}

private function processStringPattern(FuncCall $funcCall, String_ $string, string $functionName): void
{
$pattern = $string->value;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,9 @@
*/
final class ExportToReflectionFunctionRector extends AbstractRector implements MinPhpVersionInterface
{
public function __construct(private ArgsAnalyzer $argsAnalyzer)
{
public function __construct(
private ArgsAnalyzer $argsAnalyzer
) {
}

public function provideMinPhpVersion(): int
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,10 @@ private function refactorMethodCall(MethodCall $methodCall): ?MethodCall
return null;
}

$expectedArgOrParamOrder = $this->resolveExpectedArgParamOrderIfDifferent($methodReflection, $methodCall->getArgs());
$expectedArgOrParamOrder = $this->resolveExpectedArgParamOrderIfDifferent(
$methodReflection,
$methodCall->getArgs()
);
if ($expectedArgOrParamOrder === null) {
return null;
}
Expand Down
5 changes: 3 additions & 2 deletions rules/Php80/ValueObjectFactory/StrStartsWithFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,9 @@

final class StrStartsWithFactory
{
public function __construct(private ArgsAnalyzer $argsAnalyzer)
{
public function __construct(
private ArgsAnalyzer $argsAnalyzer
) {
}

public function createFromFuncCall(FuncCall $funcCall, bool $isPositive): ?StrStartsWith
Expand Down

0 comments on commit 1d9803c

Please sign in to comment.