use std::slice;
- use syntax_pos::{MultiSpan, Span, DUMMY_SP};
+ use syntax_pos::{MultiSpan, Span};
crate fn check_match(tcx: TyCtxt<'_>, def_id: DefId) {
let body_id = match tcx.hir().as_local_hir_id(def_id) {
pat.walk(|p| {
if let hir::PatKind::Binding(_, _, ident, None) = p.kind {
if let Some(&bm) = cx.tables.pat_binding_modes().get(p.hir_id) {
- if bm != ty::BindByValue(hir::MutImmutable) {
+ if bm != ty::BindByValue(hir::Mutability::Immutable) {
// Nothing to check.
return true;
}
matrix: &Matrix<'_, 'tcx>,
hir_id: HirId,
) -> Result<(), Vec<super::Pat<'tcx>>> {
- let wild_pattern = super::Pat { ty, span: DUMMY_SP, kind: box PatKind::Wild };
+ let wild_pattern = super::Pat::wildcard_from_ty(ty);
match is_useful(cx, matrix, &PatStack::from_pattern(&wild_pattern), ConstructWitness, hir_id) {
NotUseful => Ok(()), // This is good, wildcard pattern isn't reachable.
UsefulWithWitness(pats) => Err(if pats.is_empty() {
}
fn pattern_not_covered_label(witnesses: &[super::Pat<'_>], joined_patterns: &str) -> String {
- format!("pattern{} {} not covered", rustc_errors::pluralise!(witnesses.len()), joined_patterns)
+ format!("pattern{} {} not covered", rustc_errors::pluralize!(witnesses.len()), joined_patterns)
}
/// Point at the definition of non-covered `enum` variants.
use std::cmp::Ordering;
use std::fmt;
use syntax::ast;
- use syntax_pos::Span;
+ use syntax_pos::{Span, DUMMY_SP};
#[derive(Clone, Debug)]
pub enum PatternError {
pub kind: Box<PatKind<'tcx>>,
}
+ impl<'tcx> Pat<'tcx> {
+ pub(crate) fn wildcard_from_ty(ty: Ty<'tcx>) -> Self {
+ Pat { ty, span: DUMMY_SP, kind: Box::new(PatKind::Wild) }
+ }
+ }
#[derive(Copy, Clone, Debug, PartialEq)]
pub struct PatTyProj<'tcx> {
match self.ty.kind {
ty::Adt(def, _) if def.is_box() => write!(f, "box ")?,
ty::Ref(_, _, mutbl) => {
- write!(f, "&")?;
- if mutbl == hir::MutMutable {
- write!(f, "mut ")?;
- }
+ write!(f, "&{}", mutbl.prefix_str())?;
}
_ => bug!("{} is a bad Deref pattern type", self.ty)
}
let bm = *self.tables.pat_binding_modes().get(pat.hir_id)
.expect("missing binding mode");
let (mutability, mode) = match bm {
- ty::BindByValue(hir::MutMutable) =>
+ ty::BindByValue(hir::Mutability::Mutable) =>
(Mutability::Mut, BindingMode::ByValue),
- ty::BindByValue(hir::MutImmutable) =>
+ ty::BindByValue(hir::Mutability::Immutable) =>
(Mutability::Not, BindingMode::ByValue),
- ty::BindByReference(hir::MutMutable) =>
+ ty::BindByReference(hir::Mutability::Mutable) =>
(Mutability::Not, BindingMode::ByRef(
BorrowKind::Mut { allow_two_phase_borrow: false })),
- ty::BindByReference(hir::MutImmutable) =>
+ ty::BindByReference(hir::Mutability::Immutable) =>
(Mutability::Not, BindingMode::ByRef(
BorrowKind::Shared)),
};