1
0
mirror of https://github.com/danog/psalm.git synced 2024-11-26 20:34:47 +01:00

Add more test case scenario for @psalm-import-type (#3375)

* Add test case scenario for @psalm-import-type

Signed-off-by: Jefersson Nathan <malukenho.dev@gmail.com>

* Add fix for @psalm-import-type test

Signed-off-by: Jefersson Nathan <malukenho.dev@gmail.com>

* Add test for import ocross namespaces

Signed-off-by: Jefersson Nathan <malukenho.dev@gmail.com>

* Add tests for failing cases

Signed-off-by: Jefersson Nathan <malukenho.dev@gmail.com>
This commit is contained in:
Jefersson Nathan 2020-05-16 22:43:35 +02:00 committed by GitHub
parent 4dd0a2b775
commit f824cc380a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 97 additions and 1 deletions

View File

@ -78,7 +78,7 @@ class TypeParser
} else {
$only_token[0] = TypeTokenizer::fixScalarTerms($only_token[0], $php_version);
$atomic = Atomic::create($only_token[0], $php_version, $template_type_map);
$atomic = Atomic::create($only_token[0], $php_version, $template_type_map, $type_aliases);
$atomic->offset_start = 0;
$atomic->offset_end = strlen($only_token[0]);

View File

@ -189,6 +189,70 @@ class TypeAnnotationTest extends TestCase
}
}'
],
'classTypeAliasImportWithAlias' => [
'<?php
/** @psalm-type PhoneType = array{phone: string} */
class Phone {
/** @psalm-return PhoneType */
public function toArray(): array {
return ["phone" => "Nokia"];
}
}
/**
* @psalm-import-type PhoneType from Phone as TPhone
*/
class User {
/** @psalm-return TPhone */
function toArray(): array {
return array_merge([], (new Phone)->toArray());
}
}'
],
'classTypeAliasDirectUsage' => [
'<?php
/** @psalm-type PhoneType = array{phone: string} */
class Phone {
/** @psalm-return PhoneType */
public function toArray(): array {
return ["phone" => "Nokia"];
}
}
/**
* @psalm-import-type PhoneType from Phone
*/
class User {
/** @psalm-return PhoneType */
function toArray(): array {
return array_merge([], (new Phone)->toArray());
}
}'
],
'classTypeAliasFromExternalNamespace' => [
'<?php
namespace Foo {
/** @psalm-type PhoneType = array{phone: string} */
class Phone {
/** @psalm-return PhoneType */
public function toArray(): array {
return ["phone" => "Nokia"];
}
}
}
namespace Bar {
/**
* @psalm-import-type PhoneType from \Foo\Phone
*/
class User {
/** @psalm-return PhoneType */
function toArray(): array {
return (new \Foo\Phone)->toArray();
}
}
}'
],
];
}
@ -254,6 +318,38 @@ class TypeAnnotationTest extends TestCase
}',
'error_message' => 'InvalidReturnStatement',
],
'classTypeInvalidAlias' => [
'<?php
class Phone {
function toArray(): array {
return ["name" => "Matt"];
}
}
/**
* @psalm-import-type PhoneType from Phone
*/
class User {
/** @psalm-return UserType */
function toArray(): array {
return (new Phone)->toArray();
}
}',
'error_message' => 'UndefinedDocblockClass',
],
'classTypeAliasFromInvalidClass' => [
'<?php
/**
* @psalm-import-type PhoneType from Phone
*/
class User {
/** @psalm-return UserType */
function toArray(): array {
return [];
}
}',
'error_message' => 'UndefinedDocblockClass',
],
];
}
}