Skip to content

Commit 7430930

Browse files
committed
Fix scope namespace when entering trait
1 parent 838e98e commit 7430930

File tree

3 files changed

+44
-1
lines changed

3 files changed

+44
-1
lines changed

src/Analyser/MutatingScope.php

+10-1
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,11 @@
116116
use function array_keys;
117117
use function array_map;
118118
use function array_pop;
119+
use function array_slice;
119120
use function count;
121+
use function explode;
120122
use function get_class;
123+
use function implode;
121124
use function in_array;
122125
use function is_string;
123126
use function ltrim;
@@ -2486,12 +2489,18 @@ public function enterClass(ClassReflection $classReflection): self
24862489

24872490
public function enterTrait(ClassReflection $traitReflection): self
24882491
{
2492+
$namespace = null;
2493+
$traitName = $traitReflection->getName();
2494+
$traitNameParts = explode('\\', $traitName);
2495+
if (count($traitNameParts) > 1) {
2496+
$namespace = implode('\\', array_slice($traitNameParts, 0, -1));
2497+
}
24892498
return $this->scopeFactory->create(
24902499
$this->context->enterTrait($traitReflection),
24912500
$this->isDeclareStrictTypes(),
24922501
$this->constantTypes,
24932502
$this->getFunction(),
2494-
$this->getNamespace(),
2503+
$namespace,
24952504
$this->getVariableTypes(),
24962505
$this->moreSpecificTypes,
24972506
[],

tests/PHPStan/Rules/Functions/CallToNonExistentFunctionRuleTest.php

+5
Original file line numberDiff line numberDiff line change
@@ -157,4 +157,9 @@ public function testBug3576(): void
157157
]);
158158
}
159159

160+
public function testBug7952(): void
161+
{
162+
$this->analyse([__DIR__ . '/data/bug-7952.php'], []);
163+
}
164+
160165
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
namespace Bug7952A {
4+
5+
function clean(): void
6+
{
7+
echo 'cleaned';
8+
}
9+
10+
trait FooTrait
11+
{
12+
public function doClean(): void
13+
{
14+
clean();
15+
}
16+
}
17+
18+
}
19+
20+
namespace Bug7952A\Sub {
21+
22+
use Bug7952A\FooTrait;
23+
24+
class FooClass
25+
{
26+
use FooTrait;
27+
}
28+
29+
}

0 commit comments

Comments
 (0)