|
12 | 12 | use PHPStan\PhpDocParser\Ast\PhpDoc\InvalidTagValueNode; |
13 | 13 | use PHPStan\PhpDocParser\Ast\PhpDoc\MethodTagValueNode; |
14 | 14 | use PHPStan\PhpDocParser\Ast\PhpDoc\MethodTagValueParameterNode; |
| 15 | +use PHPStan\PhpDocParser\Ast\PhpDoc\MixinTagValueNode; |
15 | 16 | use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode; |
16 | 17 | use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocNode; |
17 | 18 | use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode; |
@@ -54,6 +55,7 @@ protected function setUp(): void |
54 | 55 | * @dataProvider provideVarTagsData |
55 | 56 | * @dataProvider provideReturnTagsData |
56 | 57 | * @dataProvider provideThrowsTagsData |
| 58 | + * @dataProvider provideMixinTagsData |
57 | 59 | * @dataProvider provideDeprecatedTagsData |
58 | 60 | * @dataProvider providePropertyTagsData |
59 | 61 | * @dataProvider provideMethodTagsData |
@@ -1064,6 +1066,105 @@ public function provideThrowsTagsData(): \Iterator |
1064 | 1066 | ]; |
1065 | 1067 | } |
1066 | 1068 |
|
| 1069 | + public function provideMixinTagsData(): \Iterator |
| 1070 | + { |
| 1071 | + yield [ |
| 1072 | + 'OK without description', |
| 1073 | + '/** @mixin Foo */', |
| 1074 | + new PhpDocNode([ |
| 1075 | + new PhpDocTagNode( |
| 1076 | + '@mixin', |
| 1077 | + new MixinTagValueNode( |
| 1078 | + new IdentifierTypeNode('Foo'), |
| 1079 | + '' |
| 1080 | + ) |
| 1081 | + ), |
| 1082 | + ]), |
| 1083 | + ]; |
| 1084 | + |
| 1085 | + yield [ |
| 1086 | + 'OK with description', |
| 1087 | + '/** @mixin Foo optional description */', |
| 1088 | + new PhpDocNode([ |
| 1089 | + new PhpDocTagNode( |
| 1090 | + '@mixin', |
| 1091 | + new MixinTagValueNode( |
| 1092 | + new IdentifierTypeNode('Foo'), |
| 1093 | + 'optional description' |
| 1094 | + ) |
| 1095 | + ), |
| 1096 | + ]), |
| 1097 | + ]; |
| 1098 | + |
| 1099 | + yield [ |
| 1100 | + 'OK with description that starts with TOKEN_OPEN_SQUARE_BRACKET', |
| 1101 | + '/** @mixin Foo [Bar] */', |
| 1102 | + new PhpDocNode([ |
| 1103 | + new PhpDocTagNode( |
| 1104 | + '@mixin', |
| 1105 | + new MixinTagValueNode( |
| 1106 | + new IdentifierTypeNode('Foo'), |
| 1107 | + '[Bar]' |
| 1108 | + ) |
| 1109 | + ), |
| 1110 | + ]), |
| 1111 | + ]; |
| 1112 | + |
| 1113 | + yield [ |
| 1114 | + 'invalid without type and description', |
| 1115 | + '/** @mixin */', |
| 1116 | + new PhpDocNode([ |
| 1117 | + new PhpDocTagNode( |
| 1118 | + '@mixin', |
| 1119 | + new InvalidTagValueNode( |
| 1120 | + '', |
| 1121 | + new \PHPStan\PhpDocParser\Parser\ParserException( |
| 1122 | + '*/', |
| 1123 | + Lexer::TOKEN_CLOSE_PHPDOC, |
| 1124 | + 11, |
| 1125 | + Lexer::TOKEN_IDENTIFIER |
| 1126 | + ) |
| 1127 | + ) |
| 1128 | + ), |
| 1129 | + ]), |
| 1130 | + ]; |
| 1131 | + |
| 1132 | + yield [ |
| 1133 | + 'invalid with type and disallowed description start token', |
| 1134 | + '/** @mixin Foo | #desc */', |
| 1135 | + new PhpDocNode([ |
| 1136 | + new PhpDocTagNode( |
| 1137 | + '@mixin', |
| 1138 | + new InvalidTagValueNode( |
| 1139 | + 'Foo | #desc', |
| 1140 | + new \PHPStan\PhpDocParser\Parser\ParserException( |
| 1141 | + '#desc', |
| 1142 | + Lexer::TOKEN_OTHER, |
| 1143 | + 17, |
| 1144 | + Lexer::TOKEN_IDENTIFIER |
| 1145 | + ) |
| 1146 | + ) |
| 1147 | + ), |
| 1148 | + ]), |
| 1149 | + ]; |
| 1150 | + |
| 1151 | + yield [ |
| 1152 | + 'generic @mixin', |
| 1153 | + '/** @mixin Foo<Bar> */', |
| 1154 | + new PhpDocNode([ |
| 1155 | + new PhpDocTagNode( |
| 1156 | + '@mixin', |
| 1157 | + new MixinTagValueNode( |
| 1158 | + new GenericTypeNode(new IdentifierTypeNode('Foo'), [ |
| 1159 | + new IdentifierTypeNode('Bar'), |
| 1160 | + ]), |
| 1161 | + '' |
| 1162 | + ) |
| 1163 | + ), |
| 1164 | + ]), |
| 1165 | + ]; |
| 1166 | + } |
| 1167 | + |
1067 | 1168 | public function provideDeprecatedTagsData(): \Iterator |
1068 | 1169 | { |
1069 | 1170 | yield [ |
|
0 commit comments