[ty] Type narrowing in comprehensions (#18934)
## Summary
Add type narrowing inside comprehensions:
```py
def _(xs: list[int | None]):
[reveal_type(x) for x in xs if x is not None] # revealed: int
```
closes https://github.com/astral-sh/ty/issues/680
## Test Plan
* New Markdown tests
* Made sure the example from https://github.com/astral-sh/ty/issues/680
now checks without errors
* Made sure that all removed ecosystem diagnostics were actually false
positives
This commit is contained in:
@@ -854,8 +854,9 @@ impl<'db, 'ast> SemanticIndexBuilder<'db, 'ast> {
|
||||
value,
|
||||
);
|
||||
|
||||
for expr in &generator.ifs {
|
||||
self.visit_expr(expr);
|
||||
for if_expr in &generator.ifs {
|
||||
self.visit_expr(if_expr);
|
||||
self.record_expression_narrowing_constraint(if_expr);
|
||||
}
|
||||
|
||||
for generator in generators_iter {
|
||||
@@ -871,8 +872,9 @@ impl<'db, 'ast> SemanticIndexBuilder<'db, 'ast> {
|
||||
value,
|
||||
);
|
||||
|
||||
for expr in &generator.ifs {
|
||||
self.visit_expr(expr);
|
||||
for if_expr in &generator.ifs {
|
||||
self.visit_expr(if_expr);
|
||||
self.record_expression_narrowing_constraint(if_expr);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5089,7 +5089,7 @@ impl<'db, 'ast> TypeInferenceBuilder<'db, 'ast> {
|
||||
.iterate(builder.db())
|
||||
});
|
||||
for expr in ifs {
|
||||
self.infer_expression(expr);
|
||||
self.infer_standalone_expression(expr);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user