mirror of
https://github.com/danog/psalm-plugin-laravel.git
synced 2025-01-23 05:41:11 +01:00
Update return types
This commit is contained in:
parent
009b8477bb
commit
62f9610a2a
@ -11,7 +11,7 @@
|
|||||||
"illuminate/database": "5.8.* || ^6.0 || ^7.0 || ^8.0",
|
"illuminate/database": "5.8.* || ^6.0 || ^7.0 || ^8.0",
|
||||||
"illuminate/http": "5.8.* || ^6.0 || ^7.0 || ^8.0",
|
"illuminate/http": "5.8.* || ^6.0 || ^7.0 || ^8.0",
|
||||||
"illuminate/support": "5.8.* || ^6.0 || ^7.0 || ^8.0",
|
"illuminate/support": "5.8.* || ^6.0 || ^7.0 || ^8.0",
|
||||||
"vimeo/psalm": "4.0",
|
"vimeo/psalm": "4.0.0-beta3",
|
||||||
"orchestra/testbench": "^3.8 || ^4.0 || ^5.0 || ^6.0"
|
"orchestra/testbench": "^3.8 || ^4.0 || ^5.0 || ^6.0"
|
||||||
},
|
},
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
@ -19,6 +19,13 @@
|
|||||||
|
|
||||||
<issueHandlers>
|
<issueHandlers>
|
||||||
<LessSpecificReturnType errorLevel="info" />
|
<LessSpecificReturnType errorLevel="info" />
|
||||||
|
|
||||||
|
<PropertyNotSetInConstructor>
|
||||||
|
<errorLevel type="suppress">
|
||||||
|
<file name="src/FakeMetaCommand.php" />
|
||||||
|
<file name="src/FakeModelsCommand.php" />
|
||||||
|
</errorLevel>
|
||||||
|
</PropertyNotSetInConstructor>
|
||||||
</issueHandlers>
|
</issueHandlers>
|
||||||
|
|
||||||
<stubs>
|
<stubs>
|
||||||
|
@ -32,12 +32,14 @@ class AppInterfaceProvider implements
|
|||||||
string $method_name_lowercase,
|
string $method_name_lowercase,
|
||||||
StatementsSource $source = null,
|
StatementsSource $source = null,
|
||||||
CodeLocation $code_location = null
|
CodeLocation $code_location = null
|
||||||
) {
|
) : ?bool {
|
||||||
if ($method_name_lowercase === 'offsetget'
|
if ($method_name_lowercase === 'offsetget'
|
||||||
|| $method_name_lowercase === 'offsetset'
|
|| $method_name_lowercase === 'offsetset'
|
||||||
) {
|
) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -49,12 +51,14 @@ class AppInterfaceProvider implements
|
|||||||
string $method_name_lowercase,
|
string $method_name_lowercase,
|
||||||
Context $context,
|
Context $context,
|
||||||
CodeLocation $code_location = null
|
CodeLocation $code_location = null
|
||||||
) {
|
) : ?bool {
|
||||||
if ($method_name_lowercase === 'offsetget'
|
if ($method_name_lowercase === 'offsetget'
|
||||||
|| $method_name_lowercase === 'offsetset'
|
|| $method_name_lowercase === 'offsetset'
|
||||||
) {
|
) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -68,7 +72,7 @@ class AppInterfaceProvider implements
|
|||||||
StatementsSource $statements_source = null,
|
StatementsSource $statements_source = null,
|
||||||
Context $context = null,
|
Context $context = null,
|
||||||
CodeLocation $code_location = null
|
CodeLocation $code_location = null
|
||||||
) {
|
) : ?array {
|
||||||
if ($statements_source) {
|
if ($statements_source) {
|
||||||
if ($method_name_lowercase === 'offsetget' || $method_name_lowercase === 'offsetset') {
|
if ($method_name_lowercase === 'offsetget' || $method_name_lowercase === 'offsetset') {
|
||||||
return $statements_source->getCodebase()->getMethodParams(
|
return $statements_source->getCodebase()->getMethodParams(
|
||||||
@ -76,11 +80,12 @@ class AppInterfaceProvider implements
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array<PhpParser\Node\Arg> $call_args
|
* @param array<PhpParser\Node\Arg> $call_args
|
||||||
* @return ?Type\Union
|
|
||||||
*/
|
*/
|
||||||
public static function getMethodReturnType(
|
public static function getMethodReturnType(
|
||||||
StatementsSource $source,
|
StatementsSource $source,
|
||||||
@ -92,12 +97,14 @@ class AppInterfaceProvider implements
|
|||||||
array $template_type_parameters = null,
|
array $template_type_parameters = null,
|
||||||
string $called_fq_classlike_name = null,
|
string $called_fq_classlike_name = null,
|
||||||
string $called_method_name_lowercase = null
|
string $called_method_name_lowercase = null
|
||||||
) {
|
) : ?Type\Union {
|
||||||
if ($method_name_lowercase === 'offsetget' || $method_name_lowercase === 'offsetset') {
|
if ($method_name_lowercase === 'offsetget' || $method_name_lowercase === 'offsetset') {
|
||||||
return $source->getCodebase()->getMethodReturnType(
|
return $source->getCodebase()->getMethodReturnType(
|
||||||
get_class(ApplicationHelper::getApp()) . '::' . $method_name_lowercase,
|
get_class(ApplicationHelper::getApp()) . '::' . $method_name_lowercase,
|
||||||
$fq_classlike_name
|
$fq_classlike_name
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,10 +23,7 @@ class Plugin implements PluginEntryPointInterface
|
|||||||
/** @var array<string> */
|
/** @var array<string> */
|
||||||
public static $model_classes = [];
|
public static $model_classes = [];
|
||||||
|
|
||||||
/**
|
public function __invoke(RegistrationInterface $registration, ?SimpleXMLElement $config = null) : void
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function __invoke(RegistrationInterface $registration, ?SimpleXMLElement $config = null)
|
|
||||||
{
|
{
|
||||||
$app = ApplicationHelper::bootApp();
|
$app = ApplicationHelper::bootApp();
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ class ModelPropertyProvider implements
|
|||||||
StatementsSource $source = null,
|
StatementsSource $source = null,
|
||||||
Context $context = null,
|
Context $context = null,
|
||||||
CodeLocation $code_location = null
|
CodeLocation $code_location = null
|
||||||
) {
|
) : ?bool {
|
||||||
if (!$source || !$read_mode) {
|
if (!$source || !$read_mode) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -71,7 +71,7 @@ class ModelPropertyProvider implements
|
|||||||
bool $read_mode,
|
bool $read_mode,
|
||||||
Context $context,
|
Context $context,
|
||||||
CodeLocation $code_location = null
|
CodeLocation $code_location = null
|
||||||
) {
|
) : ?bool {
|
||||||
if (!$read_mode) {
|
if (!$read_mode) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -105,7 +105,7 @@ class ModelPropertyProvider implements
|
|||||||
bool $read_mode,
|
bool $read_mode,
|
||||||
StatementsSource $source = null,
|
StatementsSource $source = null,
|
||||||
Context $context = null
|
Context $context = null
|
||||||
) {
|
) : ?Type\Union {
|
||||||
if (!$source || !$read_mode) {
|
if (!$source || !$read_mode) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -171,6 +171,8 @@ class ModelPropertyProvider implements
|
|||||||
return $codebase->getMethodReturnType($fq_classlike_name . '::get' . str_replace('_', '', $property_name) . 'Attribute', $fq_classlike_name)
|
return $codebase->getMethodReturnType($fq_classlike_name . '::get' . str_replace('_', '', $property_name) . 'Attribute', $fq_classlike_name)
|
||||||
?: Type::getMixed();
|
?: Type::getMixed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -47,8 +47,17 @@ final class AppReturnTypeProvider implements FunctionReturnTypeProviderInterface
|
|||||||
return [get_class(ApplicationHelper::getApp())];
|
return [get_class(ApplicationHelper::getApp())];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getMethodReturnType(StatementsSource $source, string $fq_classlike_name, string $method_name_lowercase, array $call_args, Context $context, CodeLocation $code_location, array $template_type_parameters = null, string $called_fq_classlike_name = null, string $called_method_name_lowercase = null)
|
public static function getMethodReturnType(
|
||||||
{
|
StatementsSource $source,
|
||||||
|
string $fq_classlike_name,
|
||||||
|
string $method_name_lowercase,
|
||||||
|
array $call_args,
|
||||||
|
Context $context,
|
||||||
|
CodeLocation $code_location,
|
||||||
|
?array $template_type_parameters = null,
|
||||||
|
?string $called_fq_classlike_name = null,
|
||||||
|
?string $called_method_name_lowercase = null
|
||||||
|
) : ?Type\Union {
|
||||||
// lumen doesn't have the likes of makeWith, so we will ensure these methods actually exist on the underlying
|
// lumen doesn't have the likes of makeWith, so we will ensure these methods actually exist on the underlying
|
||||||
// app contract
|
// app contract
|
||||||
$methods = array_filter(['make', 'makewith'], function (string $methodName) use ($source, $fq_classlike_name) {
|
$methods = array_filter(['make', 'makewith'], function (string $methodName) use ($source, $fq_classlike_name) {
|
||||||
|
@ -39,7 +39,7 @@ final class ModelReturnTypeProvider implements MethodReturnTypeProviderInterface
|
|||||||
array $template_type_parameters = null,
|
array $template_type_parameters = null,
|
||||||
string $called_fq_classlike_name = null,
|
string $called_fq_classlike_name = null,
|
||||||
string $called_method_name_lowercase = null
|
string $called_method_name_lowercase = null
|
||||||
) {
|
) : ?Type\Union {
|
||||||
if (!$source instanceof \Psalm\Internal\Analyzer\StatementsAnalyzer) {
|
if (!$source instanceof \Psalm\Internal\Analyzer\StatementsAnalyzer) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -21,8 +21,13 @@ final class PathHelpersReturnTypeProvider implements FunctionReturnTypeProviderI
|
|||||||
return ['app_path', 'base_path', 'config_path', 'database_path', 'resource_path', 'public_path', 'storage_path'];
|
return ['app_path', 'base_path', 'config_path', 'database_path', 'resource_path', 'public_path', 'storage_path'];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getFunctionReturnType(StatementsSource $statements_source, string $function_id, array $call_args, Context $context, CodeLocation $code_location)
|
public static function getFunctionReturnType(
|
||||||
{
|
StatementsSource $statements_source,
|
||||||
|
string $function_id,
|
||||||
|
array $call_args,
|
||||||
|
Context $context,
|
||||||
|
CodeLocation $code_location
|
||||||
|
) : ?Union {
|
||||||
/**
|
/**
|
||||||
* @psalm-suppress MissingClosureReturnType
|
* @psalm-suppress MissingClosureReturnType
|
||||||
*/
|
*/
|
||||||
@ -38,8 +43,17 @@ final class PathHelpersReturnTypeProvider implements FunctionReturnTypeProviderI
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getMethodReturnType(StatementsSource $source, string $fq_classlike_name, string $method_name_lowercase, array $call_args, Context $context, CodeLocation $code_location, array $template_type_parameters = null, string $called_fq_classlike_name = null, string $called_method_name_lowercase = null)
|
public static function getMethodReturnType(
|
||||||
{
|
StatementsSource $source,
|
||||||
|
string $fq_classlike_name,
|
||||||
|
string $method_name_lowercase,
|
||||||
|
array $call_args,
|
||||||
|
Context $context,
|
||||||
|
CodeLocation $code_location,
|
||||||
|
array $template_type_parameters = null,
|
||||||
|
string $called_fq_classlike_name = null,
|
||||||
|
string $called_method_name_lowercase = null
|
||||||
|
) : ?Union {
|
||||||
$methods = ['path', 'basepath', 'configpath', 'databasepath', 'resourcepath'];
|
$methods = ['path', 'basepath', 'configpath', 'databasepath', 'resourcepath'];
|
||||||
|
|
||||||
if (!in_array($method_name_lowercase, $methods)) {
|
if (!in_array($method_name_lowercase, $methods)) {
|
||||||
|
@ -27,8 +27,13 @@ class RedirectReturnTypeProvider implements FunctionReturnTypeProviderInterface
|
|||||||
*
|
*
|
||||||
* @return ?Type\Union
|
* @return ?Type\Union
|
||||||
*/
|
*/
|
||||||
public static function getFunctionReturnType(StatementsSource $statements_source, string $function_id, array $call_args, Context $context, CodeLocation $code_location)
|
public static function getFunctionReturnType(
|
||||||
{
|
StatementsSource $statements_source,
|
||||||
|
string $function_id,
|
||||||
|
array $call_args,
|
||||||
|
Context $context,
|
||||||
|
CodeLocation $code_location
|
||||||
|
) : ?Type\Union {
|
||||||
if (!$call_args) {
|
if (!$call_args) {
|
||||||
return new Type\Union([
|
return new Type\Union([
|
||||||
new Type\Atomic\TNamedObject(Redirector::class)
|
new Type\Atomic\TNamedObject(Redirector::class)
|
||||||
|
@ -41,8 +41,17 @@ final class RelationReturnTypeProvider implements MethodReturnTypeProviderInterf
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getMethodReturnType(StatementsSource $source, string $fq_classlike_name, string $method_name_lowercase, array $call_args, Context $context, CodeLocation $code_location, array $template_type_parameters = null, string $called_fq_classlike_name = null, string $called_method_name_lowercase = null)
|
public static function getMethodReturnType(
|
||||||
{
|
StatementsSource $source,
|
||||||
|
string $fq_classlike_name,
|
||||||
|
string $method_name_lowercase,
|
||||||
|
array $call_args,
|
||||||
|
Context $context,
|
||||||
|
CodeLocation $code_location,
|
||||||
|
array $template_type_parameters = null,
|
||||||
|
string $called_fq_classlike_name = null,
|
||||||
|
string $called_method_name_lowercase = null
|
||||||
|
) : ?Union {
|
||||||
if (!$source instanceof \Psalm\Internal\Analyzer\StatementsAnalyzer) {
|
if (!$source instanceof \Psalm\Internal\Analyzer\StatementsAnalyzer) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -18,8 +18,13 @@ final class UrlReturnTypeProvider implements FunctionReturnTypeProviderInterface
|
|||||||
return ['url'];
|
return ['url'];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getFunctionReturnType(StatementsSource $statements_source, string $function_id, array $call_args, Context $context, CodeLocation $code_location)
|
public static function getFunctionReturnType(
|
||||||
{
|
StatementsSource $statements_source,
|
||||||
|
string $function_id,
|
||||||
|
array $call_args,
|
||||||
|
Context $context,
|
||||||
|
CodeLocation $code_location
|
||||||
|
) : ?Union {
|
||||||
if (!$call_args) {
|
if (!$call_args) {
|
||||||
return new Union([
|
return new Union([
|
||||||
new TNamedObject(UrlGenerator::class),
|
new TNamedObject(UrlGenerator::class),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user