|
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