Skip to content

Commit d2cb5a8

Browse files
committed
Move lint emitter to its own method
1 parent 916936c commit d2cb5a8

File tree

1 file changed

+27
-18
lines changed

1 file changed

+27
-18
lines changed

src/librustc_mir/hair/pattern/_match.rs

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1739,24 +1739,7 @@ fn split_grouped_constructors<'p, 'tcx>(
17391739
let mut borders: Vec<_> = row_borders.chain(ctor_borders).collect();
17401740
borders.sort_unstable();
17411741

1742-
if let (true, Some(hir_id)) = (!overlaps.is_empty(), hir_id) {
1743-
let mut err = tcx.struct_span_lint_hir(
1744-
lint::builtin::OVERLAPPING_PATTERNS,
1745-
hir_id,
1746-
ctor_range.span,
1747-
"multiple patterns covering the same range",
1748-
);
1749-
err.span_label(ctor_range.span, "overlapping patterns");
1750-
for int_range in overlaps {
1751-
// Use the real type for user display of the ranges:
1752-
err.span_label(int_range.span, &format!(
1753-
"this range overlaps on `{}`",
1754-
IntRange::range_to_ctor(tcx, ty, int_range.range, DUMMY_SP)
1755-
.display(tcx),
1756-
));
1757-
}
1758-
err.emit();
1759-
}
1742+
lint_unreachable_patterns(tcx, hir_id, ctor_range, ty, overlaps);
17601743

17611744
// We're going to iterate through every pair of borders, making sure that each
17621745
// represents an interval of nonnegative length, and convert each such interval
@@ -1787,6 +1770,32 @@ fn split_grouped_constructors<'p, 'tcx>(
17871770
split_ctors
17881771
}
17891772

1773+
fn lint_unreachable_patterns(
1774+
tcx: TyCtxt<'tcx>,
1775+
hir_id: Option<HirId>,
1776+
ctor_range: IntRange<'tcx>,
1777+
ty: Ty<'tcx>,
1778+
overlaps: Vec<IntRange<'tcx>>,
1779+
) {
1780+
if let (true, Some(hir_id)) = (!overlaps.is_empty(), hir_id) {
1781+
let mut err = tcx.struct_span_lint_hir(
1782+
lint::builtin::OVERLAPPING_PATTERNS,
1783+
hir_id,
1784+
ctor_range.span,
1785+
"multiple patterns covering the same range",
1786+
);
1787+
err.span_label(ctor_range.span, "overlapping patterns");
1788+
for int_range in overlaps {
1789+
// Use the real type for user display of the ranges:
1790+
err.span_label(int_range.span, &format!(
1791+
"this range overlaps on `{}`",
1792+
IntRange::range_to_ctor(tcx, ty, int_range.range, DUMMY_SP).display(tcx),
1793+
));
1794+
}
1795+
err.emit();
1796+
}
1797+
}
1798+
17901799
fn constructor_covered_by_range<'tcx>(
17911800
tcx: TyCtxt<'tcx>,
17921801
param_env: ty::ParamEnv<'tcx>,

0 commit comments

Comments
 (0)