[ty] Infer slightly more precise types for comprehensions (#20111)
Some checks are pending
CI / mkdocs (push) Waiting to run
CI / test ruff-lsp (push) Blocked by required conditions
CI / Determine changes (push) Waiting to run
CI / cargo fmt (push) Waiting to run
CI / cargo clippy (push) Blocked by required conditions
CI / cargo test (linux) (push) Blocked by required conditions
CI / cargo test (linux, release) (push) Blocked by required conditions
CI / cargo test (windows) (push) Blocked by required conditions
CI / cargo test (wasm) (push) Blocked by required conditions
CI / cargo build (release) (push) Waiting to run
CI / formatter instabilities and black similarity (push) Blocked by required conditions
CI / cargo build (msrv) (push) Blocked by required conditions
CI / cargo fuzz build (push) Blocked by required conditions
CI / fuzz parser (push) Blocked by required conditions
CI / test scripts (push) Blocked by required conditions
CI / ecosystem (push) Blocked by required conditions
CI / Fuzz for new ty panics (push) Blocked by required conditions
CI / cargo shear (push) Blocked by required conditions
CI / python package (push) Waiting to run
CI / pre-commit (push) Waiting to run
CI / check playground (push) Blocked by required conditions
CI / benchmarks-instrumented (push) Blocked by required conditions
CI / benchmarks-walltime (push) Blocked by required conditions
[ty Playground] Release / publish (push) Waiting to run

This commit is contained in:
Alex Waygood 2025-08-27 13:21:47 +01:00 committed by GitHub
parent d71518b369
commit 7d0c8e045c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
16 changed files with 111 additions and 95 deletions

View file

@ -5805,8 +5805,8 @@ impl<'db, 'ast> TypeInferenceBuilder<'db, 'ast> {
self.infer_expression(elt);
}
// TODO generic
KnownClass::List.to_instance(self.db())
KnownClass::List
.to_specialized_instance(self.db(), [todo_type!("list literal element type")])
}
fn infer_set_expression(&mut self, set: &ast::ExprSet) -> Type<'db> {
@ -5820,8 +5820,7 @@ impl<'db, 'ast> TypeInferenceBuilder<'db, 'ast> {
self.infer_expression(elt);
}
// TODO generic
KnownClass::Set.to_instance(self.db())
KnownClass::Set.to_specialized_instance(self.db(), [todo_type!("set literal element type")])
}
fn infer_dict_expression(&mut self, dict: &ast::ExprDict) -> Type<'db> {
@ -5836,8 +5835,13 @@ impl<'db, 'ast> TypeInferenceBuilder<'db, 'ast> {
self.infer_expression(&item.value);
}
// TODO generic
KnownClass::Dict.to_instance(self.db())
KnownClass::Dict.to_specialized_instance(
self.db(),
[
todo_type!("dict literal key type"),
todo_type!("dict literal value type"),
],
)
}
/// Infer the type of the `iter` expression of the first comprehension.
@ -5860,7 +5864,14 @@ impl<'db, 'ast> TypeInferenceBuilder<'db, 'ast> {
self.infer_first_comprehension_iter(generators);
todo_type!("generator type")
KnownClass::GeneratorType.to_specialized_instance(
self.db(),
[
todo_type!("generator expression yield type"),
todo_type!("generator expression send type"),
todo_type!("generator expression return type"),
],
)
}
fn infer_list_comprehension_expression(&mut self, listcomp: &ast::ExprListComp) -> Type<'db> {
@ -5873,7 +5884,8 @@ impl<'db, 'ast> TypeInferenceBuilder<'db, 'ast> {
self.infer_first_comprehension_iter(generators);
todo_type!("list comprehension type")
KnownClass::List
.to_specialized_instance(self.db(), [todo_type!("list comprehension element type")])
}
fn infer_dict_comprehension_expression(&mut self, dictcomp: &ast::ExprDictComp) -> Type<'db> {
@ -5887,7 +5899,13 @@ impl<'db, 'ast> TypeInferenceBuilder<'db, 'ast> {
self.infer_first_comprehension_iter(generators);
todo_type!("dict comprehension type")
KnownClass::Dict.to_specialized_instance(
self.db(),
[
todo_type!("dict comprehension key type"),
todo_type!("dict comprehension value type"),
],
)
}
fn infer_set_comprehension_expression(&mut self, setcomp: &ast::ExprSetComp) -> Type<'db> {
@ -5900,7 +5918,8 @@ impl<'db, 'ast> TypeInferenceBuilder<'db, 'ast> {
self.infer_first_comprehension_iter(generators);
todo_type!("set comprehension type")
KnownClass::Set
.to_specialized_instance(self.db(), [todo_type!("set comprehension element type")])
}
fn infer_generator_expression_scope(&mut self, generator: &ast::ExprGenerator) {