Skip to content

Commit 6b33ea1

Browse files
Fix return value type inference of FuncCall on FuncCall
1 parent 83f1509 commit 6b33ea1

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

src/Analyser/MutatingScope.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2347,7 +2347,11 @@ static function (Node $node, Scope $scope) use ($arrowScope, &$arrowFunctionImpu
23472347
/** @var non-empty-string $name */
23482348
$name = $node->name->value;
23492349
$functionName = new Name($name);
2350-
} elseif ($node->name instanceof FuncCall && $node->name->name instanceof Name) {
2350+
} elseif (
2351+
$node->name instanceof FuncCall
2352+
&& $node->name->name instanceof Name
2353+
&& $node->name->isFirstClassCallable()
2354+
) {
23512355
$functionName = $node->name->name;
23522356
}
23532357

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
namespace Bug13296;
4+
5+
use function PHPStan\Testing\assertType;
6+
7+
class Foo
8+
{
9+
/**
10+
* @param non-empty-array<Bar> $a
11+
* @param non-empty-array<int> $b
12+
*/
13+
public function test($a, $b)
14+
{
15+
assertType('string', current($a)($b));
16+
}
17+
}
18+
19+
class Bar
20+
{
21+
/** @return string */
22+
public function __invoke($b)
23+
{
24+
return '';
25+
}
26+
}

0 commit comments

Comments
 (0)