From 51535dde21c7abf65c9d000a30bb15f6478195e6 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 --- TypeContext/TypeContextFactory.php | 11 +++++++++-- TypeResolver/StringTypeResolver.php | 11 +++++++++-- composer.json | 2 +- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/TypeContext/TypeContextFactory.php b/TypeContext/TypeContextFactory.php index 97c7090..387719d 100644 --- a/TypeContext/TypeContextFactory.php +++ b/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/TypeResolver/StringTypeResolver.php b/TypeResolver/StringTypeResolver.php index aa24a63..a8d8c60 100644 --- a/TypeResolver/StringTypeResolver.php +++ b/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/composer.json b/composer.json index 54b1497..32c3a65 100644 --- a/composer.json +++ b/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" },