]> git.lizzy.rs Git - rust.git/commitdiff
Move lint emitter to its own method
authorEsteban Küber <esteban@kuber.com.ar>
Fri, 30 Aug 2019 00:41:25 +0000 (17:41 -0700)
committerEsteban Küber <esteban@kuber.com.ar>
Wed, 16 Oct 2019 18:57:19 +0000 (11:57 -0700)
src/librustc_mir/hair/pattern/_match.rs

index 1b3c824458e731187421892609f064c3d0a99e69..48ff7fff5edfe1ba260bc3edcb5a9d857482c863 100644 (file)
@@ -1739,24 +1739,7 @@ fn range_borders(r: IntRange<'_>) -> impl Iterator<Item = Border> {
                 let mut borders: Vec<_> = row_borders.chain(ctor_borders).collect();
                 borders.sort_unstable();
 
-                if let (true, Some(hir_id)) = (!overlaps.is_empty(), hir_id) {
-                    let mut err = tcx.struct_span_lint_hir(
-                        lint::builtin::OVERLAPPING_PATTERNS,
-                        hir_id,
-                        ctor_range.span,
-                        "multiple patterns covering the same range",
-                    );
-                    err.span_label(ctor_range.span, "overlapping patterns");
-                    for int_range in overlaps {
-                        // Use the real type for user display of the ranges:
-                        err.span_label(int_range.span, &format!(
-                            "this range overlaps on `{}`",
-                            IntRange::range_to_ctor(tcx, ty, int_range.range, DUMMY_SP)
-                                .display(tcx),
-                        ));
-                    }
-                    err.emit();
-                }
+                lint_unreachable_patterns(tcx, hir_id, ctor_range, ty, overlaps);
 
                 // We're going to iterate through every pair of borders, making sure that each
                 // represents an interval of nonnegative length, and convert each such interval
@@ -1787,6 +1770,32 @@ fn range_borders(r: IntRange<'_>) -> impl Iterator<Item = Border> {
     split_ctors
 }
 
+fn lint_unreachable_patterns(
+    tcx: TyCtxt<'tcx>,
+    hir_id: Option<HirId>,
+    ctor_range: IntRange<'tcx>,
+    ty: Ty<'tcx>,
+    overlaps: Vec<IntRange<'tcx>>,
+) {
+    if let (true, Some(hir_id)) = (!overlaps.is_empty(), hir_id) {
+        let mut err = tcx.struct_span_lint_hir(
+            lint::builtin::OVERLAPPING_PATTERNS,
+            hir_id,
+            ctor_range.span,
+            "multiple patterns covering the same range",
+        );
+        err.span_label(ctor_range.span, "overlapping patterns");
+        for int_range in overlaps {
+            // Use the real type for user display of the ranges:
+            err.span_label(int_range.span, &format!(
+                "this range overlaps on `{}`",
+                IntRange::range_to_ctor(tcx, ty, int_range.range, DUMMY_SP).display(tcx),
+            ));
+        }
+        err.emit();
+    }
+}
+
 fn constructor_covered_by_range<'tcx>(
     tcx: TyCtxt<'tcx>,
     param_env: ty::ParamEnv<'tcx>,