Skip to content

Commit efe6be1

Browse files
authored
Support for the nullable list with question mark (#125)
1 parent 1f359f6 commit efe6be1

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

src/Ast/PhpDocTypeParser.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use PHPStan\PhpDocParser\Ast\Type\ArrayTypeNode;
1414
use PHPStan\PhpDocParser\Ast\Type\GenericTypeNode;
1515
use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
16+
use PHPStan\PhpDocParser\Ast\Type\NullableTypeNode;
1617
use PHPStan\PhpDocParser\Ast\Type\TypeNode;
1718
use PHPStan\PhpDocParser\Ast\Type\UnionTypeNode;
1819
use PHPStan\PhpDocParser\Lexer\Lexer;
@@ -22,6 +23,7 @@
2223
use PHPStan\PhpDocParser\Parser\TypeParser;
2324
use Riverwaysoft\PhpConverter\Dto\DtoClassProperty;
2425
use Riverwaysoft\PhpConverter\Dto\PhpType\PhpListType;
26+
use Riverwaysoft\PhpConverter\Dto\PhpType\PhpOptionalType;
2527
use Riverwaysoft\PhpConverter\Dto\PhpType\PhpTypeFactory;
2628
use Riverwaysoft\PhpConverter\Dto\PhpType\PhpTypeInterface;
2729
use Riverwaysoft\PhpConverter\Dto\PhpType\PhpUnionType;
@@ -144,6 +146,9 @@ private function convertToDto(TypeNode $node): PhpTypeInterface|null
144146
if ($node instanceof UnionTypeNode) {
145147
return new PhpUnionType(array_map(fn (TypeNode $child) => $this->convertToDto($child), $node->types));
146148
}
149+
if ($node instanceof NullableTypeNode) {
150+
return new PhpOptionalType($this->convertToDto($node->type));
151+
}
147152
if ($node instanceof GenericTypeNode) {
148153
return PhpTypeFactory::create($node->type->name, array_map(
149154
fn (TypeNode $child) => $this->convertToDto($child),

tests/Ast/PhpDocTypeParserTest.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Riverwaysoft\PhpConverter\Dto\DtoClassProperty;
1111
use Riverwaysoft\PhpConverter\Dto\PhpType\PhpBaseType;
1212
use Riverwaysoft\PhpConverter\Dto\PhpType\PhpListType;
13+
use Riverwaysoft\PhpConverter\Dto\PhpType\PhpOptionalType;
1314
use Riverwaysoft\PhpConverter\Dto\PhpType\PhpTypeInterface;
1415
use Riverwaysoft\PhpConverter\Dto\PhpType\PhpUnionType;
1516
use Riverwaysoft\PhpConverter\Dto\PhpType\PhpUnknownType;
@@ -112,6 +113,15 @@ public static function getDataVarAndReturn(): array
112113
PhpBaseType::null(),
113114
]),
114115
],
116+
[
117+
'nullable optional string array',
118+
'/** @var ?string[] */',
119+
new PhpOptionalType(
120+
new PhpListType(
121+
PhpBaseType::string(),
122+
),
123+
),
124+
],
115125
[
116126
'2d array',
117127
'/** @var int[][] */',

0 commit comments

Comments
 (0)