mirror of
https://github.com/danog/psalm.git
synced 2025-01-22 05:41:20 +01:00
Fix mixed operand issues
This commit is contained in:
parent
c51d8f5220
commit
1007d1682c
@ -30,6 +30,12 @@
|
|||||||
</excludeFiles>
|
</excludeFiles>
|
||||||
</MixedArgument>
|
</MixedArgument>
|
||||||
|
|
||||||
|
<MixedOperand>
|
||||||
|
<excludeFiles>
|
||||||
|
<directory name="tests" />
|
||||||
|
</excludeFiles>
|
||||||
|
</MixedOperand>
|
||||||
|
|
||||||
<MixedPropertyFetch>
|
<MixedPropertyFetch>
|
||||||
<excludeFiles>
|
<excludeFiles>
|
||||||
<directory name="tests" />
|
<directory name="tests" />
|
||||||
|
@ -1166,8 +1166,8 @@ abstract class ClassLikeChecker extends SourceChecker implements StatementsSourc
|
|||||||
|
|
||||||
if ($reflection_method->class !== $class_name) {
|
if ($reflection_method->class !== $class_name) {
|
||||||
MethodChecker::setDeclaringMethodId(
|
MethodChecker::setDeclaringMethodId(
|
||||||
$class_name . '::' . strtolower((string)$reflection_method->name),
|
$class_name . '::' . strtolower($reflection_method->name),
|
||||||
$reflection_method->class . '::' . strtolower((string)$reflection_method->name)
|
$reflection_method->class . '::' . strtolower($reflection_method->name)
|
||||||
);
|
);
|
||||||
|
|
||||||
self::$public_class_methods[$class_name][strtolower((string)$reflection_method->name)] = true;
|
self::$public_class_methods[$class_name][strtolower((string)$reflection_method->name)] = true;
|
||||||
@ -1388,7 +1388,7 @@ abstract class ClassLikeChecker extends SourceChecker implements StatementsSourc
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $method_name
|
* @param string $method_name
|
||||||
* @return mixed
|
* @return string
|
||||||
*/
|
*/
|
||||||
protected function getMappedMethodName($method_name)
|
protected function getMappedMethodName($method_name)
|
||||||
{
|
{
|
||||||
|
@ -26,7 +26,7 @@ class MethodChecker extends FunctionLikeChecker
|
|||||||
protected static $method_files = [];
|
protected static $method_files = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var array<string,array<\Psalm\FunctionLikeParameter>>
|
* @var array<string,array<int, \Psalm\FunctionLikeParameter>>
|
||||||
*/
|
*/
|
||||||
protected static $method_params = [];
|
protected static $method_params = [];
|
||||||
|
|
||||||
@ -117,7 +117,7 @@ class MethodChecker extends FunctionLikeChecker
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $method_id
|
* @param string $method_id
|
||||||
* @return array<\Psalm\FunctionLikeParameter>|null
|
* @return array<int, \Psalm\FunctionLikeParameter>|null
|
||||||
*/
|
*/
|
||||||
public static function getMethodParams($method_id)
|
public static function getMethodParams($method_id)
|
||||||
{
|
{
|
||||||
|
@ -160,6 +160,7 @@ class Config
|
|||||||
* @psalm-suppress MixedPropertyFetch
|
* @psalm-suppress MixedPropertyFetch
|
||||||
* @psalm-suppress MixedMethodCall
|
* @psalm-suppress MixedMethodCall
|
||||||
* @psalm-suppress MixedAssignment
|
* @psalm-suppress MixedAssignment
|
||||||
|
* @psalm-suppress MixedOperand
|
||||||
*/
|
*/
|
||||||
public static function loadFromXML($file_name)
|
public static function loadFromXML($file_name)
|
||||||
{
|
{
|
||||||
@ -329,6 +330,7 @@ class Config
|
|||||||
* @throws ConfigException If a Config file could not be found.
|
* @throws ConfigException If a Config file could not be found.
|
||||||
* @psalm-suppress MixedArrayAccess
|
* @psalm-suppress MixedArrayAccess
|
||||||
* @psalm-suppress MixedAssignment
|
* @psalm-suppress MixedAssignment
|
||||||
|
* @psalm-suppress MixedOperand
|
||||||
*/
|
*/
|
||||||
protected function loadFileExtensions($extensions)
|
protected function loadFileExtensions($extensions)
|
||||||
{
|
{
|
||||||
@ -337,7 +339,7 @@ class Config
|
|||||||
$this->file_extensions[] = $extension_name;
|
$this->file_extensions[] = $extension_name;
|
||||||
|
|
||||||
if (isset($extension['filetypeHandler'])) {
|
if (isset($extension['filetypeHandler'])) {
|
||||||
$path = $this->base_dir . $extension['filetypeHandler'];
|
$path = $this->base_dir . (string)$extension['filetypeHandler'];
|
||||||
|
|
||||||
if (!file_exists($path)) {
|
if (!file_exists($path)) {
|
||||||
throw new Exception\ConfigException('Error parsing config: cannot find file ' . $path);
|
throw new Exception\ConfigException('Error parsing config: cannot find file ' . $path);
|
||||||
|
@ -178,7 +178,7 @@ class IssueBuffer
|
|||||||
Checker\FileChecker::updateReferenceCache();
|
Checker\FileChecker::updateReferenceCache();
|
||||||
|
|
||||||
if ($debug) {
|
if ($debug) {
|
||||||
echo('Checks took ' . (microtime(true) - self::$start_time));
|
echo('Checks took ' . ((float)microtime(true) - self::$start_time));
|
||||||
echo(' and used ' . memory_get_peak_usage() . PHP_EOL);
|
echo(' and used ' . memory_get_peak_usage() . PHP_EOL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -384,6 +384,16 @@ return [
|
|||||||
'file' => 'string',
|
'file' => 'string',
|
||||||
'line' => 'int'
|
'line' => 'int'
|
||||||
],
|
],
|
||||||
|
'reflectionclass' => [
|
||||||
|
'name' => 'string'
|
||||||
|
],
|
||||||
|
'reflectionmethod' => [
|
||||||
|
'class' => 'string',
|
||||||
|
'name' => 'string'
|
||||||
|
],
|
||||||
|
'reflectionparameter' => [
|
||||||
|
'name' => 'string'
|
||||||
|
],
|
||||||
'phpparser\\node\\expr' => [
|
'phpparser\\node\\expr' => [
|
||||||
'inferredType' => 'Psalm\\Type\\Union|null'
|
'inferredType' => 'Psalm\\Type\\Union|null'
|
||||||
],
|
],
|
||||||
|
@ -37,6 +37,8 @@ class ObjectLike extends Atomic
|
|||||||
', ',
|
', ',
|
||||||
array_map(
|
array_map(
|
||||||
/**
|
/**
|
||||||
|
* @param string $name
|
||||||
|
* @param string $type
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function ($name, $type) {
|
function ($name, $type) {
|
||||||
@ -67,6 +69,8 @@ class ObjectLike extends Atomic
|
|||||||
', ',
|
', ',
|
||||||
array_map(
|
array_map(
|
||||||
/**
|
/**
|
||||||
|
* @param string $name
|
||||||
|
* @param Union $type
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function ($name, Union $type) use ($aliased_classes, $this_class, $use_phpdoc_format) {
|
function ($name, Union $type) use ($aliased_classes, $this_class, $use_phpdoc_format) {
|
||||||
|
@ -383,4 +383,20 @@ class PropertyTypeTest extends PHPUnit_Framework_TestCase
|
|||||||
$context = new Context('somefile.php');
|
$context = new Context('somefile.php');
|
||||||
$file_checker->check(true, true, $context);
|
$file_checker->check(true, true, $context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testReflectionProperties()
|
||||||
|
{
|
||||||
|
$stmts = self::$parser->parse('<?php
|
||||||
|
class Foo {
|
||||||
|
}
|
||||||
|
|
||||||
|
$a = new \ReflectionMethod("Foo", "__construct");
|
||||||
|
|
||||||
|
echo $a->name . " - " . $a->class;
|
||||||
|
');
|
||||||
|
|
||||||
|
$file_checker = new FileChecker('somefile.php', $stmts);
|
||||||
|
$context = new Context('somefile.php');
|
||||||
|
$file_checker->check(true, true, $context);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user