|  | 
| 42 | 42 | use PHPStan\PhpDocParser\Ast\PhpDoc\RequireExtendsTagValueNode; | 
| 43 | 43 | use PHPStan\PhpDocParser\Ast\PhpDoc\RequireImplementsTagValueNode; | 
| 44 | 44 | use PHPStan\PhpDocParser\Ast\PhpDoc\ReturnTagValueNode; | 
|  | 45 | +use PHPStan\PhpDocParser\Ast\PhpDoc\SealedTagValueNode; | 
| 45 | 46 | use PHPStan\PhpDocParser\Ast\PhpDoc\SelfOutTagValueNode; | 
| 46 | 47 | use PHPStan\PhpDocParser\Ast\PhpDoc\TemplateTagValueNode; | 
| 47 | 48 | use PHPStan\PhpDocParser\Ast\PhpDoc\ThrowsTagValueNode; | 
| @@ -108,6 +109,7 @@ protected function setUp(): void | 
| 108 | 109 | 	 * @dataProvider provideMixinTagsData | 
| 109 | 110 | 	 * @dataProvider provideRequireExtendsTagsData | 
| 110 | 111 | 	 * @dataProvider provideRequireImplementsTagsData | 
|  | 112 | +	 * @dataProvider provideSealedTagsData | 
| 111 | 113 | 	 * @dataProvider provideDeprecatedTagsData | 
| 112 | 114 | 	 * @dataProvider providePropertyTagsData | 
| 113 | 115 | 	 * @dataProvider provideMethodTagsData | 
| @@ -2210,6 +2212,81 @@ public function provideRequireImplementsTagsData(): Iterator | 
| 2210 | 2212 | 		]; | 
| 2211 | 2213 | 	} | 
| 2212 | 2214 | 
 | 
|  | 2215 | +	public function provideSealedTagsData(): Iterator | 
|  | 2216 | +	{ | 
|  | 2217 | +		yield [ | 
|  | 2218 | +			'OK without description', | 
|  | 2219 | +			'/** @phpstan-sealed Foo|Bar */', | 
|  | 2220 | +			new PhpDocNode([ | 
|  | 2221 | +				new PhpDocTagNode( | 
|  | 2222 | +					'@phpstan-sealed', | 
|  | 2223 | +					new SealedTagValueNode( | 
|  | 2224 | +						new UnionTypeNode([ | 
|  | 2225 | +							new IdentifierTypeNode('Foo'), | 
|  | 2226 | +							new IdentifierTypeNode('Bar'), | 
|  | 2227 | +						]), | 
|  | 2228 | +						'', | 
|  | 2229 | +					), | 
|  | 2230 | +				), | 
|  | 2231 | +			]), | 
|  | 2232 | +		]; | 
|  | 2233 | + | 
|  | 2234 | +		yield [ | 
|  | 2235 | +			'OK with description', | 
|  | 2236 | +			'/** @phpstan-sealed Foo|Bar optional description */', | 
|  | 2237 | +			new PhpDocNode([ | 
|  | 2238 | +				new PhpDocTagNode( | 
|  | 2239 | +					'@phpstan-sealed', | 
|  | 2240 | +					new SealedTagValueNode( | 
|  | 2241 | +						new UnionTypeNode([ | 
|  | 2242 | +							new IdentifierTypeNode('Foo'), | 
|  | 2243 | +							new IdentifierTypeNode('Bar'), | 
|  | 2244 | +						]), | 
|  | 2245 | +						'optional description', | 
|  | 2246 | +					), | 
|  | 2247 | +				), | 
|  | 2248 | +			]), | 
|  | 2249 | +		]; | 
|  | 2250 | + | 
|  | 2251 | +		yield [ | 
|  | 2252 | +			'OK with psalm-prefix description', | 
|  | 2253 | +			'/** @psalm-inheritors Foo|Bar optional description */', | 
|  | 2254 | +			new PhpDocNode([ | 
|  | 2255 | +				new PhpDocTagNode( | 
|  | 2256 | +					'@psalm-inheritors', | 
|  | 2257 | +					new SealedTagValueNode( | 
|  | 2258 | +						new UnionTypeNode([ | 
|  | 2259 | +							new IdentifierTypeNode('Foo'), | 
|  | 2260 | +							new IdentifierTypeNode('Bar'), | 
|  | 2261 | +						]), | 
|  | 2262 | +						'optional description', | 
|  | 2263 | +					), | 
|  | 2264 | +				), | 
|  | 2265 | +			]), | 
|  | 2266 | +		]; | 
|  | 2267 | + | 
|  | 2268 | +		yield [ | 
|  | 2269 | +			'invalid without type and description', | 
|  | 2270 | +			'/** @phpstan-sealed */', | 
|  | 2271 | +			new PhpDocNode([ | 
|  | 2272 | +				new PhpDocTagNode( | 
|  | 2273 | +					'@phpstan-sealed', | 
|  | 2274 | +					new InvalidTagValueNode( | 
|  | 2275 | +						'', | 
|  | 2276 | +						new ParserException( | 
|  | 2277 | +							'*/', | 
|  | 2278 | +							Lexer::TOKEN_CLOSE_PHPDOC, | 
|  | 2279 | +							20, | 
|  | 2280 | +							Lexer::TOKEN_IDENTIFIER, | 
|  | 2281 | +							null, | 
|  | 2282 | +							1, | 
|  | 2283 | +						), | 
|  | 2284 | +					), | 
|  | 2285 | +				), | 
|  | 2286 | +			]), | 
|  | 2287 | +		]; | 
|  | 2288 | +	} | 
|  | 2289 | + | 
| 2213 | 2290 | 	public function provideDeprecatedTagsData(): Iterator | 
| 2214 | 2291 | 	{ | 
| 2215 | 2292 | 		yield [ | 
|  | 
0 commit comments