mirror of
https://github.com/danog/psalm.git
synced 2024-11-26 20:34:47 +01:00
Emit an issue when returning a Stringable object when a string is expected (#4657)
* Emit an issue when returning a Stringable object when a string is expected * Fix issue in Psalm codebase
This commit is contained in:
parent
e9c608e7cb
commit
26410ad19d
@ -844,7 +844,9 @@ class Codebase
|
||||
*/
|
||||
public function getDeclaringMethodId($method_id): ?string
|
||||
{
|
||||
return $this->methods->getDeclaringMethodId(Internal\MethodIdentifier::wrap($method_id));
|
||||
$new_method_id = $this->methods->getDeclaringMethodId(Internal\MethodIdentifier::wrap($method_id));
|
||||
|
||||
return $new_method_id ? (string) $new_method_id : null;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -855,7 +857,9 @@ class Codebase
|
||||
*/
|
||||
public function getAppearingMethodId($method_id): ?string
|
||||
{
|
||||
return $this->methods->getAppearingMethodId(Internal\MethodIdentifier::wrap($method_id));
|
||||
$new_method_id = $this->methods->getAppearingMethodId(Internal\MethodIdentifier::wrap($method_id));
|
||||
|
||||
return $new_method_id ? (string) $new_method_id : null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -18,6 +18,7 @@ use Psalm\Internal\Type\Comparator\UnionTypeComparator;
|
||||
use Psalm\CodeLocation;
|
||||
use Psalm\Context;
|
||||
use Psalm\Internal\FileManipulation\FunctionDocblockManipulator;
|
||||
use Psalm\Issue\ImplicitToStringCast;
|
||||
use Psalm\Issue\InvalidFalsableReturnType;
|
||||
use Psalm\Issue\InvalidNullableReturnType;
|
||||
use Psalm\Issue\InvalidParent;
|
||||
@ -591,6 +592,20 @@ class ReturnTypeAnalyzer
|
||||
}
|
||||
}
|
||||
|
||||
if ($union_comparison_results->to_string_cast) {
|
||||
if (IssueBuffer::accepts(
|
||||
new ImplicitToStringCast(
|
||||
'The declared return type for ' . $cased_method_id . ' expects \'' .
|
||||
$declared_return_type . '\', ' . '\'' . $inferred_return_type .
|
||||
'\' provided with a __toString method',
|
||||
$return_type_location
|
||||
),
|
||||
$suppressed_issues
|
||||
)) {
|
||||
// fall through
|
||||
}
|
||||
}
|
||||
|
||||
if (!$inferred_return_type->ignore_nullable_issues
|
||||
&& $inferred_return_type->isNullable()
|
||||
&& !$declared_return_type->isNullable()
|
||||
|
@ -1040,7 +1040,7 @@ class Methods
|
||||
$method_id = $this->getDeclaringMethodId($original_method_id);
|
||||
|
||||
if ($method_id === null) {
|
||||
return $original_method_id;
|
||||
return (string) $original_method_id;
|
||||
}
|
||||
|
||||
$fq_class_name = $method_id->fq_class_name;
|
||||
|
Loading…
Reference in New Issue
Block a user