Abstract over the uses of compute_match_usefulness

This commit is contained in:
Nadrieril 2024-03-17 16:33:25 +01:00
parent d3eeadc242
commit 3cfcd4ed96
2 changed files with 11 additions and 15 deletions

View file

@ -11,7 +11,6 @@ use hir_def::{ItemContainerId, Lookup};
use hir_expand::name;
use itertools::Itertools;
use rustc_hash::FxHashSet;
use rustc_pattern_analysis::usefulness::{compute_match_usefulness, PlaceValidity};
use syntax::{ast, AstNode};
use tracing::debug;
use triomphe::Arc;
@ -234,13 +233,7 @@ impl ExprValidator {
return;
}
let report = match compute_match_usefulness(
&cx,
m_arms.as_slice(),
scrut_ty.clone(),
PlaceValidity::ValidOnly,
None,
) {
let report = match cx.compute_match_usefulness(m_arms.as_slice(), scrut_ty.clone()) {
Ok(report) => report,
Err(()) => return,
};
@ -282,13 +275,7 @@ impl ExprValidator {
continue;
}
let report = match compute_match_usefulness(
&cx,
&[match_arm],
ty.clone(),
PlaceValidity::ValidOnly,
None,
) {
let report = match cx.compute_match_usefulness(&[match_arm], ty.clone()) {
Ok(v) => v,
Err(e) => {
debug!(?e, "match usefulness error");

View file

@ -8,6 +8,7 @@ use rustc_hash::FxHashMap;
use rustc_pattern_analysis::{
constructor::{Constructor, ConstructorSet, VariantVisibility},
index::IdxContainer,
usefulness::{compute_match_usefulness, PlaceValidity, UsefulnessReport},
Captures, PatCx, PrivateUninhabitedField,
};
use smallvec::{smallvec, SmallVec};
@ -59,6 +60,14 @@ impl<'p> MatchCheckCtx<'p> {
Self { module, body, db, exhaustive_patterns, min_exhaustive_patterns }
}
pub(crate) fn compute_match_usefulness(
&self,
arms: &[MatchArm<'p>],
scrut_ty: Ty,
) -> Result<UsefulnessReport<'p, Self>, ()> {
compute_match_usefulness(self, arms, scrut_ty, PlaceValidity::ValidOnly, None)
}
fn is_uninhabited(&self, ty: &Ty) -> bool {
is_ty_uninhabited_from(ty, self.module, self.db)
}