|  | 
| 34 | 34 | use PHPStan\PhpDocParser\Ast\PhpDoc\TypelessParamTagValueNode; | 
| 35 | 35 | use PHPStan\PhpDocParser\Ast\PhpDoc\UsesTagValueNode; | 
| 36 | 36 | use PHPStan\PhpDocParser\Ast\PhpDoc\VarTagValueNode; | 
|  | 37 | +use PHPStan\PhpDocParser\Ast\Type\ArrayShapeItemNode; | 
|  | 38 | +use PHPStan\PhpDocParser\Ast\Type\ArrayShapeNode; | 
| 37 | 39 | use PHPStan\PhpDocParser\Ast\Type\ArrayTypeNode; | 
| 38 | 40 | use PHPStan\PhpDocParser\Ast\Type\CallableTypeNode; | 
| 39 | 41 | use PHPStan\PhpDocParser\Ast\Type\CallableTypeParameterNode; | 
| @@ -4381,6 +4383,178 @@ public function provideRealWorldExampleData(): Iterator | 
| 4381 | 4383 | 				), | 
| 4382 | 4384 | 			]), | 
| 4383 | 4385 | 		]; | 
|  | 4386 | + | 
|  | 4387 | +		yield [ | 
|  | 4388 | +			'complex stub from Psalm', | 
|  | 4389 | +			'/**' . PHP_EOL . | 
|  | 4390 | +			' * @psalm-pure' . PHP_EOL . | 
|  | 4391 | +			' * @template TFlags as int-mask<0, 256, 512>' . PHP_EOL . | 
|  | 4392 | +			' *' . PHP_EOL . | 
|  | 4393 | +			' * @param string $pattern' . PHP_EOL . | 
|  | 4394 | +			' * @param string $subject' . PHP_EOL . | 
|  | 4395 | +			' * @param mixed $matches' . PHP_EOL . | 
|  | 4396 | +			' * @param TFlags $flags' . PHP_EOL . | 
|  | 4397 | +			" * @param-out (TFlags is 256 ? array<array-key, array{string, 0|positive-int}|array{'', -1}> :" . PHP_EOL . | 
|  | 4398 | +			' *             TFlags is 512 ? array<array-key, string|null> :' . PHP_EOL . | 
|  | 4399 | +			' *             TFlags is 768 ? array<array-key, array{string, 0|positive-int}|array{null, -1}> :' . PHP_EOL . | 
|  | 4400 | +			' *                             array<array-key, string>' . PHP_EOL . | 
|  | 4401 | +			' *            ) $matches' . PHP_EOL . | 
|  | 4402 | +			' * @return 1|0|false' . PHP_EOL . | 
|  | 4403 | +			' * @psalm-ignore-falsable-return' . PHP_EOL . | 
|  | 4404 | +			' */', | 
|  | 4405 | +			new PhpDocNode([ | 
|  | 4406 | +				new PhpDocTagNode('@psalm-pure', new GenericTagValueNode('')), | 
|  | 4407 | +				new PhpDocTagNode( | 
|  | 4408 | +					'@template', | 
|  | 4409 | +					new TemplateTagValueNode( | 
|  | 4410 | +						'TFlags', | 
|  | 4411 | +						new GenericTypeNode( | 
|  | 4412 | +							new IdentifierTypeNode('int-mask'), | 
|  | 4413 | +							[ | 
|  | 4414 | +								new ConstTypeNode(new ConstExprIntegerNode('0')), | 
|  | 4415 | +								new ConstTypeNode(new ConstExprIntegerNode('256')), | 
|  | 4416 | +								new ConstTypeNode(new ConstExprIntegerNode('512')), | 
|  | 4417 | +							] | 
|  | 4418 | +						), | 
|  | 4419 | +						'' | 
|  | 4420 | +					) | 
|  | 4421 | +				), | 
|  | 4422 | +				new PhpDocTextNode(''), | 
|  | 4423 | +				new PhpDocTagNode( | 
|  | 4424 | +					'@param', | 
|  | 4425 | +					new ParamTagValueNode( | 
|  | 4426 | +						new IdentifierTypeNode('string'), | 
|  | 4427 | +						false, | 
|  | 4428 | +						'$pattern', | 
|  | 4429 | +						'' | 
|  | 4430 | +					) | 
|  | 4431 | +				), | 
|  | 4432 | +				new PhpDocTagNode( | 
|  | 4433 | +					'@param', | 
|  | 4434 | +					new ParamTagValueNode( | 
|  | 4435 | +						new IdentifierTypeNode('string'), | 
|  | 4436 | +						false, | 
|  | 4437 | +						'$subject', | 
|  | 4438 | +						'' | 
|  | 4439 | +					) | 
|  | 4440 | +				), | 
|  | 4441 | +				new PhpDocTagNode( | 
|  | 4442 | +					'@param', | 
|  | 4443 | +					new ParamTagValueNode( | 
|  | 4444 | +						new IdentifierTypeNode('mixed'), | 
|  | 4445 | +						false, | 
|  | 4446 | +						'$matches', | 
|  | 4447 | +						'' | 
|  | 4448 | +					) | 
|  | 4449 | +				), | 
|  | 4450 | +				new PhpDocTagNode( | 
|  | 4451 | +					'@param', | 
|  | 4452 | +					new ParamTagValueNode( | 
|  | 4453 | +						new IdentifierTypeNode('TFlags'), | 
|  | 4454 | +						false, | 
|  | 4455 | +						'$flags', | 
|  | 4456 | +						'' | 
|  | 4457 | +					) | 
|  | 4458 | +				), | 
|  | 4459 | +				new PhpDocTagNode( | 
|  | 4460 | +					'@param-out', | 
|  | 4461 | +					new ParamOutTagValueNode( | 
|  | 4462 | +						new ConditionalTypeNode( | 
|  | 4463 | +							new IdentifierTypeNode('TFlags'), | 
|  | 4464 | +							new ConstTypeNode(new ConstExprIntegerNode('256')), | 
|  | 4465 | +							new GenericTypeNode( | 
|  | 4466 | +								new IdentifierTypeNode('array'), | 
|  | 4467 | +								[ | 
|  | 4468 | +									new IdentifierTypeNode('array-key'), | 
|  | 4469 | +									new UnionTypeNode([ | 
|  | 4470 | +										new ArrayShapeNode([ | 
|  | 4471 | +											new ArrayShapeItemNode(null, false, new IdentifierTypeNode('string')), | 
|  | 4472 | +											new ArrayShapeItemNode( | 
|  | 4473 | +												null, | 
|  | 4474 | +												false, | 
|  | 4475 | +												new UnionTypeNode([ | 
|  | 4476 | +													new ConstTypeNode(new ConstExprIntegerNode('0')), | 
|  | 4477 | +													new IdentifierTypeNode('positive-int'), | 
|  | 4478 | +												]) | 
|  | 4479 | +											), | 
|  | 4480 | +										]), | 
|  | 4481 | +										new ArrayShapeNode([ | 
|  | 4482 | +											new ArrayShapeItemNode(null, false, new ConstTypeNode(new ConstExprStringNode(''))), | 
|  | 4483 | +											new ArrayShapeItemNode(null, false, new ConstTypeNode(new ConstExprIntegerNode('-1'))), | 
|  | 4484 | +										]), | 
|  | 4485 | +									]), | 
|  | 4486 | +								] | 
|  | 4487 | +							), | 
|  | 4488 | +							new ConditionalTypeNode( | 
|  | 4489 | +								new IdentifierTypeNode('TFlags'), | 
|  | 4490 | +								new ConstTypeNode(new ConstExprIntegerNode('512')), | 
|  | 4491 | +								new GenericTypeNode( | 
|  | 4492 | +									new IdentifierTypeNode('array'), | 
|  | 4493 | +									[ | 
|  | 4494 | +										new IdentifierTypeNode('array-key'), | 
|  | 4495 | +										new UnionTypeNode([ | 
|  | 4496 | +											new IdentifierTypeNode('string'), | 
|  | 4497 | +											new IdentifierTypeNode('null'), | 
|  | 4498 | +										]), | 
|  | 4499 | +									] | 
|  | 4500 | +								), | 
|  | 4501 | +								new ConditionalTypeNode( | 
|  | 4502 | +									new IdentifierTypeNode('TFlags'), | 
|  | 4503 | +									new ConstTypeNode(new ConstExprIntegerNode('768')), | 
|  | 4504 | +									new GenericTypeNode( | 
|  | 4505 | +										new IdentifierTypeNode('array'), | 
|  | 4506 | +										[ | 
|  | 4507 | +											new IdentifierTypeNode('array-key'), | 
|  | 4508 | +											new UnionTypeNode([ | 
|  | 4509 | +												new ArrayShapeNode([ | 
|  | 4510 | +													new ArrayShapeItemNode(null, false, new IdentifierTypeNode('string')), | 
|  | 4511 | +													new ArrayShapeItemNode( | 
|  | 4512 | +														null, | 
|  | 4513 | +														false, | 
|  | 4514 | +														new UnionTypeNode([ | 
|  | 4515 | +															new ConstTypeNode(new ConstExprIntegerNode('0')), | 
|  | 4516 | +															new IdentifierTypeNode('positive-int'), | 
|  | 4517 | +														]) | 
|  | 4518 | +													), | 
|  | 4519 | +												]), | 
|  | 4520 | +												new ArrayShapeNode([ | 
|  | 4521 | +													new ArrayShapeItemNode(null, false, new IdentifierTypeNode('null')), | 
|  | 4522 | +													new ArrayShapeItemNode(null, false, new ConstTypeNode(new ConstExprIntegerNode('-1'))), | 
|  | 4523 | +												]), | 
|  | 4524 | +											]), | 
|  | 4525 | +										] | 
|  | 4526 | +									), | 
|  | 4527 | +									new GenericTypeNode( | 
|  | 4528 | +										new IdentifierTypeNode('array'), | 
|  | 4529 | +										[ | 
|  | 4530 | +											new IdentifierTypeNode('array-key'), | 
|  | 4531 | +											new IdentifierTypeNode('string'), | 
|  | 4532 | +										] | 
|  | 4533 | +									), | 
|  | 4534 | +									false | 
|  | 4535 | +								), | 
|  | 4536 | +								false | 
|  | 4537 | +							), | 
|  | 4538 | +							false | 
|  | 4539 | +						), | 
|  | 4540 | +						'$matches', | 
|  | 4541 | +						'' | 
|  | 4542 | +					) | 
|  | 4543 | +				), | 
|  | 4544 | +				new PhpDocTagNode( | 
|  | 4545 | +					'@return', | 
|  | 4546 | +					new ReturnTagValueNode( | 
|  | 4547 | +						new UnionTypeNode([ | 
|  | 4548 | +							new ConstTypeNode(new ConstExprIntegerNode('1')), | 
|  | 4549 | +							new ConstTypeNode(new ConstExprIntegerNode('0')), | 
|  | 4550 | +							new IdentifierTypeNode('false'), | 
|  | 4551 | +						]), | 
|  | 4552 | +						'' | 
|  | 4553 | +					) | 
|  | 4554 | +				), | 
|  | 4555 | +				new PhpDocTagNode('@psalm-ignore-falsable-return', new GenericTagValueNode('')), | 
|  | 4556 | +			]), | 
|  | 4557 | +		]; | 
| 4384 | 4558 | 	} | 
| 4385 | 4559 | 
 | 
| 4386 | 4560 | 	public function provideDescriptionWithOrWithoutHtml(): Iterator | 
|  | 
0 commit comments