diff --git a/src/Lexer/Lexer.php b/src/Lexer/Lexer.php index dd8c6265..1b98839d 100644 --- a/src/Lexer/Lexer.php +++ b/src/Lexer/Lexer.php @@ -146,7 +146,7 @@ private function generateRegexp(): string self::TOKEN_OPEN_PHPDOC => '/\\*\\*(?=\\s)\\x20?+', self::TOKEN_CLOSE_PHPDOC => '\\*/', - self::TOKEN_PHPDOC_TAG => '@[a-z][a-z0-9-\\\\]*+', + self::TOKEN_PHPDOC_TAG => '@(?:[a-z][a-z0-9-\\\\]+:)?[a-z][a-z0-9-\\\\]*+', self::TOKEN_PHPDOC_EOL => '\\r?+\\n[\\x09\\x20]*+(?:\\*(?!/)\\x20?+)?', self::TOKEN_FLOAT => '(?:-?[0-9]++\\.[0-9]*+(?:e-?[0-9]++)?)|(?:-?[0-9]*+\\.[0-9]++(?:e-?[0-9]++)?)|(?:-?[0-9]++e-?[0-9]++)', diff --git a/tests/PHPStan/Parser/PhpDocParserTest.php b/tests/PHPStan/Parser/PhpDocParserTest.php index c81a3a4c..5b9d5329 100644 --- a/tests/PHPStan/Parser/PhpDocParserTest.php +++ b/tests/PHPStan/Parser/PhpDocParserTest.php @@ -75,6 +75,7 @@ protected function setUp(): void /** * @dataProvider provideTagsWithNumbers + * @dataProvider provideSpecializedTags * @dataProvider provideParamTagsData * @dataProvider provideTypelessParamTagsData * @dataProvider provideVarTagsData @@ -4851,6 +4852,22 @@ public function provideParamOutTagsData(): Iterator ]; } + public function provideSpecializedTags(): Iterator + { + yield [ + 'Ok specialized tag', + '/** @special:param this is special */', + new PhpDocNode([ + new PhpDocTagNode( + '@special:param', + new GenericTagValueNode( + 'this is special' + ) + ), + ]), + ]; + } + /** * @dataProvider dataParseTagValue * @param PhpDocNode $expectedPhpDocNode