1
0
mirror of https://github.com/danog/psalm.git synced 2025-01-22 05:41:20 +01:00

Fix #26 - Allow refinement via type intersection

Not just via explict subsets
This commit is contained in:
Matt Brown 2016-12-16 17:59:27 -05:00
parent dcec735d11
commit 16e89a8c1c
2 changed files with 18 additions and 1 deletions

View File

@ -1253,7 +1253,9 @@ class TypeChecker
return $new_type; return $new_type;
} }
if (!TypeChecker::isContainedBy($new_type, $existing_var_type) && $code_location) { if (!TypeChecker::isContainedBy($new_type, $existing_var_type) &&
!TypeChecker::isContainedBy($existing_var_type, $new_type) &&
$code_location) {
if (IssueBuffer::accepts( if (IssueBuffer::accepts(
new TypeDoesNotContainType( new TypeDoesNotContainType(
'Cannot resolve types for ' . $key . ' - ' . $existing_var_type . ' does not contain ' . $new_type, 'Cannot resolve types for ' . $key . ' - ' . $existing_var_type . ' does not contain ' . $new_type,

View File

@ -1660,4 +1660,19 @@ class TypeTest extends PHPUnit_Framework_TestCase
$context = new Context('somefile.php'); $context = new Context('somefile.php');
$file_checker->check(); $file_checker->check();
} }
public function testTypeRefinementWithIsNumeric()
{
$stmts = self::$parser->parse('<?php
function foo(string $a) : void {
if (is_numeric($a)) {
}
}
');
$file_checker = new FileChecker('somefile.php', $stmts);
$context = new Context('somefile.php');
$file_checker->check();
}
} }