Skip to content

Commit 04ef7e0

Browse files
committed
[symfony] kick of require is granted rule
1 parent a920b42 commit 04ef7e0

File tree

6 files changed

+47
-5
lines changed

6 files changed

+47
-5
lines changed

config/symfony-rules.neon

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,6 @@ rules:
2323
- Symplify\PHPStanRules\Rules\Symfony\SingleRequiredMethodRule
2424
- Symplify\PHPStanRules\Rules\Symfony\RequiredOnlyInAbstractRule
2525
- Symplify\PHPStanRules\Rules\Symfony\NoConstructorAndRequiredTogetherRule
26+
27+
# attributes
28+
- Symplify\PHPStanRules\Rules\Symfony\RequireIsGrantedEnumRule

src/Rules/Doctrine/NoDocumentMockingRule.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
use PhpParser\Node;
88
use PhpParser\Node\Expr\MethodCall;
9-
use PhpParser\Node\Identifier;
109
use PHPStan\Analyser\Scope;
1110
use PHPStan\Rules\Rule;
1211
use PHPStan\Rules\RuleErrorBuilder;

src/Rules/Doctrine/NoGetRepositoryOnServiceRepositoryEntityRule.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
use Nette\Utils\Strings;
88
use PhpParser\Node;
99
use PhpParser\Node\Expr\MethodCall;
10-
use PhpParser\Node\Identifier;
1110
use PHPStan\Analyser\Scope;
1211
use PHPStan\Reflection\ClassReflection;
1312
use PHPStan\Reflection\ReflectionProvider;

src/Rules/Symfony/NoFindTaggedServiceIdsCallRule.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
use PhpParser\Node;
88
use PhpParser\Node\Expr\MethodCall;
9-
use PhpParser\Node\Identifier;
109
use PHPStan\Analyser\Scope;
1110
use PHPStan\Rules\IdentifierRuleError;
1211
use PHPStan\Rules\Rule;
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Symplify\PHPStanRules\Rules\Symfony;
6+
7+
use PhpParser\Node;
8+
use PhpParser\Node\Attribute;
9+
use PhpParser\Node\Scalar\String_;
10+
use PHPStan\Analyser\Scope;
11+
use PHPStan\Rules\Rule;
12+
use PHPStan\Rules\RuleErrorBuilder;
13+
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
14+
15+
final class RequireIsGrantedEnumRule implements Rule
16+
{
17+
public function getNodeType(): string
18+
{
19+
return Attribute::class;
20+
}
21+
22+
/**
23+
* @param Attribute $node
24+
*/
25+
public function processNode(Node $node, Scope $scope): array
26+
{
27+
if ($node->name->toString() !== IsGranted::class) {
28+
return [];
29+
}
30+
31+
$isGrantedExpr = $node->args[0]->value;
32+
if (! $isGrantedExpr instanceof String_) {
33+
return [];
34+
}
35+
36+
return [
37+
RuleErrorBuilder::message(
38+
sprintf('Instead of "%s" string, use enum constant for #[IsGranted]', $isGrantedExpr->value)
39+
)
40+
->identifier('symfony.requiredIsGrantedEnum')
41+
->build(),
42+
];
43+
}
44+
}

src/TypeAnalyzer/CallableTypeAnalyzer.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66

77
use PhpParser\Node\Expr;
88
use PHPStan\Analyser\Scope;
9-
use PHPStan\Type\CallableType;
10-
use PHPStan\Type\ClosureType;
119
use PHPStan\Type\ObjectType;
1210
use PHPStan\Type\Type;
1311
use PHPStan\Type\TypeCombinator;

0 commit comments

Comments
 (0)