8000 fix: nested trait `@use`, use original class file name to get trait d… · phpstan/phpstan-src@e50d059 · GitHub
[go: up one dir, main page]

Skip to content

Commit e50d059

Browse files
authored
fix: nested trait @use, use original class file name to get trait data (#4813)
1 parent 8301dbb commit e50d059

File tree

11 files changed

+89
-2
lines changed

11 files changed

+89
-2
lines changed

.github/workflows/e2e-tests.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,9 @@ jobs:
293293
OUTPUT=$(../bashunit -a exit_code "1" "../../bin/phpstan")
294294
echo "$OUTPUT"
295295
../bashunit -a contains 'Method StubFiles\Foo::doFoo() has no return type specified.' "$OUTPUT"
296+
- script: |
297+
cd e2e/nested-trait-use
298+
../../bin/phpstan analyze
296299
297300
steps:
298301
- name: "Checkout"
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?php
2+
3+
namespace NestedTraitUse\Framework;
4+
5+
class Builder {}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
3+
namespace NestedTraitUse\Framework;
4+
5+
/** @template TBuilder of Builder */
6+
trait HasBuilder
7+
{
8+
/** @return TBuilder */
9+
public function newBuilder(): Builder
10+
{
11+
return parent::newBuilder();
12+
}
13+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace NestedTraitUse\Framework;
4+
5+
class Model
6+
{
7+
/** @var class-string<Builder> */
8+
protected static string $builder = Builder::class;
9+
10+
public function newBuilder(): Builder
11+
{
12+
return new static::$builder();
13+
}
14+
}

e2e/nested-trait-use/main.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
use NestedTraitUse\Src\ChildModel;
4+
5+
use function PHPStan\Testing\assertType;
6+
7+
function test(ChildModel $model): void
8+
{
9+
assertType('NestedTraitUse\Src\CustomBuilder', $model->newBuilder());
10+
}

e2e/nested-trait-use/phpstan.neon

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
parameters:
2+
level: 9
3+
tmpDir: tmp
4+
paths:
5+
- main.php
6+
scanDirectories:
7+
- src
8+
- framework
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
namespace NestedTraitUse\Src;
4+
5+
use NestedTraitUse\Framework\Model;
6+
7+
class ChildModel extends Model
8+
{
9+
/** @use HasBuilder<CustomBuilder> */
10+
use HasBuilder;
11+
protected static string $builder = CustomBuilder::class;
12+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
3+
namespace NestedTraitUse\Src;
4+
5+
use NestedTraitUse\Framework\Builder;
6+
7+
class CustomBuilder extends Builder {}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
3+
namespace NestedTraitUse\Src;
4+
5+
use NestedTraitUse\Framework\Builder;
6+
use NestedTraitUse\Framework\HasBuilder as BaseHasBuilder;
7+
8+
/** @template TBuilder of Builder */
9+
trait HasBuilder
10+
{
11+
/** @use BaseHasBuilder<TBuilder> */
12+
use BaseHasBuilder;
13+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
*
2+
!.gitignore

0 commit comments

Comments
 (0)
0