Use span_label as it looks better when we show pattern missing bind… · rust-lang/rust@733fd03 (original) (raw)

`@@ -1129,7 +1129,7 @@ impl<'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'_, 'ast, 'ra, 'tcx> {

`

1129

1129

`) {

`

1130

1130

`let [segment] = path else { return };

`

1131

1131

`let None = following_seg else { return };

`

1132

``

`-

'outer: for rib in self.ribs[ValueNS].iter().rev() {

`

``

1132

`+

for rib in self.ribs[ValueNS].iter().rev() {

`

1133

1133

`for (def_id, spans) in &rib.patterns_with_skipped_bindings {

`

1134

1134

`if let Some(fields) = self.r.field_idents(*def_id) {

`

1135

1135

`for field in fields {

`

`@@ -1141,38 +1141,21 @@ impl<'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'_, 'ast, 'ra, 'tcx> {

`

1141

1141

` spans.iter().map(|(s, _)| *s).collect::<Vec<_>>().into();

`

1142

1142

` err.span_note(

`

1143

1143

` multispan,

`

1144

``

`-

"this pattern had a recovered parse error which likely \

`

1145

``

`-

lost the expected fields",

`

``

1144

`+

"this pattern had a recovered parse error which likely lost \

`

``

1145

`+

the expected fields",

`

1146

1146

`);

`

1147

1147

` err.downgrade_to_delayed_bug();

`

1148

1148

`}

`

1149

``

`-

let mut multispan: MultiSpan = spans

`

1150

``

`-

.iter()

`

1151

``

`-

.filter(|(_, had_error)| had_error.is_ok())

`

1152

``

`-

.map(|(sp, _)| *sp)

`

1153

``

`-

.collect::<Vec<_>>()

`

1154

``

`-

.into();

`

1155

``

`-

let def_span = self.r.def_span(*def_id);

`

1156

1149

`let ty = self.r.tcx.item_name(*def_id);

`

1157

``

`-

multispan.push_span_label(def_span, String::new());

`

1158

``

`-

multispan.push_span_label(field.span, "defined here".to_string());

`

1159

``

`-

for (span, ) in spans.iter().filter(|(, had_err)| had_err.is_ok()) {

`

1160

``

`-

multispan.push_span_label(

`

``

1150

`+

for (span, _) in spans {

`

``

1151

`+

err.span_label(

`

1161

1152

`*span,

`

1162

1153

`format!(

`

1163

1154

`` "this pattern doesn't include {field}, which is \

``

1164

1155

`` available in {ty}",

``

1165

1156

`),

`

1166

1157

`);

`

1167

1158

`}

`

1168

``

`-

err.span_note(

`

1169

``

`-

multispan,

`

1170

``

`-

format!(

`

1171

``

`` -

"{ty} has a field {field} which could have been included \

``

1172

``

`-

in this pattern, but it wasn't",

`

1173

``

`-

),

`

1174

``

`-

);

`

1175

``

`-

break 'outer;

`

1176

1159

`}

`

1177

1160

`}

`

1178

1161

`}

`