Skip to content

Commit 39538f9

Browse files
committed
Improve docblock driver code
1 parent cede05e commit 39538f9

File tree

1 file changed

+25
-13
lines changed

1 file changed

+25
-13
lines changed

src/Mapping/Driver/DocBlockDriver.php

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
use TypeLang\Mapper\Mapping\Metadata\ClassMetadata;
1616
use TypeLang\Mapper\Runtime\Parser\TypeParserInterface;
1717
use TypeLang\Mapper\Runtime\Repository\TypeRepositoryInterface;
18-
use TypeLang\PHPDoc\Parser;
18+
use TypeLang\Parser\Parser;
19+
use TypeLang\PHPDoc\Parser as DocBlockParser;
1920
use TypeLang\PHPDoc\Standard\ParamTagFactory;
2021
use TypeLang\PHPDoc\Standard\VarTagFactory;
2122
use TypeLang\PHPDoc\Tag\Factory\TagFactory;
@@ -61,22 +62,17 @@ public function __construct(
6162
string $varTagName = self::DEFAULT_VAR_TAG_NAME,
6263
DriverInterface $delegate = new NullDriver(),
6364
) {
64-
self::assertKernelPackageIsInstalled();
65-
66-
$parser = new Parser(new TagFactory([
67-
$paramTagName => new ParamTagFactory(),
68-
$varTagName => new VarTagFactory(),
69-
]));
65+
$docBlockParser = $this->createDocBlockParser($paramTagName, $varTagName);
7066

7167
$this->varTags = new VarTagReader(
7268
varTagName: $varTagName,
73-
parser: $parser,
69+
parser: $docBlockParser,
7470
);
7571

7672
$this->paramTags = new ParamTagReader(
7773
paramTagName: $paramTagName,
7874
varTag: $this->varTags,
79-
parser: $parser,
75+
parser: $docBlockParser,
8076
);
8177

8278
$this->classDocBlockLoaders = $this->createClassLoaders();
@@ -85,6 +81,22 @@ public function __construct(
8581
parent::__construct($delegate);
8682
}
8783

84+
/**
85+
* @param non-empty-string $paramTagName
86+
* @param non-empty-string $varTagName
87+
*/
88+
private function createDocBlockParser(string $paramTagName, string $varTagName): DocBlockParser
89+
{
90+
self::assertKernelPackageIsInstalled();
91+
92+
$typeParser = new Parser(tolerant: true);
93+
94+
return new DocBlockParser(new TagFactory([
95+
$paramTagName => new ParamTagFactory($typeParser),
96+
$varTagName => new VarTagFactory($typeParser),
97+
]));
98+
}
99+
88100
/**
89101
* @return list<ClassDocBlockLoaderInterface>
90102
*/
@@ -112,24 +124,24 @@ private function createPropertyLoaders(): array
112124
*/
113125
private static function assertKernelPackageIsInstalled(): void
114126
{
115-
if (!\class_exists(Parser::class)) {
127+
if (!\class_exists(DocBlockParser::class)) {
116128
throw ComposerPackageRequiredException::becausePackageNotInstalled(
117129
package: 'type-lang/phpdoc',
118-
purpose: 'docblock support'
130+
purpose: 'docblock support',
119131
);
120132
}
121133

122134
if (!\class_exists(ParamTagFactory::class)) {
123135
throw ComposerPackageRequiredException::becausePackageNotInstalled(
124136
package: 'type-lang/phpdoc-standard-tags',
125-
purpose: '"@param" tag support'
137+
purpose: '"@param" tag support',
126138
);
127139
}
128140

129141
if (!\class_exists(VarTagFactory::class)) {
130142
throw ComposerPackageRequiredException::becausePackageNotInstalled(
131143
package: 'type-lang/phpdoc-standard-tags',
132-
purpose: '"@var" tag support'
144+
purpose: '"@var" tag support',
133145
);
134146
}
135147
}

0 commit comments

Comments
 (0)