Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir_ty/src/diagnostics/match_check.rs')
-rw-r--r--crates/hir_ty/src/diagnostics/match_check.rs27
1 files changed, 9 insertions, 18 deletions
diff --git a/crates/hir_ty/src/diagnostics/match_check.rs b/crates/hir_ty/src/diagnostics/match_check.rs
index b3cc83b340..fdf448f5e1 100644
--- a/crates/hir_ty/src/diagnostics/match_check.rs
+++ b/crates/hir_ty/src/diagnostics/match_check.rs
@@ -5,13 +5,12 @@
//!
//! It is modeled on the rustc module `rustc_mir_build::thir::pattern`.
-mod deconstruct_pat;
mod pat_util;
+pub(crate) mod deconstruct_pat;
pub(crate) mod usefulness;
-use hir_def::{body::Body, EnumVariantId, LocalFieldId, VariantId};
-use la_arena::Idx;
+use hir_def::{body::Body, expr::PatId, EnumVariantId, LocalFieldId, VariantId};
use crate::{db::HirDatabase, InferenceResult, Interner, Substitution, Ty, TyKind};
@@ -19,8 +18,6 @@ use self::pat_util::EnumerateAndAdjustIterator;
pub(crate) use self::usefulness::MatchArm;
-pub(crate) type PatId = Idx<Pat>;
-
#[derive(Clone, Debug)]
pub(crate) enum PatternError {
Unimplemented,
@@ -41,12 +38,6 @@ pub(crate) struct Pat {
pub(crate) kind: Box<PatKind>,
}
-impl Pat {
- pub(crate) fn wildcard_from_ty(ty: Ty) -> Self {
- Pat { ty, kind: Box::new(PatKind::Wild) }
- }
-}
-
/// Close relative to `rustc_mir_build::thir::pattern::PatKind`
#[derive(Clone, Debug, PartialEq)]
pub(crate) enum PatKind {
@@ -100,7 +91,7 @@ impl<'a> PatCtxt<'a> {
Self { db, infer, body, errors: Vec::new() }
}
- pub(crate) fn lower_pattern(&mut self, pat: hir_def::expr::PatId) -> Pat {
+ pub(crate) fn lower_pattern(&mut self, pat: PatId) -> Pat {
// XXX(iDawer): Collecting pattern adjustments feels imprecise to me.
// When lowering of & and box patterns are implemented this should be tested
// in a manner of `match_ergonomics_issue_9095` test.
@@ -116,7 +107,7 @@ impl<'a> PatCtxt<'a> {
)
}
- fn lower_pattern_unadjusted(&mut self, pat: hir_def::expr::PatId) -> Pat {
+ fn lower_pattern_unadjusted(&mut self, pat: PatId) -> Pat {
let mut ty = &self.infer[pat];
let variant = self.infer.variant_resolution_for_pat(pat);
@@ -189,7 +180,7 @@ impl<'a> PatCtxt<'a> {
fn lower_tuple_subpats(
&mut self,
- pats: &[hir_def::expr::PatId],
+ pats: &[PatId],
expected_len: usize,
ellipsis: Option<usize>,
) -> Vec<FieldPat> {
@@ -207,17 +198,17 @@ impl<'a> PatCtxt<'a> {
.collect()
}
- fn lower_patterns(&mut self, pats: &[hir_def::expr::PatId]) -> Vec<Pat> {
+ fn lower_patterns(&mut self, pats: &[PatId]) -> Vec<Pat> {
pats.iter().map(|&p| self.lower_pattern(p)).collect()
}
- fn lower_opt_pattern(&mut self, pat: Option<hir_def::expr::PatId>) -> Option<Pat> {
+ fn lower_opt_pattern(&mut self, pat: Option<PatId>) -> Option<Pat> {
pat.map(|p| self.lower_pattern(p))
}
fn lower_variant_or_leaf(
&mut self,
- pat: hir_def::expr::PatId,
+ pat: PatId,
ty: &Ty,
subpatterns: Vec<FieldPat>,
) -> PatKind {
@@ -244,7 +235,7 @@ impl<'a> PatCtxt<'a> {
kind
}
- fn lower_path(&mut self, pat: hir_def::expr::PatId, _path: &hir_def::path::Path) -> Pat {
+ fn lower_path(&mut self, pat: PatId, _path: &hir_def::path::Path) -> Pat {
let ty = &self.infer[pat];
let pat_from_kind = |kind| Pat { ty: ty.clone(), kind: Box::new(kind) };