|
23 | 23 | use PHPStan\PhpDocParser\Ast\PhpDoc\ReturnTagValueNode; |
24 | 24 | use PHPStan\PhpDocParser\Ast\PhpDoc\TemplateTagValueNode; |
25 | 25 | use PHPStan\PhpDocParser\Ast\PhpDoc\ThrowsTagValueNode; |
| 26 | +use PHPStan\PhpDocParser\Ast\PhpDoc\TypeAliasTagValueNode; |
26 | 27 | use PHPStan\PhpDocParser\Ast\PhpDoc\UsesTagValueNode; |
27 | 28 | use PHPStan\PhpDocParser\Ast\PhpDoc\VarTagValueNode; |
28 | 29 | use PHPStan\PhpDocParser\Ast\Type\ArrayTypeNode; |
@@ -66,6 +67,7 @@ protected function setUp(): void |
66 | 67 | * @dataProvider provideMultiLinePhpDocData |
67 | 68 | * @dataProvider provideTemplateTagsData |
68 | 69 | * @dataProvider provideExtendsTagsData |
| 70 | + * @dataProvider provideTypeAliasTagsData |
69 | 71 | * @dataProvider provideRealWorldExampleData |
70 | 72 | * @dataProvider provideDescriptionWithOrWithoutHtml |
71 | 73 | * @param string $label |
@@ -2858,6 +2860,81 @@ public function provideExtendsTagsData(): \Iterator |
2858 | 2860 | ]; |
2859 | 2861 | } |
2860 | 2862 |
|
| 2863 | + public function provideTypeAliasTagsData(): \Iterator |
| 2864 | + { |
| 2865 | + yield [ |
| 2866 | + 'OK', |
| 2867 | + '/** @phpstan-type TypeAlias string|int */', |
| 2868 | + new PhpDocNode([ |
| 2869 | + new PhpDocTagNode( |
| 2870 | + '@phpstan-type', |
| 2871 | + new TypeAliasTagValueNode( |
| 2872 | + 'TypeAlias', |
| 2873 | + new UnionTypeNode([ |
| 2874 | + new IdentifierTypeNode('string'), |
| 2875 | + new IdentifierTypeNode('int'), |
| 2876 | + ]) |
| 2877 | + ) |
| 2878 | + ), |
| 2879 | + ]), |
| 2880 | + ]; |
| 2881 | + |
| 2882 | + yield [ |
| 2883 | + 'OK with psalm syntax', |
| 2884 | + '/** @psalm-type TypeAlias=string|int */', |
| 2885 | + new PhpDocNode([ |
| 2886 | + new PhpDocTagNode( |
| 2887 | + '@psalm-type', |
| 2888 | + new TypeAliasTagValueNode( |
| 2889 | + 'TypeAlias', |
| 2890 | + new UnionTypeNode([ |
| 2891 | + new IdentifierTypeNode('string'), |
| 2892 | + new IdentifierTypeNode('int'), |
| 2893 | + ]) |
| 2894 | + ) |
| 2895 | + ), |
| 2896 | + ]), |
| 2897 | + ]; |
| 2898 | + |
| 2899 | + yield [ |
| 2900 | + 'invalid without type', |
| 2901 | + '/** @phpstan-type TypeAlias */', |
| 2902 | + new PhpDocNode([ |
| 2903 | + new PhpDocTagNode( |
| 2904 | + '@phpstan-type', |
| 2905 | + new InvalidTagValueNode( |
| 2906 | + 'TypeAlias', |
| 2907 | + new ParserException( |
| 2908 | + '*/', |
| 2909 | + Lexer::TOKEN_CLOSE_PHPDOC, |
| 2910 | + 28, |
| 2911 | + Lexer::TOKEN_IDENTIFIER |
| 2912 | + ) |
| 2913 | + ) |
| 2914 | + ), |
| 2915 | + ]), |
| 2916 | + ]; |
| 2917 | + |
| 2918 | + yield [ |
| 2919 | + 'invalid empty', |
| 2920 | + '/** @phpstan-type */', |
| 2921 | + new PhpDocNode([ |
| 2922 | + new PhpDocTagNode( |
| 2923 | + '@phpstan-type', |
| 2924 | + new InvalidTagValueNode( |
| 2925 | + '', |
| 2926 | + new ParserException( |
| 2927 | + '*/', |
| 2928 | + Lexer::TOKEN_CLOSE_PHPDOC, |
| 2929 | + 18, |
| 2930 | + Lexer::TOKEN_IDENTIFIER |
| 2931 | + ) |
| 2932 | + ) |
| 2933 | + ), |
| 2934 | + ]), |
| 2935 | + ]; |
| 2936 | + } |
| 2937 | + |
2861 | 2938 | public function providerDebug(): \Iterator |
2862 | 2939 | { |
2863 | 2940 | $sample = '/** |
|
0 commit comments