44
55namespace Typhoon \PHPStanTypeParser ;
66
7+ use Typhoon \Type \AliasT ;
78use Typhoon \Type \TemplateT ;
89
910final class Context
@@ -18,6 +19,11 @@ final class Context
1819 */
1920 private array $ templates = [];
2021
22+ /**
23+ * @var array<non-empty-string, AliasT>
24+ */
25+ private array $ aliases = [];
26+
2127 public function __construct (
2228 public readonly ?Name $ namespace = null ,
2329 ) {}
@@ -30,21 +36,32 @@ public function use(Name $name, ?Name $as = null): self
3036 return $ context ;
3137 }
3238
33- public function template (TemplateT $ template ): self
39+ public function useTemplate (TemplateT $ template ): self
3440 {
3541 $ context = clone $ this ;
3642 $ context ->templates [$ template ->name ] = $ template ;
3743
3844 return $ context ;
3945 }
4046
47+ /**
48+ * @param ?non-empty-string $as
49+ */
50+ public function useAlias (AliasT $ alias , ?string $ as = null ): self
51+ {
52+ $ context = clone $ this ;
53+ $ context ->aliases [$ as ?? $ alias ->name ] = $ alias ;
54+
55+ return $ context ;
56+ }
57+
4158 public function resolveAsClass (string $ name ): Name
4259 {
4360 return Name::parse ($ name )->resolveClass ($ this ->namespace , $ this ->importTable );
4461 }
4562
46- public function resolve (string $ name ): TemplateT |Name
63+ public function resolve (string $ name ): Name | TemplateT |AliasT
4764 {
48- return $ this ->templates [$ name ] ?? $ this ->resolveAsClass ($ name );
65+ return $ this ->templates [$ name ] ?? $ this ->aliases [ $ name ] ?? $ this -> resolveAsClass ($ name );
4966 }
5067}
0 commit comments