Skip to content

Commit 23d9211

Browse files
committed
Flatten for loop using iterator combinators.
1 parent 10639d7 commit 23d9211

File tree

1 file changed

+50
-48
lines changed

1 file changed

+50
-48
lines changed

src/librustc/traits/error_reporting.rs

+50-48
Original file line numberDiff line numberDiff line change
@@ -266,61 +266,63 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
266266

267267
let span = obligation.cause.span;
268268
let mut report = None;
269-
for item in self.tcx.get_attrs(def_id).iter() {
270-
if item.check_name("rustc_on_unimplemented") {
271-
let err_sp = item.meta().span.substitute_dummy(span);
272-
let trait_str = self.tcx.item_path_str(trait_ref.def_id);
273-
if let Some(istring) = item.value_str() {
274-
let istring = &*istring.as_str();
275-
let generics = self.tcx.item_generics(trait_ref.def_id);
276-
let generic_map = generics.types.iter().map(|param| {
277-
(param.name.as_str().to_string(),
278-
trait_ref.substs.type_for_def(param).to_string())
279-
}).collect::<FxHashMap<String, String>>();
280-
let parser = Parser::new(istring);
281-
let mut errored = false;
282-
let err: String = parser.filter_map(|p| {
283-
match p {
284-
Piece::String(s) => Some(s),
285-
Piece::NextArgument(a) => match a.position {
286-
Position::ArgumentNamed(s) => match generic_map.get(s) {
287-
Some(val) => Some(val),
288-
None => {
289-
span_err!(self.tcx.sess, err_sp, E0272,
290-
"the #[rustc_on_unimplemented] \
291-
attribute on \
292-
trait definition for {} refers to \
293-
non-existent type parameter {}",
294-
trait_str, s);
295-
errored = true;
296-
None
297-
}
298-
},
299-
_ => {
300-
span_err!(self.tcx.sess, err_sp, E0273,
301-
"the #[rustc_on_unimplemented] attribute \
302-
on trait definition for {} must have \
303-
named format arguments, eg \
304-
`#[rustc_on_unimplemented = \
305-
\"foo {{T}}\"]`", trait_str);
269+
if let Some(item) = self.tcx
270+
.get_attrs(def_id)
271+
.into_iter()
272+
.filter(|a| a.check_name("rustc_on_unimplemented"))
273+
.next()
274+
{
275+
let err_sp = item.meta().span.substitute_dummy(span);
276+
let trait_str = self.tcx.item_path_str(trait_ref.def_id);
277+
if let Some(istring) = item.value_str() {
278+
let istring = &*istring.as_str();
279+
let generics = self.tcx.item_generics(trait_ref.def_id);
280+
let generic_map = generics.types.iter().map(|param| {
281+
(param.name.as_str().to_string(),
282+
trait_ref.substs.type_for_def(param).to_string())
283+
}).collect::<FxHashMap<String, String>>();
284+
let parser = Parser::new(istring);
285+
let mut errored = false;
286+
let err: String = parser.filter_map(|p| {
287+
match p {
288+
Piece::String(s) => Some(s),
289+
Piece::NextArgument(a) => match a.position {
290+
Position::ArgumentNamed(s) => match generic_map.get(s) {
291+
Some(val) => Some(val),
292+
None => {
293+
span_err!(self.tcx.sess, err_sp, E0272,
294+
"the #[rustc_on_unimplemented] \
295+
attribute on \
296+
trait definition for {} refers to \
297+
non-existent type parameter {}",
298+
trait_str, s);
306299
errored = true;
307300
None
308301
}
302+
},
303+
_ => {
304+
span_err!(self.tcx.sess, err_sp, E0273,
305+
"the #[rustc_on_unimplemented] attribute \
306+
on trait definition for {} must have \
307+
named format arguments, eg \
308+
`#[rustc_on_unimplemented = \
309+
\"foo {{T}}\"]`", trait_str);
310+
errored = true;
311+
None
309312
}
310313
}
311-
}).collect();
312-
// Report only if the format string checks out
313-
if !errored {
314-
report = Some(err);
315314
}
316-
} else {
317-
span_err!(self.tcx.sess, err_sp, E0274,
318-
"the #[rustc_on_unimplemented] attribute on \
319-
trait definition for {} must have a value, \
320-
eg `#[rustc_on_unimplemented = \"foo\"]`",
321-
trait_str);
315+
}).collect();
316+
// Report only if the format string checks out
317+
if !errored {
318+
report = Some(err);
322319
}
323-
break;
320+
} else {
321+
span_err!(self.tcx.sess, err_sp, E0274,
322+
"the #[rustc_on_unimplemented] attribute on \
323+
trait definition for {} must have a value, \
324+
eg `#[rustc_on_unimplemented = \"foo\"]`",
325+
trait_str);
324326
}
325327
}
326328
report

0 commit comments

Comments
 (0)