/
ArgTypeInferer.php
45 lines (36 loc) · 1.09 KB
/
ArgTypeInferer.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
declare(strict_types=1);
namespace Psalm\Plugin;
use PhpParser;
use Psalm\Context;
use Psalm\Internal\Analyzer\Statements\ExpressionAnalyzer;
use Psalm\Internal\Analyzer\StatementsAnalyzer;
use Psalm\Type;
use Psalm\Type\Union;
final class ArgTypeInferer
{
private Context $context;
private StatementsAnalyzer $statements_analyzer;
/**
* @internal
*/
public function __construct(Context $context, StatementsAnalyzer $statements_analyzer)
{
$this->context = $context;
$this->statements_analyzer = $statements_analyzer;
}
/**
* @return false|Union
*/
public function infer(PhpParser\Node\Arg $arg)
{
$already_inferred_type = $this->statements_analyzer->node_data->getType($arg->value);
if ($already_inferred_type) {
return $already_inferred_type;
}
if (ExpressionAnalyzer::analyze($this->statements_analyzer, $arg->value, $this->context) === false) {
return false;
}
return $this->statements_analyzer->node_data->getType($arg->value) ?? Type::getMixed();
}
}