From b3dc1d9d34ec6f8e6ccc7b8fafee6c4ebaace9c3 Mon Sep 17 00:00:00 2001 From: Ruud Kamphuis Date: Fri, 6 Sep 2024 14:00:23 +0200 Subject: [PATCH] Make array/object keys quote aware Fixes phpstan/phpdoc-parser#251 --- src/Type/Constant/ConstantArrayType.php | 3 +++ src/Type/ObjectShapeType.php | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/Type/Constant/ConstantArrayType.php b/src/Type/Constant/ConstantArrayType.php index 5ab51870a8..8b46fdcb34 100644 --- a/src/Type/Constant/ConstantArrayType.php +++ b/src/Type/Constant/ConstantArrayType.php @@ -9,6 +9,7 @@ use PHPStan\Php\PhpVersion; use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprIntegerNode; use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprStringNode; +use PHPStan\PhpDocParser\Ast\ConstExpr\QuoteAwareConstExprStringNode; use PHPStan\PhpDocParser\Ast\Type\ArrayShapeItemNode; use PHPStan\PhpDocParser\Ast\Type\ArrayShapeNode; use PHPStan\PhpDocParser\Ast\Type\ConstTypeNode; @@ -1666,6 +1667,8 @@ public function toPhpDocNode(): TypeNode $value = $keyNode->value; if (self::isValidIdentifier($value)) { $keyNode = new IdentifierTypeNode($value); + } else { + $keyNode = new QuoteAwareConstExprStringNode($value, QuoteAwareConstExprStringNode::SINGLE_QUOTED); } } diff --git a/src/Type/ObjectShapeType.php b/src/Type/ObjectShapeType.php index a00324259a..35a640df84 100644 --- a/src/Type/ObjectShapeType.php +++ b/src/Type/ObjectShapeType.php @@ -5,6 +5,7 @@ use PHPStan\Analyser\OutOfClassScope; use PHPStan\Broker\Broker; use PHPStan\PhpDocParser\Ast\ConstExpr\ConstExprStringNode; +use PHPStan\PhpDocParser\Ast\ConstExpr\QuoteAwareConstExprStringNode; use PHPStan\PhpDocParser\Ast\Type\ConstTypeNode; use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode; use PHPStan\PhpDocParser\Ast\Type\ObjectShapeItemNode; @@ -519,6 +520,8 @@ public function toPhpDocNode(): TypeNode /** @var ConstExprStringNode $keyNode */ $keyNode = $keyPhpDocNode->constExpr; + + $keyNode = new QuoteAwareConstExprStringNode($keyNode->value, QuoteAwareConstExprStringNode::SINGLE_QUOTED); } $items[] = new ObjectShapeItemNode( $keyNode,