diff --git a/crates/red_knot_python_semantic/src/types/builder.rs b/crates/red_knot_python_semantic/src/types/builder.rs index bc2b1fb802771c..aa3e64e9032b0e 100644 --- a/crates/red_knot_python_semantic/src/types/builder.rs +++ b/crates/red_knot_python_semantic/src/types/builder.rs @@ -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])));