mirror of
https://github.com/danog/psalm.git
synced 2024-12-02 09:37:59 +01:00
fix possibly undefined array key in keyed array doesnt include null when not validated
Fix https://psalm.dev/r/b153d0d248 to return 'a'|null instead of 'a' - this is required as otherwise empty would report RedundantCondition errors now which would bring back https://github.com/vimeo/psalm/issues/2681
This commit is contained in:
parent
63ea734f26
commit
19b1a33a20
@ -313,14 +313,18 @@ final class ArrayFetchAnalyzer
|
|||||||
&& !$context->inside_unset
|
&& !$context->inside_unset
|
||||||
&& ($stmt_var_type && !$stmt_var_type->hasMixed())
|
&& ($stmt_var_type && !$stmt_var_type->hasMixed())
|
||||||
) {
|
) {
|
||||||
IssueBuffer::maybeAdd(
|
if (IssueBuffer::accepts(
|
||||||
new PossiblyUndefinedArrayOffset(
|
new PossiblyUndefinedArrayOffset(
|
||||||
'Possibly undefined array key ' . $keyed_array_var_id
|
'Possibly undefined array key ' . $keyed_array_var_id
|
||||||
. ' on ' . $stmt_var_type->getId(),
|
. ' on ' . $stmt_var_type->getId(),
|
||||||
new CodeLocation($statements_analyzer->getSource(), $stmt),
|
new CodeLocation($statements_analyzer->getSource(), $stmt),
|
||||||
),
|
),
|
||||||
$statements_analyzer->getSuppressedIssues(),
|
$statements_analyzer->getSuppressedIssues(),
|
||||||
);
|
)) {
|
||||||
|
$stmt_type = $stmt_type->getBuilder()->addType(new TNull())->freeze();
|
||||||
|
}
|
||||||
|
} elseif ($stmt_type->possibly_undefined) {
|
||||||
|
$stmt_type = $stmt_type->getBuilder()->addType(new TNull())->freeze();
|
||||||
}
|
}
|
||||||
|
|
||||||
$stmt_type = $stmt_type->setPossiblyUndefined(false);
|
$stmt_type = $stmt_type->setPossiblyUndefined(false);
|
||||||
|
@ -654,6 +654,19 @@ class ArrayAccessTest extends TestCase
|
|||||||
'$x3===' => "array{b: 'value'}",
|
'$x3===' => "array{b: 'value'}",
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
'possiblyUndefinedArrayOffsetKeyedArray' => [
|
||||||
|
'code' => '<?php
|
||||||
|
$d = [];
|
||||||
|
if (!rand(0,1)) {
|
||||||
|
$d[0] = "a";
|
||||||
|
}
|
||||||
|
|
||||||
|
$x = $d[0];',
|
||||||
|
'assertions' => [
|
||||||
|
'$x===' => '"a"|null',
|
||||||
|
],
|
||||||
|
'ignored_issues' => ['PossiblyUndefinedArrayOffset'],
|
||||||
|
],
|
||||||
'domNodeListAccessible' => [
|
'domNodeListAccessible' => [
|
||||||
'code' => '<?php
|
'code' => '<?php
|
||||||
$doc = new DOMDocument();
|
$doc = new DOMDocument();
|
||||||
|
Loading…
Reference in New Issue
Block a user