mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 14:55:26 +00:00
Migrate usefulness.rs
This commit is contained in:
parent
5d2b9a9ed0
commit
ef33072890
@ -324,3 +324,13 @@ mir_build_overlapping_range_endpoints = multiple patterns overlap on their endpo
|
|||||||
.note = you likely meant to write mutually exclusive ranges
|
.note = you likely meant to write mutually exclusive ranges
|
||||||
|
|
||||||
mir_build_overlapping_range = this range overlaps on `{$range}`...
|
mir_build_overlapping_range = this range overlaps on `{$range}`...
|
||||||
|
|
||||||
|
mir_build_non_exhaustive_omitted_pattern = some variants are not matched explicitly
|
||||||
|
.label = {$count ->
|
||||||
|
[1] pattern `{$witness_1}`
|
||||||
|
[2] patterns `{$witness_1}` and `{$witness_2}`
|
||||||
|
[3] patterns `{$witness_1}`, `{$witness_2}` and `{$witness_3}`
|
||||||
|
*[other] patterns `{$witness_1}`, `{$witness_2}`, `{$witness_3}` and more
|
||||||
|
} not covered
|
||||||
|
.help = ensure that all variants are matched explicitly by adding the suggested match arms
|
||||||
|
.note = the matched value is of type `{$scrut_ty}` and the `non_exhaustive_omitted_patterns` attribute was found
|
||||||
|
@ -685,3 +685,17 @@ pub struct Overlap<'tcx> {
|
|||||||
pub span: Span,
|
pub span: Span,
|
||||||
pub range: Pat<'tcx>,
|
pub range: Pat<'tcx>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(LintDiagnostic)]
|
||||||
|
#[diag(mir_build_non_exhaustive_omitted_pattern)]
|
||||||
|
#[help]
|
||||||
|
#[note]
|
||||||
|
pub(crate) struct NonExhaustiveOmittedPattern<'tcx> {
|
||||||
|
pub scrut_ty: Ty<'tcx>,
|
||||||
|
#[label]
|
||||||
|
pub uncovered: Span,
|
||||||
|
pub count: usize,
|
||||||
|
pub witness_1: Pat<'tcx>,
|
||||||
|
pub witness_2: Pat<'tcx>,
|
||||||
|
pub witness_3: Pat<'tcx>,
|
||||||
|
}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
mod check_match;
|
mod check_match;
|
||||||
mod const_to_pat;
|
mod const_to_pat;
|
||||||
mod deconstruct_pat;
|
pub(crate) mod deconstruct_pat;
|
||||||
mod usefulness;
|
mod usefulness;
|
||||||
|
|
||||||
pub(crate) use self::check_match::check_match;
|
pub(crate) use self::check_match::check_match;
|
||||||
|
@ -291,9 +291,8 @@
|
|||||||
|
|
||||||
use self::ArmType::*;
|
use self::ArmType::*;
|
||||||
use self::Usefulness::*;
|
use self::Usefulness::*;
|
||||||
|
|
||||||
use super::check_match::{joined_uncovered_patterns, pattern_not_covered_label};
|
|
||||||
use super::deconstruct_pat::{Constructor, DeconstructedPat, Fields, SplitWildcard};
|
use super::deconstruct_pat::{Constructor, DeconstructedPat, Fields, SplitWildcard};
|
||||||
|
use crate::errors::NonExhaustiveOmittedPattern;
|
||||||
|
|
||||||
use rustc_data_structures::captures::Captures;
|
use rustc_data_structures::captures::Captures;
|
||||||
|
|
||||||
@ -754,6 +753,23 @@ fn lint_non_exhaustive_omitted_patterns<'p, 'tcx>(
|
|||||||
hir_id: HirId,
|
hir_id: HirId,
|
||||||
witnesses: Vec<DeconstructedPat<'p, 'tcx>>,
|
witnesses: Vec<DeconstructedPat<'p, 'tcx>>,
|
||||||
) {
|
) {
|
||||||
|
let witness_1 = witnesses.get(0).unwrap().to_pat(cx);
|
||||||
|
|
||||||
|
cx.tcx.emit_spanned_lint(
|
||||||
|
NON_EXHAUSTIVE_OMITTED_PATTERNS,
|
||||||
|
hir_id,
|
||||||
|
sp,
|
||||||
|
NonExhaustiveOmittedPattern {
|
||||||
|
scrut_ty,
|
||||||
|
uncovered: sp,
|
||||||
|
count: witnesses.len(),
|
||||||
|
// Substitute dummy values if witnesses is smaller than 3.
|
||||||
|
witness_2: witnesses.get(1).map(|w| w.to_pat(cx)).unwrap_or_else(|| witness_1.clone()),
|
||||||
|
witness_3: witnesses.get(2).map(|w| w.to_pat(cx)).unwrap_or_else(|| witness_1.clone()),
|
||||||
|
witness_1,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
/*
|
||||||
cx.tcx.struct_span_lint_hir(NON_EXHAUSTIVE_OMITTED_PATTERNS, hir_id, sp, "some variants are not matched explicitly", |lint| {
|
cx.tcx.struct_span_lint_hir(NON_EXHAUSTIVE_OMITTED_PATTERNS, hir_id, sp, "some variants are not matched explicitly", |lint| {
|
||||||
let joined_patterns = joined_uncovered_patterns(cx, &witnesses);
|
let joined_patterns = joined_uncovered_patterns(cx, &witnesses);
|
||||||
lint.span_label(sp, pattern_not_covered_label(&witnesses, &joined_patterns));
|
lint.span_label(sp, pattern_not_covered_label(&witnesses, &joined_patterns));
|
||||||
@ -766,6 +782,7 @@ fn lint_non_exhaustive_omitted_patterns<'p, 'tcx>(
|
|||||||
));
|
));
|
||||||
lint
|
lint
|
||||||
});
|
});
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Algorithm from <http://moscova.inria.fr/~maranget/papers/warn/index.html>.
|
/// Algorithm from <http://moscova.inria.fr/~maranget/papers/warn/index.html>.
|
||||||
|
Loading…
Reference in New Issue
Block a user