mirror of
https://github.com/microsoft/pyright.git
synced 2024-09-19 20:27:45 +03:00
Fixed a bug that led to a false positive error about an "unknown type" in certain cases when using an assignment expression (walrus operator) in a loop. This addresses https://github.com/microsoft/pyright/issues/4557.
This commit is contained in:
parent
1d461eac65
commit
bee1466d4a
@ -1113,7 +1113,7 @@ export function createTypeEvaluator(importLookup: ImportLookup, evaluatorOptions
|
||||
assignTypeToExpression(
|
||||
node.leftExpression,
|
||||
typeResult.type,
|
||||
/* isTypeIncomplete */ false,
|
||||
!!typeResult.isIncomplete,
|
||||
node.rightExpression,
|
||||
/* ignoreEmptyContainers */ true,
|
||||
/* allowAssignmentToFinalVar */ true
|
||||
@ -1126,7 +1126,7 @@ export function createTypeEvaluator(importLookup: ImportLookup, evaluatorOptions
|
||||
assignTypeToExpression(
|
||||
node.name,
|
||||
typeResult.type,
|
||||
/* isTypeIncomplete */ false,
|
||||
!!typeResult.isIncomplete,
|
||||
node.rightExpression,
|
||||
/* ignoreEmptyContainers */ true
|
||||
);
|
||||
|
27
packages/pyright-internal/src/tests/samples/codeFlow8.py
Normal file
27
packages/pyright-internal/src/tests/samples/codeFlow8.py
Normal file
@ -0,0 +1,27 @@
|
||||
# This sample tests the case where an assignment expression
|
||||
# is used within a looping construct such that the assigned
|
||||
# value is initially unknown.
|
||||
|
||||
# pyright: strict
|
||||
|
||||
from typing import Iterator
|
||||
|
||||
for _ in ["1"]:
|
||||
old_lines: Iterator[str] = iter(["2", "3"])
|
||||
|
||||
try:
|
||||
while True:
|
||||
line = next(old_lines)
|
||||
count = 1
|
||||
if count:
|
||||
while True:
|
||||
if not (line := next(old_lines)):
|
||||
pass
|
||||
elif line.startswith(""):
|
||||
print(line.removeprefix(""))
|
||||
else:
|
||||
old_lines = iter([line] + list(old_lines))
|
||||
break
|
||||
|
||||
except StopIteration:
|
||||
pass
|
@ -926,6 +926,12 @@ test('CodeFlow7', () => {
|
||||
TestUtils.validateResults(analysisResults, 0);
|
||||
});
|
||||
|
||||
test('CodeFlow8', () => {
|
||||
const analysisResults = TestUtils.typeAnalyzeSampleFiles(['codeFlow8.py']);
|
||||
|
||||
TestUtils.validateResults(analysisResults, 0);
|
||||
});
|
||||
|
||||
test('CapturedVariable1', () => {
|
||||
const analysisResults = TestUtils.typeAnalyzeSampleFiles(['capturedVariable1.py']);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user