[red-knot] simplify union size limit handling (#17429)

This commit is contained in:
Carl Meyer 2025-04-16 09:22:16 -07:00 committed by GitHub
parent e6a2de3ac6
commit b67590bfde
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -97,14 +97,13 @@ impl<'db> UnionBuilder<'db> {
// means we shouldn't add it. Otherwise, add a new `UnionElement::StringLiterals`
// containing it.
Type::StringLiteral(literal) => {
let mut too_large = false;
let mut found = false;
for element in &mut self.elements {
match element {
UnionElement::StringLiterals(literals) => {
if literals.len() >= MAX_UNION_LITERALS {
too_large = true;
break;
let replace_with = KnownClass::Str.to_instance(self.db);
return self.add(replace_with);
}
literals.insert(literal);
found = true;
@ -116,10 +115,6 @@ impl<'db> UnionBuilder<'db> {
_ => {}
}
}
if too_large {
let replace_with = KnownClass::Str.to_instance(self.db);
return self.add(replace_with);
}
if !found {
self.elements
.push(UnionElement::StringLiterals(FxOrderSet::from_iter([
@ -130,13 +125,12 @@ impl<'db> UnionBuilder<'db> {
// Same for bytes literals as for string literals, above.
Type::BytesLiteral(literal) => {
let mut found = false;
let mut too_large = false;
for element in &mut self.elements {
match element {
UnionElement::BytesLiterals(literals) => {
if literals.len() >= MAX_UNION_LITERALS {
too_large = true;
break;
let replace_with = KnownClass::Bytes.to_instance(self.db);
return self.add(replace_with);
}
literals.insert(literal);
found = true;
@ -148,10 +142,6 @@ impl<'db> UnionBuilder<'db> {
_ => {}
}
}
if too_large {
let replace_with = KnownClass::Bytes.to_instance(self.db);
return self.add(replace_with);
}
if !found {
self.elements
.push(UnionElement::BytesLiterals(FxOrderSet::from_iter([
@ -162,13 +152,12 @@ impl<'db> UnionBuilder<'db> {
// And same for int literals as well.
Type::IntLiteral(literal) => {
let mut found = false;
let mut too_large = false;
for element in &mut self.elements {
match element {
UnionElement::IntLiterals(literals) => {
if literals.len() >= MAX_UNION_LITERALS {
too_large = true;
break;
let replace_with = KnownClass::Int.to_instance(self.db);
return self.add(replace_with);
}
literals.insert(literal);
found = true;
@ -180,10 +169,6 @@ impl<'db> UnionBuilder<'db> {
_ => {}
}
}
if too_large {
let replace_with = KnownClass::Int.to_instance(self.db);
return self.add(replace_with);
}
if !found {
self.elements
.push(UnionElement::IntLiterals(FxOrderSet::from_iter([literal])));