55namespace TypeLang \PHPDoc \Parser \Tag ;
66
77use TypeLang \PHPDoc \Exception \InvalidTagNameException ;
8+ use TypeLang \PHPDoc \FactoryInterface ;
89use TypeLang \PHPDoc \Parser \Description \DescriptionParserInterface ;
910use TypeLang \PHPDoc \Tag \Tag ;
1011
@@ -15,6 +16,10 @@ final class TagParser implements TagParserInterface
1516 */
1617 private const PATTERN_TAG = '\G@[a-zA-Z_\x80-\xff \\\][\w\x80-\xff\-: \\\]* ' ;
1718
19+ public function __construct (
20+ private readonly FactoryInterface $ tags ,
21+ ) {}
22+
1823 /**
1924 * Read tag name from passed content.
2025 *
@@ -54,33 +59,17 @@ private function getTagName(string $content): string
5459 }
5560
5661 /**
57- * @return array{non-empty-string, string}
5862 * @throws InvalidTagNameException
5963 */
60- private function getTagParts (string $ content ): array
64+ public function parse (string $ tag , DescriptionParserInterface $ parser ): Tag
6165 {
62- $ name = $ this ->getTagName ($ content );
66+ $ name = $ this ->getTagName ($ tag );
6367 /** @var non-empty-string $name */
6468 $ name = \substr ($ name , 1 );
6569
66- $ content = \substr ($ content , \strlen ($ name ) + 1 );
70+ $ content = \substr ($ tag , \strlen ($ name ) + 1 );
6771 $ content = \ltrim ($ content );
6872
69- return [$ name , $ content ];
70- }
71-
72- /**
73- * @throws InvalidTagNameException
74- */
75- public function parse (string $ tag , DescriptionParserInterface $ parser = null ): Tag
76- {
77- // Tag name like ["var", "example"] extracted from "@var example"
78- [$ name , $ content ] = $ this ->getTagParts ($ tag );
79-
80- if ($ parser !== null ) {
81- $ content = $ parser ->parse ($ content , $ this );
82- }
83-
84- return new Tag ($ name , $ content );
73+ return $ this ->tags ->create ($ name , $ content , $ parser );
8574 }
8675}
0 commit comments