mirror of
https://github.com/danog/psalm.git
synced 2024-11-27 04:45:20 +01:00
Fix #5685 - properly negate complex conditionals
This commit is contained in:
parent
83a0325c0a
commit
3a87f18b5a
@ -160,9 +160,20 @@ class Reconciler
|
|||||||
$orred_type = null;
|
$orred_type = null;
|
||||||
|
|
||||||
foreach ($new_type_part_parts as $new_type_part_part) {
|
foreach ($new_type_part_parts as $new_type_part_part) {
|
||||||
if ($new_type_part_part[0] === '>') {
|
if ($new_type_part_part[0] === '>'
|
||||||
/** @var array<string, array<int, array<int, string>>> */
|
|| ($new_type_part_part[0] === '!'
|
||||||
$data = \json_decode(substr($new_type_part_part, 1), true);
|
&& $new_type_part_part[1] === '>')
|
||||||
|
) {
|
||||||
|
if ($new_type_part_part[0] === '!') {
|
||||||
|
$nested_negated = !$negated;
|
||||||
|
|
||||||
|
/** @var array<string, array<int, array<int, string>>> */
|
||||||
|
$data = \json_decode(substr($new_type_part_part, 2), true);
|
||||||
|
} else {
|
||||||
|
$nested_negated = $negated;
|
||||||
|
/** @var array<string, array<int, array<int, string>>> */
|
||||||
|
$data = \json_decode(substr($new_type_part_part, 1), true);
|
||||||
|
}
|
||||||
|
|
||||||
$existing_types = self::reconcileKeyedTypes(
|
$existing_types = self::reconcileKeyedTypes(
|
||||||
$data,
|
$data,
|
||||||
@ -174,10 +185,10 @@ class Reconciler
|
|||||||
$template_type_map,
|
$template_type_map,
|
||||||
$inside_loop,
|
$inside_loop,
|
||||||
$code_location,
|
$code_location,
|
||||||
$negated
|
$nested_negated
|
||||||
);
|
);
|
||||||
|
|
||||||
$new_type_part_part = '!falsy';
|
$new_type_part_part = ($nested_negated ? '' : '!') . 'falsy';
|
||||||
}
|
}
|
||||||
|
|
||||||
$result_type_candidate = AssertionReconciler::reconcile(
|
$result_type_candidate = AssertionReconciler::reconcile(
|
||||||
|
@ -449,6 +449,13 @@ class AssignmentInConditionalTest extends \Psalm\Tests\TestCase
|
|||||||
[],
|
[],
|
||||||
'8.0'
|
'8.0'
|
||||||
],
|
],
|
||||||
|
'assignmentForComparison' => [
|
||||||
|
'<?php
|
||||||
|
function foo(int $b): void {
|
||||||
|
if ($a = $b > 1) {}
|
||||||
|
if ($a) {}
|
||||||
|
}'
|
||||||
|
],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user