|  | 
| 35 | 35 | use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode; | 
| 36 | 36 | use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTextNode; | 
| 37 | 37 | use PHPStan\PhpDocParser\Ast\PhpDoc\PropertyTagValueNode; | 
|  | 38 | +use PHPStan\PhpDocParser\Ast\PhpDoc\RequireExtendsTagValueNode; | 
|  | 39 | +use PHPStan\PhpDocParser\Ast\PhpDoc\RequireImplementsTagValueNode; | 
| 38 | 40 | use PHPStan\PhpDocParser\Ast\PhpDoc\ReturnTagValueNode; | 
| 39 | 41 | use PHPStan\PhpDocParser\Ast\PhpDoc\SelfOutTagValueNode; | 
| 40 | 42 | use PHPStan\PhpDocParser\Ast\PhpDoc\TemplateTagValueNode; | 
| @@ -100,6 +102,8 @@ protected function setUp(): void | 
| 100 | 102 | 	 * @dataProvider provideReturnTagsData | 
| 101 | 103 | 	 * @dataProvider provideThrowsTagsData | 
| 102 | 104 | 	 * @dataProvider provideMixinTagsData | 
|  | 105 | +	 * @dataProvider provideRequireExtendsTagsData | 
|  | 106 | +	 * @dataProvider provideRequireImplementsTagsData | 
| 103 | 107 | 	 * @dataProvider provideDeprecatedTagsData | 
| 104 | 108 | 	 * @dataProvider providePropertyTagsData | 
| 105 | 109 | 	 * @dataProvider provideMethodTagsData | 
| @@ -1908,6 +1912,138 @@ public function provideMixinTagsData(): Iterator | 
| 1908 | 1912 | 		]; | 
| 1909 | 1913 | 	} | 
| 1910 | 1914 | 
 | 
