1
Fork 0

Rollup merge of #121735 - Nadrieril:no-panic-on-type-error, r=compiler-errors

pattern analysis: Don't panic when encountering unexpected constructor

Tiny PR to fix https://github.com/rust-lang/rust-analyzer/issues/16656

r? ``@compiler-errors``
This commit is contained in:
Matthias Krüger 2024-02-29 00:17:00 +01:00 committed by GitHub
commit eca6a249a6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -940,7 +940,7 @@ impl<Cx: TypeCx> ConstructorSet<Cx> {
} }
ConstructorSet::Variants { variants, non_exhaustive } => { ConstructorSet::Variants { variants, non_exhaustive } => {
let mut seen_set = index::IdxSet::new_empty(variants.len()); let mut seen_set = index::IdxSet::new_empty(variants.len());
for idx in seen.iter().map(|c| c.as_variant().unwrap()) { for idx in seen.iter().filter_map(|c| c.as_variant()) {
seen_set.insert(idx); seen_set.insert(idx);
} }
let mut skipped_a_hidden_variant = false; let mut skipped_a_hidden_variant = false;
@ -969,7 +969,7 @@ impl<Cx: TypeCx> ConstructorSet<Cx> {
ConstructorSet::Bool => { ConstructorSet::Bool => {
let mut seen_false = false; let mut seen_false = false;
let mut seen_true = false; let mut seen_true = false;
for b in seen.iter().map(|ctor| ctor.as_bool().unwrap()) { for b in seen.iter().filter_map(|ctor| ctor.as_bool()) {
if b { if b {
seen_true = true; seen_true = true;
} else { } else {
@ -989,7 +989,7 @@ impl<Cx: TypeCx> ConstructorSet<Cx> {
} }
ConstructorSet::Integers { range_1, range_2 } => { ConstructorSet::Integers { range_1, range_2 } => {
let seen_ranges: Vec<_> = let seen_ranges: Vec<_> =
seen.iter().map(|ctor| *ctor.as_int_range().unwrap()).collect(); seen.iter().filter_map(|ctor| ctor.as_int_range()).copied().collect();
for (seen, splitted_range) in range_1.split(seen_ranges.iter().cloned()) { for (seen, splitted_range) in range_1.split(seen_ranges.iter().cloned()) {
match seen { match seen {
Presence::Unseen => missing.push(IntRange(splitted_range)), Presence::Unseen => missing.push(IntRange(splitted_range)),
@ -1006,7 +1006,7 @@ impl<Cx: TypeCx> ConstructorSet<Cx> {
} }
} }
ConstructorSet::Slice { array_len, subtype_is_empty } => { ConstructorSet::Slice { array_len, subtype_is_empty } => {
let seen_slices = seen.iter().map(|c| c.as_slice().unwrap()); let seen_slices = seen.iter().filter_map(|c| c.as_slice());
let base_slice = Slice::new(*array_len, VarLen(0, 0)); let base_slice = Slice::new(*array_len, VarLen(0, 0));
for (seen, splitted_slice) in base_slice.split(seen_slices) { for (seen, splitted_slice) in base_slice.split(seen_slices) {
let ctor = Slice(splitted_slice); let ctor = Slice(splitted_slice);