Skip to content

Commit

Permalink
Merge pull request #14 from worksome/feature/rector-0.12.22
Browse files Browse the repository at this point in the history
feat: update to use RectorConfig class
  • Loading branch information
owenvoke authored May 3, 2022
2 parents a19ab26 + c2ee446 commit 3f9a979
Show file tree
Hide file tree
Showing 12 changed files with 71 additions and 67 deletions.
11 changes: 10 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@
"friendsofphp/php-cs-fixer": "^3.8",
"jetbrains/phpstorm-attributes": "^1.0",
"nunomaduro/larastan": "^1.0 || ^2.0",
"phpstan/phpstan": "^1.6.2",
"phpstan/phpstan-mockery": "^1.0",
"rector/rector": "^0.12.0",
"rector/rector": "^0.12.23",
"worksome/code-sniffer": "^0.8.0"
},
"require-dev": {
Expand Down Expand Up @@ -45,5 +46,13 @@
"pestphp/pest-plugin": true
},
"sort-packages": true
},
"scripts": {
"test:phpstan": "pest --testsuite phpstan",
"test:rector": "pest --testsuite rector",
"test": [
"@test:phpstan",
"@test:rector"
]
}
}
1 change: 1 addition & 0 deletions larastan.neon
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
includes:
- ./phpstan.neon
- ./phpstan-rich-parser.neon
- ../../nunomaduro/larastan/extension.neon

parameters:
Expand Down
3 changes: 3 additions & 0 deletions phpstan-rich-parser.neon
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
conditionalTags:
PhpParser\NodeVisitor\NodeConnectingVisitor:
phpstan.parser.richParserNodeVisitor: true
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use PhpParser\Node\Expr\MethodCall;
use PHPStan\Analyser\Scope;
use PHPStan\Rules\Rule;
use Rector\NodeTypeResolver\Node\AttributeKey;

