File tree Expand file tree Collapse file tree 2 files changed +53
-28
lines changed Expand file tree Collapse file tree 2 files changed +53
-28
lines changed Original file line number Diff line number Diff line change
1
+ <?php declare (strict_types = 1 );
2
+
3
+ namespace PHPStan \Rules \PHPUnit ;
4
+
5
+ use PhpParser \Node ;
6
+ use PHPStan \Analyser \Scope ;
7
+ use PHPStan \Type \ObjectType ;
8
+
9
+ class AssertRuleHelper
10
+ {
11
+
12
+ /**
13
+ * @param \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall $node
14
+ * @param \PHPStan\Analyser\Scope $scope
15
+ * @return bool
16
+ */
17
+ public static function isMethodOrStaticCallOnTestCase (Node $ node , Scope $ scope ): bool
18
+ {
19
+ $ testCaseType = new ObjectType (\PHPUnit \Framework \TestCase::class);
20
+ if ($ node instanceof Node \Expr \MethodCall) {
21
+ $ calledOnType = $ scope ->getType ($ node ->var );
22
+ } elseif ($ node instanceof Node \Expr \StaticCall) {
23
+ if ($ node ->class instanceof Node \Name) {
24
+ $ class = (string ) $ node ->class ;
25
+ if (in_array (
26
+ strtolower ($ class ),
27
+ [
28
+ 'self ' ,
29
+ 'static ' ,
30
+ 'parent ' ,
31
+ ],
32
+ true
33
+ )) {
34
+ $ calledOnType = new ObjectType ($ scope ->getClassReflection ()->getName ());
35
+ } else {
36
+ $ calledOnType = new ObjectType ($ class );
37
+ }
38
+ } else {
39
+ $ calledOnType = $ scope ->getType ($ node ->class );
40
+ }
41
+ } else {
42
+ return false ;
43
+ }
44
+
45
+ if (!$ testCaseType ->isSuperTypeOf ($ calledOnType )->yes ()) {
46
+ return false ;
47
+ }
48
+
49
+ return true ;
50
+ }
51
+
52
+ }
Original file line number Diff line number Diff line change 4
4
5
5
use PhpParser \Node ;
6
6
use PHPStan \Analyser \Scope ;
7
- use PHPStan \Type \ObjectType ;
8
7
9
8
class AssertSameDifferentTypesRule implements \PHPStan \Rules \Rule
10
9
{
@@ -21,33 +20,7 @@ public function getNodeType(): string
21
20
*/
22
21
public function processNode (Node $ node , Scope $ scope ): array
23
22
{
24
- $ testCaseType = new ObjectType (\PHPUnit \Framework \TestCase::class);
25
- if ($ node instanceof Node \Expr \MethodCall) {
26
- $ calledOnType = $ scope ->getType ($ node ->var );
27
- } elseif ($ node instanceof Node \Expr \StaticCall) {
28
- if ($ node ->class instanceof Node \Name) {
29
- $ class = (string ) $ node ->class ;
30
- if (in_array (
31
- strtolower ($ class ),
32
- [
33
- 'self ' ,
34
- 'static ' ,
35
- 'parent ' ,
36
- ],
37
- true
38
- )) {
39
- $ calledOnType = new ObjectType ($ scope ->getClassReflection ()->getName ());
40
- } else {
41
- $ calledOnType = new ObjectType ($ class );
42
- }
43
- } else {
44
- $ calledOnType = $ scope ->getType ($ node ->class );
45
- }
46
- } else {
47
- return [];
48
- }
49
-
50
- if (!$ testCaseType ->isSuperTypeOf ($ calledOnType )->yes ()) {
23
+ if (!AssertRuleHelper::isMethodOrStaticCallOnTestCase ($ node , $ scope )) {
51
24
return [];
52
25
}
53
26
You can’t perform that action at this time.
0 commit comments