Skip to content

Commit b67590b

Browse files
authored
[red-knot] simplify union size limit handling (#17429)
1 parent e6a2de3 commit b67590b

File tree

1 file changed

+6
-21
lines changed
  • crates/red_knot_python_semantic/src/types

1 file changed

+6
-21
lines changed

crates/red_knot_python_semantic/src/types/builder.rs

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -97,14 +97,13 @@ impl<'db> UnionBuilder<'db> {
9797
// means we shouldn't add it. Otherwise, add a new `UnionElement::StringLiterals`
9898
// containing it.
9999
Type::StringLiteral(literal) => {
100-
let mut too_large = false;
101100
let mut found = false;
102101
for element in &mut self.elements {
103102
match element {
104103
UnionElement::StringLiterals(literals) => {
105104
if literals.len() >= MAX_UNION_LITERALS {
106-
too_large = true;
107-
break;
105+
let replace_with = KnownClass::Str.to_instance(self.db);
106+
return self.add(replace_with);
108107
}
109108
literals.insert(literal);
110109
found = true;
@@ -116,10 +115,6 @@ impl<'db> UnionBuilder<'db> {
116115
_ => {}
117116
}
118117
}
119-
if too_large {
120-
let replace_with = KnownClass::Str.to_instance(self.db);
121-
return self.add(replace_with);
122-
}
123118
if !found {
124119
self.elements
125120
.push(UnionElement::StringLiterals(FxOrderSet::from_iter([
@@ -130,13 +125,12 @@ impl<'db> UnionBuilder<'db> {
130125
// Same for bytes literals as for string literals, above.
131126
Type::BytesLiteral(literal) => {
132127
let mut found = false;
133-
let mut too_large = false;
134128
for element in &mut self.elements {
135129
match element {
136130
UnionElement::BytesLiterals(literals) => {
137131
if literals.len() >= MAX_UNION_LITERALS {
138-
too_large = true;
139-
break;
132+
let replace_with = KnownClass::Bytes.to_instance(self.db);
133+
return self.add(replace_with);
140134
}
141135
literals.insert(literal);
142136
found = true;
@@ -148,10 +142,6 @@ impl<'db> UnionBuilder<'db> {
148142
_ => {}
149143
}
150144
}
151-
if too_large {
152-
let replace_with = KnownClass::Bytes.to_instance(self.db);
153-
return self.add(replace_with);
154-
}
155145
if !found {
156146
self.elements
157147
.push(UnionElement::BytesLiterals(FxOrderSet::from_iter([
@@ -162,13 +152,12 @@ impl<'db> UnionBuilder<'db> {
162152
// And same for int literals as well.
163153
Type::IntLiteral(literal) => {
164154
let mut found = false;
165-
let mut too_large = false;
166155
for element in &mut self.elements {
167156
match element {
168157
UnionElement::IntLiterals(literals) => {
169158
if literals.len() >= MAX_UNION_LITERALS {
170-
too_large = true;
171-
break;
159+
let replace_with = KnownClass::Int.to_instance(self.db);
160+
return self.add(replace_with);
172161
}
173162
literals.insert(literal);
174163
found = true;
@@ -180,10 +169,6 @@ impl<'db> UnionBuilder<'db> {
180169
_ => {}
181170
}
182171
}
183-
if too_large {
184-
let replace_with = KnownClass::Int.to_instance(self.db);
185-
return self.add(replace_with);
186-
}
187172
if !found {
188173
self.elements
189174
.push(UnionElement::IntLiterals(FxOrderSet::from_iter([literal])));

0 commit comments

Comments
 (0)