|  | 1915 | +	public function provideRequireExtendsTagsData(): Iterator | 
|  | 1916 | +	{ | 
|  | 1917 | +		yield [ | 
|  | 1918 | +			'OK without description', | 
|  | 1919 | +			'/** @phpstan-require-extends Foo */', | 
|  | 1920 | +			new PhpDocNode([ | 
|  | 1921 | +				new PhpDocTagNode( | 
|  | 1922 | +					'@phpstan-require-extends', | 
|  | 1923 | +					new RequireExtendsTagValueNode( | 
|  | 1924 | +						new IdentifierTypeNode('Foo'), | 
|  | 1925 | +						'' | 
|  | 1926 | +					) | 
|  | 1927 | +				), | 
|  | 1928 | +			]), | 
|  | 1929 | +		]; | 
|  | 1930 | + | 
|  | 1931 | +		yield [ | 
|  | 1932 | +			'OK with description', | 
|  | 1933 | +			'/** @phpstan-require-extends Foo optional description */', | 
|  | 1934 | +			new PhpDocNode([ | 
|  | 1935 | +				new PhpDocTagNode( | 
|  | 1936 | +					'@phpstan-require-extends', | 
|  | 1937 | +					new RequireExtendsTagValueNode( | 
|  | 1938 | +						new IdentifierTypeNode('Foo'), | 
|  | 1939 | +						'optional description' | 
|  | 1940 | +					) | 
|  | 1941 | +				), | 
|  | 1942 | +			]), | 
|  | 1943 | +		]; | 
|  | 1944 | + | 
|  | 1945 | +		yield [ | 
|  | 1946 | +			'OK with psalm-prefix description', | 
|  | 1947 | +			'/** @psalm-require-extends Foo optional description */', | 
|  | 1948 | +			new PhpDocNode([ | 
|  | 1949 | +				new PhpDocTagNode( | 
|  | 1950 | +					'@psalm-require-extends', | 
|  | 1951 | +					new RequireExtendsTagValueNode( | 
|  | 1952 | +						new IdentifierTypeNode('Foo'), | 
|  | 1953 | +						'optional description' | 
|  | 1954 | +					) | 
|  | 1955 | +				), | 
|  | 1956 | +			]), | 
|  | 1957 | +		]; | 
|  | 1958 | + | 
|  | 1959 | +		yield [ | 
|  | 1960 | +			'invalid without type and description', | 
|  | 1961 | +			'/** @phpstan-require-extends */', | 
|  | 1962 | +			new PhpDocNode([ | 
|  | 1963 | +				new PhpDocTagNode( | 
|  | 1964 | +					'@phpstan-require-extends', | 
|  | 1965 | +					new InvalidTagValueNode( | 
|  | 1966 | +						'', | 
|  | 1967 | +						new ParserException( | 
|  | 1968 | +							'*/', | 
|  | 1969 | +							Lexer::TOKEN_CLOSE_PHPDOC, | 
|  | 1970 | +							29, | 
|  | 1971 | +							Lexer::TOKEN_IDENTIFIER, | 
|  | 1972 | +							null, | 
|  | 1973 | +							1 | 
|  | 1974 | +						) | 
|  | 1975 | +					) | 
|  | 1976 | +				), | 
|  | 1977 | +			]), | 
|  | 1978 | +		]; | 
|  | 1979 | +	} | 
|  | 1980 | + | 
|  | 1981 | +	public function provideRequireImplementsTagsData(): Iterator | 
|  | 1982 | +	{ | 
|  | 1983 | +		yield [ | 
|  | 1984 | +			'OK without description', | 
|  | 1985 | +			'/** @phpstan-require-implements Foo */', | 
|  | 1986 | +			new PhpDocNode([ | 
|  | 1987 | +				new PhpDocTagNode( | 
|  | 1988 | +					'@phpstan-require-implements', | 
|  | 1989 | +					new RequireImplementsTagValueNode( | 
|  | 1990 | +						new IdentifierTypeNode('Foo'), | 
|  | 1991 | +						'' | 
|  | 1992 | +					) | 
|  | 1993 | +				), | 
|  | 1994 | +			]), | 
|  | 1995 | +		]; | 
|  | 1996 | + | 
|  | 1997 | +		yield [ | 
|  | 1998 | +			'OK with description', | 
|  | 1999 | +			'/** @phpstan-require-implements Foo optional description */', | 
|  | 2000 | +			new PhpDocNode([ | 
|  | 2001 | +				new PhpDocTagNode( | 
|  | 2002 | +					'@phpstan-require-implements', | 
|  | 2003 | +					new RequireImplementsTagValueNode( | 
|  | 2004 | +						new IdentifierTypeNode('Foo'), | 
|  | 2005 | +						'optional description' | 
|  | 2006 | +					) | 
|  | 2007 | +				), | 
|  | 2008 | +			]), | 
|  | 2009 | +		]; | 
|  | 2010 | + | 
|  | 2011 | +		yield [ | 
|  | 2012 | +			'OK with psalm-prefix description', | 
|  | 2013 | +			'/** @psalm-require-implements Foo optional description */', | 
|  | 2014 | +			new PhpDocNode([ | 
|  | 2015 | +				new PhpDocTagNode( | 
|  | 2016 | +					'@psalm-require-implements', | 
|  | 2017 | +					new RequireImplementsTagValueNode( | 
|  | 2018 | +						new IdentifierTypeNode('Foo'), | 
|  | 2019 | +						'optional description' | 
|  | 2020 | +					) | 
|  | 2021 | +				), | 
|  | 2022 | +			]), | 
|  | 2023 | +		]; | 
|  | 2024 | + | 
|  | 2025 | +		yield [ | 
|  | 2026 | +			'invalid without type and description', | 
|  | 2027 | +			'/** @phpstan-require-implements */', | 
|  | 2028 | +			new PhpDocNode([ | 
|  | 2029 | +				new PhpDocTagNode( | 
|  | 2030 | +					'@phpstan-require-implements', | 
|  | 2031 | +					new InvalidTagValueNode( | 
|  | 2032 | +						'', | 
|  | 2033 | +						new ParserException( | 
|  | 2034 | +							'*/', | 
|  | 2035 | +							Lexer::TOKEN_CLOSE_PHPDOC, | 
|  | 2036 | +							32, | 
|  | 2037 | +							Lexer::TOKEN_IDENTIFIER, | 
|  | 2038 | +							null, | 
|  | 2039 | +							1 | 
|  | 2040 | +						) | 
|  | 2041 | +					) | 
|  | 2042 | +				), | 
|  | 2043 | +			]), | 
|  | 2044 | +		]; | 
|  | 2045 | +	} | 
|  | 2046 | + | 
| 1911 | 2047 | 	public function provideDeprecatedTagsData(): Iterator | 
| 1912 | 2048 | 	{ | 
| 1913 | 2049 | 		yield [ | 
|  | 
0 commit comments