2323use PHPStan \PhpDocParser \Ast \PhpDoc \ReturnTagValueNode ;
2424use PHPStan \PhpDocParser \Ast \PhpDoc \TemplateTagValueNode ;
2525use PHPStan \PhpDocParser \Ast \PhpDoc \ThrowsTagValueNode ;
26+ use PHPStan \PhpDocParser \Ast \PhpDoc \TypeAliasImportTagValueNode ;
2627use PHPStan \PhpDocParser \Ast \PhpDoc \TypeAliasTagValueNode ;
2728use PHPStan \PhpDocParser \Ast \PhpDoc \UsesTagValueNode ;
2829use PHPStan \PhpDocParser \Ast \PhpDoc \VarTagValueNode ;
@@ -68,6 +69,7 @@ protected function setUp(): void
6869 * @dataProvider provideTemplateTagsData
6970 * @dataProvider provideExtendsTagsData
7071 * @dataProvider provideTypeAliasTagsData
72+ * @dataProvider provideTypeAliasImportTagsData
7173 * @dataProvider provideRealWorldExampleData
7274 * @dataProvider provideDescriptionWithOrWithoutHtml
7375 * @param string $label
@@ -2904,7 +2906,7 @@ public function provideTypeAliasTagsData(): \Iterator
29042906 '@phpstan-type ' ,
29052907 new InvalidTagValueNode (
29062908 'TypeAlias ' ,
2907- new ParserException (
2909+ new \ PHPStan \ PhpDocParser \ Parser \ ParserException (
29082910 '*/ ' ,
29092911 Lexer::TOKEN_CLOSE_PHPDOC ,
29102912 28 ,
@@ -2923,7 +2925,7 @@ public function provideTypeAliasTagsData(): \Iterator
29232925 '@phpstan-type ' ,
29242926 new InvalidTagValueNode (
29252927 '' ,
2926- new ParserException (
2928+ new \ PHPStan \ PhpDocParser \ Parser \ ParserException (
29272929 '*/ ' ,
29282930 Lexer::TOKEN_CLOSE_PHPDOC ,
29292931 18 ,
@@ -2935,6 +2937,96 @@ public function provideTypeAliasTagsData(): \Iterator
29352937 ];
29362938 }
29372939
2940+ public function provideTypeAliasImportTagsData (): \Iterator
2941+ {
2942+ yield [
2943+ 'OK ' ,
2944+ '/** @phpstan-import-type TypeAlias from AnotherClass */ ' ,
2945+ new PhpDocNode ([
2946+ new PhpDocTagNode (
2947+ '@phpstan-import-type ' ,
2948+ new TypeAliasImportTagValueNode (
2949+ 'TypeAlias ' ,
2950+ new IdentifierTypeNode ('AnotherClass ' ),
2951+ null
2952+ )
2953+ ),
2954+ ]),
2955+ ];
2956+
2957+ yield [
2958+ 'OK with alias ' ,
2959+ '/** @phpstan-import-type TypeAlias from AnotherClass as DifferentAlias */ ' ,
2960+ new PhpDocNode ([
2961+ new PhpDocTagNode (
2962+ '@phpstan-import-type ' ,
2963+ new TypeAliasImportTagValueNode (
2964+ 'TypeAlias ' ,
2965+ new IdentifierTypeNode ('AnotherClass ' ),
2966+ 'DifferentAlias '
2967+ )
2968+ ),
2969+ ]),
2970+ ];
2971+
2972+ yield [
2973+ 'invalid missing from ' ,
2974+ '/** @phpstan-import-type TypeAlias */ ' ,
2975+ new PhpDocNode ([
2976+ new PhpDocTagNode (
2977+ '@phpstan-import-type ' ,
2978+ new InvalidTagValueNode (
2979+ 'TypeAlias ' ,
2980+ new \PHPStan \PhpDocParser \Parser \ParserException (
2981+ '*/ ' ,
2982+ Lexer::TOKEN_CLOSE_PHPDOC ,
2983+ 35 ,
2984+ Lexer::TOKEN_IDENTIFIER
2985+ )
2986+ )
2987+ ),
2988+ ]),
2989+ ];
2990+
2991+ yield [
2992+ 'invalid missing from with alias ' ,
2993+ '/** @phpstan-import-type TypeAlias as DifferentAlias */ ' ,
2994+ new PhpDocNode ([
2995+ new PhpDocTagNode (
2996+ '@phpstan-import-type ' ,
2997+ new InvalidTagValueNode (
2998+ 'TypeAlias as DifferentAlias ' ,
2999+ new \PHPStan \PhpDocParser \Parser \ParserException (
3000+ 'as ' ,
3001+ Lexer::TOKEN_IDENTIFIER ,
3002+ 35 ,
3003+ Lexer::TOKEN_IDENTIFIER
3004+ )
3005+ )
3006+ ),
3007+ ]),
3008+ ];
3009+
3010+ yield [
3011+ 'invalid empty ' ,
3012+ '/** @phpstan-import-type */ ' ,
3013+ new PhpDocNode ([
3014+ new PhpDocTagNode (
3015+ '@phpstan-import-type ' ,
3016+ new InvalidTagValueNode (
3017+ '' ,
3018+ new \PHPStan \PhpDocParser \Parser \ParserException (
3019+ '*/ ' ,
3020+ Lexer::TOKEN_CLOSE_PHPDOC ,
3021+ 25 ,
3022+ Lexer::TOKEN_IDENTIFIER
3023+ )
3024+ )
3025+ ),
3026+ ]),
3027+ ];
3028+ }
3029+
29383030 public function providerDebug (): \Iterator
29393031 {
29403032 $ sample = '/**
0 commit comments