From ecb34a7088f1bdee48ad7fbcd31aecab733a9d0d Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Thu, 7 Nov 2024 16:24:12 +0100 Subject: [PATCH] fix support for phpstan/phpdoc-parser 2 --- src/Symfony/Component/Serializer/composer.json | 2 +- .../TypeInfo/TypeContext/TypeContextFactory.php | 11 +++++++++-- .../TypeInfo/TypeResolver/StringTypeResolver.php | 11 +++++++++-- src/Symfony/Component/TypeInfo/composer.json | 2 +- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/Symfony/Component/Serializer/composer.json b/src/Symfony/Component/Serializer/composer.json index 948fa36fa0d00..d7bef296b08df 100644 --- a/src/Symfony/Component/Serializer/composer.json +++ b/src/Symfony/Component/Serializer/composer.json @@ -22,7 +22,7 @@ }, "require-dev": { "phpdocumentor/reflection-docblock": "^3.2|^4.0|^5.0", - "phpstan/phpdoc-parser": "^1.0", + "phpstan/phpdoc-parser": "^1.0|^2.0", "seld/jsonlint": "^1.10", "symfony/cache": "^6.4|^7.0", "symfony/config": "^6.4|^7.0", diff --git a/src/Symfony/Component/TypeInfo/TypeContext/TypeContextFactory.php b/src/Symfony/Component/TypeInfo/TypeContext/TypeContextFactory.php index 97c7090f8b44a..387719d56d6d6 100644 --- a/src/Symfony/Component/TypeInfo/TypeContext/TypeContextFactory.php +++ b/src/Symfony/Component/TypeInfo/TypeContext/TypeContextFactory.php @@ -17,6 +17,7 @@ use PHPStan\PhpDocParser\Parser\PhpDocParser; use PHPStan\PhpDocParser\Parser\TokenIterator; use PHPStan\PhpDocParser\Parser\TypeParser; +use PHPStan\PhpDocParser\ParserConfig; use Symfony\Component\TypeInfo\Exception\RuntimeException; use Symfony\Component\TypeInfo\Exception\UnsupportedException; use Symfony\Component\TypeInfo\Type; @@ -157,8 +158,14 @@ private function collectTemplates(\ReflectionClass|\ReflectionFunctionAbstract $ return []; } - $this->phpstanLexer ??= new Lexer(); - $this->phpstanParser ??= new PhpDocParser(new TypeParser(new ConstExprParser()), new ConstExprParser()); + if (class_exists(ParserConfig::class)) { + $config = new ParserConfig([]); + $this->phpstanLexer ??= new Lexer($config); + $this->phpstanParser ??= new PhpDocParser($config, new TypeParser($config, new ConstExprParser($config)), new ConstExprParser($config)); + } else { + $this->phpstanLexer ??= new Lexer(); + $this->phpstanParser ??= new PhpDocParser(new TypeParser(new ConstExprParser()), new ConstExprParser()); + } $tokens = new TokenIterator($this->phpstanLexer->tokenize($rawDocNode)); diff --git a/src/Symfony/Component/TypeInfo/TypeResolver/StringTypeResolver.php b/src/Symfony/Component/TypeInfo/TypeResolver/StringTypeResolver.php index aa24a63f25f89..a8d8c600cdbee 100644 --- a/src/Symfony/Component/TypeInfo/TypeResolver/StringTypeResolver.php +++ b/src/Symfony/Component/TypeInfo/TypeResolver/StringTypeResolver.php @@ -34,6 +34,7 @@ use PHPStan\PhpDocParser\Parser\ConstExprParser; use PHPStan\PhpDocParser\Parser\TokenIterator; use PHPStan\PhpDocParser\Parser\TypeParser; +use PHPStan\PhpDocParser\ParserConfig; use Symfony\Component\TypeInfo\Exception\InvalidArgumentException; use Symfony\Component\TypeInfo\Exception\UnsupportedException; use Symfony\Component\TypeInfo\Type; @@ -63,8 +64,14 @@ final class StringTypeResolver implements TypeResolverInterface public function __construct() { - $this->lexer = new Lexer(); - $this->parser = new TypeParser(new ConstExprParser()); + if (class_exists(ParserConfig::class)) { + $config = new ParserConfig([]); + $this->lexer = new Lexer($config); + $this->parser = new TypeParser($config, new ConstExprParser($config)); + } else { + $this->lexer = new Lexer(); + $this->parser = new TypeParser(new ConstExprParser()); + } } public function resolve(mixed $subject, ?TypeContext $typeContext = null): Type diff --git a/src/Symfony/Component/TypeInfo/composer.json b/src/Symfony/Component/TypeInfo/composer.json index 54b14975d9f49..32c3a65ab1d5a 100644 --- a/src/Symfony/Component/TypeInfo/composer.json +++ b/src/Symfony/Component/TypeInfo/composer.json @@ -29,7 +29,7 @@ "psr/container": "^1.1|^2.0" }, "require-dev": { - "phpstan/phpdoc-parser": "^1.0", + "phpstan/phpdoc-parser": "^1.0|^2.0", "symfony/dependency-injection": "^6.4|^7.0", "symfony/property-info": "^6.4|^7.0" },