[ty] Respect subclass shadowing for inherited NamedTuple fields by charliermarsh · Pull Request #24640 · astral-sh/ruff (original) (raw)
diff --git a/crates/ty_python_semantic/src/types/class.rs b/crates/ty_python_semantic/src/types/class.rs index ea809d830a..b0ca88fb50 100644 --- a/crates/ty_python_semantic/src/types/class.rs +++ b/crates/ty_python_semantic/src/types/class.rs @@ -1724,7 +1724,7 @@ impl<'db> ClassType<'db> { dynamic.own_instance_member(db, name) } Self::NonGeneric(ClassLiteral::DynamicNamedTuple(namedtuple)) => {
namedtuple.own_instance_member(db, name)
namedtuple.own_instance_member(db) } Self::NonGeneric(ClassLiteral::DynamicTypedDict(_)) => Member::default(), Self::NonGeneric(ClassLiteral::DynamicEnum(enum_lit)) => {
diff --git a/crates/ty_python_semantic/src/types/class/named_tuple.rs b/crates/ty_python_semantic/src/types/class/named_tuple.rs
index a62f36403f..a2026a51a5 100644
--- a/crates/ty_python_semantic/src/types/class/named_tuple.rs
+++ b/crates/ty_python_semantic/src/types/class/named_tuple.rs
@@ -275,7 +275,7 @@ impl<'db> DynamicNamedTupleLiteral<'db> {
///
/// NamedTuple fields are exposed via synthesized descriptors on the class rather than
/// instance attributes. If fields are unknown (dynamic), return Any for any attribute.
- pub(super) fn own_instance_member(self, db: &'db dyn Db, _name: &str) -> Member<'db> {
- pub(super) fn own_instance_member(self, db: &'db dyn Db) -> Member<'db> { if !self.has_known_fields(db) { return Member::definitely_declared(Type::any()); }
@@ -286,7 +286,7 @@ impl<'db> DynamicNamedTupleLiteral<'db> { /// Look up an instance member by name (including superclasses). pub(crate) fn instance_member(self, db: &'db dyn Db, name: &str) -> PlaceAndQualifiers<'db> { // First check own instance members.
let result = self.own_instance_member(db, name);
let result = self.own_instance_member(db); if !result.is_undefined() { return result.inner; }