Skip to content

Commit fd5336f

Browse files
simPodkukulich
authored andcommitted
fix(RequireExplicitAssertion): do not throw away static type
1 parent 05ec182 commit fd5336f

File tree

4 files changed

+30
-13
lines changed

4 files changed

+30
-13
lines changed

SlevomatCodingStandard/Sniffs/PHP/RequireExplicitAssertionSniff.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,10 @@ private function createConditions(string $variableName, TypeNode $typeNode): arr
329329
return [sprintf('%s instanceof %s', $variableName, $typeNode->name)];
330330
}
331331

332+
if ($typeNode->name === 'static') {
333+
return [sprintf('%s instanceof static', $variableName)];
334+
}
335+
332336
if (TypeHintHelper::isSimpleTypeHint($typeNode->name)) {
333337
return [sprintf('\is_%s(%s)', $typeNode->name, $variableName)];
334338
}

tests/Sniffs/PHP/RequireExplicitAssertionSniffTest.php

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public function testErrors(): void
1717
{
1818
$report = self::checkFile(__DIR__ . '/data/requireExplicitAssertionErrors.php');
1919

20-
self::assertSame(28, $report->getErrorCount());
20+
self::assertSame(29, $report->getErrorCount());
2121

2222
self::assertSniffError($report, 3, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
2323
self::assertSniffError($report, 6, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
@@ -27,26 +27,27 @@ public function testErrors(): void
2727
self::assertSniffError($report, 23, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
2828
self::assertSniffError($report, 26, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
2929
self::assertSniffError($report, 32, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
30-
self::assertSniffError($report, 35, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
3130
self::assertSniffError($report, 38, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
3231
self::assertSniffError($report, 41, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
3332
self::assertSniffError($report, 44, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
3433
self::assertSniffError($report, 47, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
35-
self::assertSniffError($report, 51, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
36-
self::assertSniffError($report, 56, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
34+
self::assertSniffError($report, 50, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
35+
self::assertSniffError($report, 53, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
3736
self::assertSniffError($report, 57, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
3837
self::assertSniffError($report, 62, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
39-
self::assertSniffError($report, 66, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
40-
self::assertSniffError($report, 67, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
41-
self::assertSniffError($report, 74, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
42-
self::assertSniffError($report, 78, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
43-
self::assertSniffError($report, 82, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
38+
self::assertSniffError($report, 63, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
39+
self::assertSniffError($report, 68, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
40+
self::assertSniffError($report, 72, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
41+
self::assertSniffError($report, 73, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
42+
self::assertSniffError($report, 80, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
43+
self::assertSniffError($report, 84, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
4444
self::assertSniffError($report, 88, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
45-
self::assertSniffError($report, 89, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
46-
self::assertSniffError($report, 96, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
47-
self::assertSniffError($report, 97, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
45+
self::assertSniffError($report, 94, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
46+
self::assertSniffError($report, 95, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
4847
self::assertSniffError($report, 102, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
49-
self::assertSniffError($report, 109, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
48+
self::assertSniffError($report, 103, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
49+
self::assertSniffError($report, 108, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
50+
self::assertSniffError($report, 115, RequireExplicitAssertionSniff::CODE_REQUIRED_EXPLICIT_ASSERTION);
5051

5152
self::assertAllFixedInFile($report);
5253
}

tests/Sniffs/PHP/data/requireExplicitAssertionErrors.fixed.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ public function __construct()
2727
\assert($g instanceof self);
2828
}
2929

30+
public function foo()
31+
{
32+
$x = call();
33+
\assert($x instanceof static || $x === null);
34+
}
35+
3036
}
3137

3238
$h = fopen('file.txt', 'r');

tests/Sniffs/PHP/data/requireExplicitAssertionErrors.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ public function __construct()
2727
$g = $this;
2828
}
2929

30+
public function foo()
31+
{
32+
/** @var static|null $x */
33+
$x = call();
34+
}
35+
3036
}
3137

3238
/** @var resource $h */

0 commit comments

Comments
 (0)