mirror of
https://github.com/danog/psalm.git
synced 2024-11-30 04:39:00 +01:00
Add support for literal templated defaults
This commit is contained in:
parent
94b1161a80
commit
85f0fa6e7d
@ -1135,6 +1135,27 @@ class CallAnalyzer
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if ($param->is_optional
|
||||
&& $param->type
|
||||
&& $param->default_type
|
||||
&& !$param->is_variadic
|
||||
&& $template_types
|
||||
) {
|
||||
if ($generic_params === null) {
|
||||
$generic_params = [];
|
||||
}
|
||||
|
||||
$param_type = clone $param->type;
|
||||
|
||||
$param_type->replaceTemplateTypesWithStandins(
|
||||
$template_types,
|
||||
$generic_params,
|
||||
$codebase,
|
||||
clone $param->default_type,
|
||||
true
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1711,7 +1711,7 @@ class TemplateTest extends TestCase
|
||||
*/
|
||||
function bar(Foo $a) : void {}'
|
||||
],
|
||||
'SKIPPED-templateDefault' => [
|
||||
'templateDefaultSimpleString' => [
|
||||
'<?php
|
||||
/**
|
||||
* @template T as string
|
||||
@ -1728,15 +1728,61 @@ class TemplateTest extends TestCase
|
||||
}
|
||||
}
|
||||
|
||||
$a = new C("hello");
|
||||
$b = new C("goodbye");
|
||||
$c = new C();',
|
||||
'assertions' => [
|
||||
'$a===' => 'C<string(hello)>',
|
||||
'$b===' => 'C<string(goodbye)>',
|
||||
'$c===' => 'C<string(hello)>',
|
||||
],
|
||||
],
|
||||
'SKIPPED-templateDefaultConstant' => [
|
||||
'<?php
|
||||
const FOO = "bar";
|
||||
|
||||
/**
|
||||
* @template T as string
|
||||
*/
|
||||
class E {
|
||||
/** @var T */
|
||||
public $t;
|
||||
|
||||
/**
|
||||
* @param T $t
|
||||
*/
|
||||
function __construct(string $t = FOO) {
|
||||
$this->t = $t;
|
||||
}
|
||||
}
|
||||
|
||||
$e = new E();',
|
||||
'assertions' => [
|
||||
'$e===' => 'E<string(bar)>',
|
||||
],
|
||||
],
|
||||
'SKIPPED-templateDefaultClassConstant' => [
|
||||
'<?php
|
||||
class D {
|
||||
const FOO = "bar";
|
||||
}
|
||||
|
||||
/**
|
||||
* @template T as string
|
||||
*/
|
||||
class E {
|
||||
/** @var T */
|
||||
public $t;
|
||||
|
||||
/**
|
||||
* @param T $t
|
||||
*/
|
||||
function __construct(string $t = D::FOO) {
|
||||
$this->t = $t;
|
||||
}
|
||||
}
|
||||
|
||||
$e = new E();',
|
||||
'assertions' => [
|
||||
'$e===' => 'E<string(bar)>',
|
||||
],
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user