|
1 |
| -use rustc_data_structures::fx::FxIndexMap; |
2 | 1 | use rustc_errors::codes::*;
|
3 | 2 | use rustc_errors::{
|
4 | 3 | Applicability, Diag, DiagArgValue, DiagCtxtHandle, Diagnostic, EmissionGuarantee, Level,
|
5 |
| - MultiSpan, Subdiagnostic, pluralize, |
| 4 | + MultiSpan, Subdiagnostic, |
6 | 5 | };
|
7 | 6 | use rustc_macros::{Diagnostic, LintDiagnostic, Subdiagnostic};
|
8 | 7 | use rustc_middle::ty::{self, Ty};
|
@@ -1087,69 +1086,6 @@ pub(crate) enum MiscPatternSuggestion {
|
1087 | 1086 | },
|
1088 | 1087 | }
|
1089 | 1088 |
|
1090 |
| -#[derive(LintDiagnostic)] |
1091 |
| -#[diag(mir_build_rust_2024_incompatible_pat)] |
1092 |
| -pub(crate) struct Rust2024IncompatiblePat { |
1093 |
| - #[subdiagnostic] |
1094 |
| - pub(crate) sugg: Rust2024IncompatiblePatSugg, |
1095 |
| - pub(crate) bad_modifiers: bool, |
1096 |
| - pub(crate) bad_ref_pats: bool, |
1097 |
| - pub(crate) is_hard_error: bool, |
1098 |
| -} |
1099 |
| - |
1100 |
| -pub(crate) struct Rust2024IncompatiblePatSugg { |
1101 |
| - /// If true, our suggestion is to elide explicit binding modifiers. |
1102 |
| - /// If false, our suggestion is to make the pattern fully explicit. |
1103 |
| - pub(crate) suggest_eliding_modes: bool, |
1104 |
| - pub(crate) suggestion: Vec<(Span, String)>, |
1105 |
| - pub(crate) ref_pattern_count: usize, |
1106 |
| - pub(crate) binding_mode_count: usize, |
1107 |
| - /// Labels for where incompatibility-causing by-ref default binding modes were introduced. |
1108 |
| - pub(crate) default_mode_labels: FxIndexMap<Span, ty::Mutability>, |
1109 |
| -} |
1110 |
| - |
1111 |
| -impl Subdiagnostic for Rust2024IncompatiblePatSugg { |
1112 |
| - fn add_to_diag<G: EmissionGuarantee>(self, diag: &mut Diag<'_, G>) { |
1113 |
| - // Format and emit explanatory notes about default binding modes. Reversing the spans' order |
1114 |
| - // means if we have nested spans, the innermost ones will be visited first. |
1115 |
| - for (span, def_br_mutbl) in self.default_mode_labels.into_iter().rev() { |
1116 |
| - // Don't point to a macro call site. |
1117 |
| - if !span.from_expansion() { |
1118 |
| - let note_msg = "matching on a reference type with a non-reference pattern changes the default binding mode"; |
1119 |
| - let label_msg = |
1120 |
| - format!("this matches on type `{}_`", def_br_mutbl.ref_prefix_str()); |
1121 |
| - let mut label = MultiSpan::from(span); |
1122 |
| - label.push_span_label(span, label_msg); |
1123 |
| - diag.span_note(label, note_msg); |
1124 |
| - } |
1125 |
| - } |
1126 |
| - |
1127 |
| - // Format and emit the suggestion. |
1128 |
| - let applicability = |
1129 |
| - if self.suggestion.iter().all(|(span, _)| span.can_be_used_for_suggestions()) { |
1130 |
| - Applicability::MachineApplicable |
1131 |
| - } else { |
1132 |
| - Applicability::MaybeIncorrect |
1133 |
| - }; |
1134 |
| - let msg = if self.suggest_eliding_modes { |
1135 |
| - let plural_modes = pluralize!(self.binding_mode_count); |
1136 |
| - format!("remove the unnecessary binding modifier{plural_modes}") |
1137 |
| - } else { |
1138 |
| - let plural_derefs = pluralize!(self.ref_pattern_count); |
1139 |
| - let and_modes = if self.binding_mode_count > 0 { |
1140 |
| - format!(" and variable binding mode{}", pluralize!(self.binding_mode_count)) |
1141 |
| - } else { |
1142 |
| - String::new() |
1143 |
| - }; |
1144 |
| - format!("make the implied reference pattern{plural_derefs}{and_modes} explicit") |
1145 |
| - }; |
1146 |
| - // FIXME(dianne): for peace of mind, don't risk emitting a 0-part suggestion (that panics!) |
1147 |
| - if !self.suggestion.is_empty() { |
1148 |
| - diag.multipart_suggestion_verbose(msg, self.suggestion, applicability); |
1149 |
| - } |
1150 |
| - } |
1151 |
| -} |
1152 |
| - |
1153 | 1089 | #[derive(Diagnostic)]
|
1154 | 1090 | #[diag(mir_build_loop_match_invalid_update)]
|
1155 | 1091 | pub(crate) struct LoopMatchInvalidUpdate {
|
|
0 commit comments