Skip to content

Commit fcc14fc

Browse files
committed
Possibly a simpler reproducer for #323
1 parent 1d61d45 commit fcc14fc

File tree

3 files changed

+102
-0
lines changed

3 files changed

+102
-0
lines changed

src/Usages/Reproducer2Usages.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
declare(strict_types = 1);
3+
4+
namespace Spaze\PHPStan\Rules\Disallowed\Usages;
5+
6+
use PhpParser\Node;
7+
use PhpParser\Node\Name\FullyQualified;
8+
use PHPStan\Analyser\Scope;
9+
use PHPStan\Rules\Rule;
10+
use PHPStan\Rules\RuleError;
11+
use PHPStan\Rules\RuleErrorBuilder;
12+
13+
/**
14+
* @implements Rule<Node>
15+
*/
16+
class Reproducer2Usages implements Rule
17+
{
18+
19+
public function getNodeType(): string
20+
{
21+
return FullyQualified::class;
22+
}
23+
24+
25+
/**
26+
* @param FullyQualified $node
27+
* @param Scope $scope
28+
* @return list<RuleError>
29+
*/
30+
public function processNode(Node $node, Scope $scope): array
31+
{
32+
return [
33+
RuleErrorBuilder::message(sprintf('class %s found in method %s', $node->toString(), $scope->getFunction()?->getName() ?? 'null'))->build(),
34+
];
35+
}
36+
37+
}

tests/Usages/Reproducer2Test.php

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
declare(strict_types = 1);
3+
4+
namespace Spaze\PHPStan\Rules\Disallowed\Usages;
5+
6+
use PHPStan\Rules\Rule;
7+
use PHPStan\Testing\RuleTestCase;
8+
9+
class Reproducer2Test extends RuleTestCase
10+
{
11+
12+
protected function shouldNarrowMethodScopeFromConstructor(): bool
13+
{
14+
return true;
15+
}
16+
17+
18+
protected function getRule(): Rule
19+
{
20+
return new Reproducer2Usages();
21+
}
22+
23+
24+
public function testRule(): void
25+
{
26+
$this->analyse([__DIR__ . '/../src/Reproducer2Class.php'], [
27+
[
28+
'class DateTime found in method null',
29+
12,
30+
],
31+
[
32+
'class Baz\Waldo found in method null',
33+
16,
34+
],
35+
]);
36+
}
37+
38+
39+
public static function getAdditionalConfigFiles(): array
40+
{
41+
return [
42+
__DIR__ . '/../../extension.neon',
43+
];
44+
}
45+
46+
}

tests/src/Reproducer2Class.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
declare(strict_types = 1);
3+
4+
namespace Reproducer2;
5+
6+
class Reproducer2Class
7+
{
8+
public function __construct()
9+
{
10+
}
11+
12+
public function foo(\DateTime $d): void
13+
{
14+
}
15+
16+
public function bar(\Baz\Waldo $d): void
17+
{
18+
}
19+
}

0 commit comments

Comments
 (0)