/**
* @implements Rule<Node\Expr\MethodCall>
Expand Down Expand Up @@ -49,14 +50,14 @@ private function isCalledInRouteGroupClosure(Node\Expr\CallLike $node, Scope $sc
return false;
}

$parent = $node->getAttribute('parent');
$parent = $node->getAttribute(AttributeKey::PARENT_NODE);

while ($parent !== null) {
if ($parent instanceof Node\Expr\StaticCall) {
return $parent->class->toString() === Route::class;
}

$parent = $parent->getAttribute('parent');
$parent = $parent->getAttribute(AttributeKey::PARENT_NODE);
}

return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use PhpParser\Node;
use PHPStan\Rules\RuleError;
use PHPStan\Rules\RuleErrorBuilder;
use Rector\NodeTypeResolver\Node\AttributeKey;

final class PartialRouteResourceInspector
{
Expand Down Expand Up @@ -47,14 +48,14 @@ public function isApplicable(Node $node): bool

public function inspect(Node $node): array
{
$next = $node->getAttribute('next');
$next = $node->getAttribute(AttributeKey::NEXT_NODE);

while ($next !== null) {
if (in_array($next->name, $this->partialMethods)) {
return [$this->errorFor($next->name)];
}

$next = $next->getAttribute('parent')->getAttribute('next');
$next = $next->getAttribute(AttributeKey::PARENT_NODE)->getAttribute(AttributeKey::NEXT_NODE);
}

return [];
Expand Down
5 changes: 3 additions & 2 deletions src/Rector/Generic/DisallowedAttributesRector.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ class DisallowedAttributesRector extends AbstractRector implements ConfigurableR
public function getRuleDefinition(): RuleDefinition
{
return new RuleDefinition(
'Remove attributes which are not allowed.', [
'Remove attributes which are not allowed.',
[
new CodeSample(
<<<PHP
#[NotAllowed]
Expand Down Expand Up @@ -52,6 +53,6 @@ public function refactor(Node $node)
}
}
return false;
})->whenEmpty(fn() => $this->removeNode($node));
})->whenEmpty(fn () => $this->removeNode($node));
}
}
10 changes: 4 additions & 6 deletions src/Rector/config/sets/generic-code-quality.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,12 @@

declare(strict_types=1);

use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Rector\Config\RectorConfig;
use Worksome\CodingStyle\Rector\Generic\DisallowedAttributesRector;

return static function (ContainerConfigurator $containerConfigurator): void {
$services = $containerConfigurator->services();

$services->set(DisallowedAttributesRector::class)
->configure([
return static function (RectorConfig $rectorConfig): void {
$rectorConfig
->ruleWithConfiguration(DisallowedAttributesRector::class, [
JetBrains\PhpStorm\Pure::class,
]);
};
7 changes: 3 additions & 4 deletions src/Rector/config/sets/laravel-code-quality.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@

declare(strict_types=1);

use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Rector\Config\RectorConfig;

return static function (ContainerConfigurator $containerConfigurator): void {
$services = $containerConfigurator->services();
};
return static function (RectorConfig $rectorConfig): void {
};
51 changes: 23 additions & 28 deletions src/WorksomeRectorConfig.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,62 +2,57 @@

namespace Worksome\CodingStyle;

use Rector\Core\Configuration\Option;
use Rector\Config\RectorConfig;
use Rector\DeadCode\Rector\ClassMethod\RemoveDeadConstructorRector;
use Rector\DeadCode\Rector\ClassMethod\RemoveDelegatingParentCallRector;
use Rector\DeadCode\Rector\ClassMethod\RemoveUselessParamTagRector;
use Rector\DeadCode\Rector\ClassMethod\RemoveUselessReturnTagRector;
use Rector\DeadCode\Rector\Node\RemoveNonExistingVarAnnotationRector;
use Rector\DeadCode\Rector\Stmt\RemoveUnreachableStatementRector;
use Rector\Php80\Rector\Catch_\RemoveUnusedVariableInCatchRector;
use Rector\Php80\Rector\Class_\ClassPropertyAssignToConstructorPromotionRector;
use Rector\Php80\Rector\FuncCall\ClassOnObjectRector;
use Rector\Php80\Rector\Identical\StrEndsWithRector;
use Rector\Php80\Rector\Identical\StrStartsWithRector;
use Rector\Php80\Rector\NotIdentical\StrContainsRector;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Worksome\CodingStyle\Rector\WorksomeSetList;

class WorksomeRectorConfig
{
public static function setup(ContainerConfigurator $containerConfigurator)
public static function setup(RectorConfig $rectorConfig): void
{
// get parameters
$parameters = $containerConfigurator->parameters();

$parameters->set(Option::BOOTSTRAP_FILES, [
$rectorConfig->bootstrapFiles([
getcwd() . '/vendor/nunomaduro/larastan/bootstrap.php',
]);

$parameters->set(Option::PHPSTAN_FOR_RECTOR_PATH, getcwd() . '/phpstan.neon');
$rectorConfig->phpstanConfig(getcwd() . '/phpstan.neon');

// Define what rule sets will be applied
// SetList::DEAD_CODE,
// SetList::PHP_80,

$containerConfigurator->import(WorksomeSetList::LARAVEL_CODE_QUALITY);
$containerConfigurator->import(WorksomeSetList::GENERIC_CODE_QUALITY);

// get services (needed for register a single rule)
$services = $containerConfigurator->services();
$rectorConfig->import(WorksomeSetList::LARAVEL_CODE_QUALITY);
$rectorConfig->import(WorksomeSetList::GENERIC_CODE_QUALITY);

// register a single rule
$services->set(ClassOnObjectRector::class);
$services->set(StrContainsRector::class);
$services->set(StrStartsWithRector::class);
$services->set(StrEndsWithRector::class);
$services->set(RemoveUnusedVariableInCatchRector::class);
// Register a single rule
$rectorConfig->rule(ClassOnObjectRector::class);
$rectorConfig->rule(StrContainsRector::class);
$rectorConfig->rule(StrStartsWithRector::class);
$rectorConfig->rule(StrEndsWithRector::class);
$rectorConfig->rule(RemoveUnusedVariableInCatchRector::class);

// DEAD CODE set rules
$services->set(\Rector\DeadCode\Rector\FunctionLike\RemoveCodeAfterReturnRector::class);
$services->set(\Rector\DeadCode\Rector\ClassMethod\RemoveDeadConstructorRector::class);
$services->set(RemoveDelegatingParentCallRector::class);
$services->set(RemoveUselessParamTagRector::class);
$services->set(RemoveUselessReturnTagRector::class);
$services->set(RemoveNonExistingVarAnnotationRector::class);
$rectorConfig->rule(RemoveUnreachableStatementRector::class);
$rectorConfig->rule(RemoveDeadConstructorRector::class);
$rectorConfig->rule(RemoveDelegatingParentCallRector::class);
$rectorConfig->rule(RemoveUselessParamTagRector::class);
$rectorConfig->rule(RemoveUselessReturnTagRector::class);
$rectorConfig->rule(RemoveNonExistingVarAnnotationRector::class);

// PHP 80 set rules
$services->set(ClassPropertyAssignToConstructorPromotionRector::class);
// PHP 8.0 set rules
$rectorConfig->rule(ClassPropertyAssignToConstructorPromotionRector::class);

// Naming set rules
// $services->set(\Rector\Naming\Rector\Property\UnderscoreToCamelCasePropertyNameRector::class);
// $rectorConfig->rule(\Rector\Naming\Rector\Property\UnderscoreToCamelCasePropertyNameRector::class);
}
}
23 changes: 7 additions & 16 deletions stubs/rector.php.stub
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,22 @@

declare(strict_types=1);

use Rector\Core\Configuration\Option;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Rector\Config\RectorConfig;
use Worksome\CodingStyle\WorksomeRectorConfig;

return static function (ContainerConfigurator $containerConfigurator): void {
WorksomeRectorConfig::setup($containerConfigurator);
return static function (RectorConfig $rectorConfig): void {
WorksomeRectorConfig::setup($rectorConfig);

// get parameters
$parameters = $containerConfigurator->parameters();

$parameters->set(Option::PATHS, [
$rectorConfig->paths([
__DIR__ . '/app',
__DIR__ . '/tests',
]);

$parameters->set(Option::ENABLE_CACHE, true);

// Define extra rule sets to be applied
$parameters->set(Option::SETS, [
$rectorConfig->sets([
// SetList::DEAD_CODE,
]);

// get services (needed for register a single rule)
$services = $containerConfigurator->services();

// register extra a single rules
// $services->set(ClassOnObjectRector::class);
// Register extra a single rules
// $rectorConfig->rule(ClassOnObjectRector::class);
};
7 changes: 7 additions & 0 deletions tests/PHPStan/BaseRuleTestCase.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,11 @@ protected function getRule(): Rule
{
return $this->rule;
}

public static function getAdditionalConfigFiles() : array
{
return array_merge(parent::getAdditionalConfigFiles(), [
__DIR__ . '/../../phpstan-rich-parser.neon',
]);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,12 @@

declare(strict_types=1);

use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Rector\Config\RectorConfig;
use Worksome\CodingStyle\Rector\Generic\DisallowedAttributesRector;

return static function (ContainerConfigurator $containerConfigurator): void {
$services = $containerConfigurator->services();

$services->set(DisallowedAttributesRector::class)
->configure([
return static function (RectorConfig $rectorConfig): void {
$rectorConfig
->ruleWithConfiguration(DisallowedAttributesRector::class, [
JetBrains\PhpStorm\Pure::class,
]);
};

0 comments on commit 3f9a979

Please sign in to comment.