Skip to content

Commit 69f0dc6

Browse files
committed
deindent unsized suggestions
Move stuff out of loops. Use early returns.
1 parent 437b202 commit 69f0dc6

File tree

1 file changed

+63
-63
lines changed
  • compiler/rustc_trait_selection/src/traits/error_reporting

1 file changed

+63
-63
lines changed

compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs

+63-63
Original file line numberDiff line numberDiff line change
@@ -1803,51 +1803,51 @@ impl<'a, 'tcx> InferCtxtPrivExt<'tcx> for InferCtxt<'a, 'tcx> {
18031803
Some(generics) => generics,
18041804
None => return,
18051805
};
1806-
debug!("suggest_unsized_bound_if_applicable: generics.params={:?}", generics.params);
1807-
debug!(
1808-
"suggest_unsized_bound_if_applicable: generics.where_clause={:?}",
1809-
generics.where_clause
1810-
);
1811-
for param in generics.params {
1812-
if param.span != span
1813-
|| param.bounds.iter().any(|bound| {
1814-
bound.trait_ref().and_then(|trait_ref| trait_ref.trait_def_id())
1815-
== self.tcx.lang_items().sized_trait()
1816-
})
1817-
{
1818-
continue;
1819-
}
1820-
debug!("maybe_suggest_unsized_generics: param={:?}", param);
1821-
match node {
1822-
hir::Node::Item(
1823-
item
1824-
@
1825-
hir::Item {
1826-
kind:
1827-
hir::ItemKind::Enum(..)
1828-
| hir::ItemKind::Struct(..)
1829-
| hir::ItemKind::Union(..),
1830-
..
1831-
},
1832-
) => {
1833-
if self.maybe_indirection_for_unsized(err, item, param) {
1834-
return;
1835-
}
1806+
let sized_trait = self.tcx.lang_items().sized_trait();
1807+
debug!("maybe_suggest_unsized_generics: generics.params={:?}", generics.params);
1808+
debug!("maybe_suggest_unsized_generics: generics.where_clause={:?}", generics.where_clause);
1809+
let param = generics
1810+
.params
1811+
.iter()
1812+
.filter(|param| param.span == span)
1813+
.filter(|param| {
1814+
param
1815+
.bounds
1816+
.iter()
1817+
.all(|bound| bound.trait_ref().and_then(|tr| tr.trait_def_id()) != sized_trait)
1818+
})
1819+
.next();
1820+
let param = match param {
1821+
Some(param) => param,
1822+
_ => return,
1823+
};
1824+
debug!("maybe_suggest_unsized_generics: param={:?}", param);
1825+
match node {
1826+
hir::Node::Item(
1827+
item
1828+
@
1829+
hir::Item {
1830+
kind:
1831+
hir::ItemKind::Enum(..) | hir::ItemKind::Struct(..) | hir::ItemKind::Union(..),
1832+
..
1833+
},
1834+
) => {
1835+
if self.maybe_indirection_for_unsized(err, item, param) {
1836+
return;
18361837
}
1837-
_ => {}
18381838
}
1839-
let (span, separator) = match param.bounds {
1840-
[] => (span.shrink_to_hi(), ":"),
1841-
[.., bound] => (bound.span().shrink_to_hi(), " +"),
1842-
};
1843-
err.span_suggestion_verbose(
1844-
span,
1845-
"consider relaxing the implicit `Sized` restriction",
1846-
format!("{} ?Sized", separator),
1847-
Applicability::MachineApplicable,
1848-
);
1849-
return;
1850-
}
1839+
_ => {}
1840+
};
1841+
let (span, separator) = match param.bounds {
1842+
[] => (span.shrink_to_hi(), ":"),
1843+
[.., bound] => (bound.span().shrink_to_hi(), " +"),
1844+
};
1845+
err.span_suggestion_verbose(
1846+
span,
1847+
"consider relaxing the implicit `Sized` restriction",
1848+
format!("{} ?Sized", separator),
1849+
Applicability::MachineApplicable,
1850+
);
18511851
}
18521852

18531853
fn maybe_indirection_for_unsized(
@@ -1862,29 +1862,29 @@ impl<'a, 'tcx> InferCtxtPrivExt<'tcx> for InferCtxt<'a, 'tcx> {
18621862
let mut visitor =
18631863
FindTypeParam { param: param.name.ident().name, invalid_spans: vec![], nested: false };
18641864
visitor.visit_item(item);
1865-
if !visitor.invalid_spans.is_empty() {
1866-
let mut multispan: MultiSpan = param.span.into();
1865+
if visitor.invalid_spans.is_empty() {
1866+
return false;
1867+
}
1868+
let mut multispan: MultiSpan = param.span.into();
1869+
multispan.push_span_label(
1870+
param.span,
1871+
format!("this could be changed to `{}: ?Sized`...", param.name.ident()),
1872+
);
1873+
for sp in visitor.invalid_spans {
18671874
multispan.push_span_label(
1868-
param.span,
1869-
format!("this could be changed to `{}: ?Sized`...", param.name.ident()),
1875+
sp,
1876+
format!("...if indirection were used here: `Box<{}>`", param.name.ident()),
18701877
);
1871-
for sp in visitor.invalid_spans {
1872-
multispan.push_span_label(
1873-
sp,
1874-
format!("...if indirection were used here: `Box<{}>`", param.name.ident()),
1875-
);
1876-
}
1877-
err.span_help(
1878-
multispan,
1879-
&format!(
1880-
"you could relax the implicit `Sized` bound on `{T}` if it were \
1881-
used through indirection like `&{T}` or `Box<{T}>`",
1882-
T = param.name.ident(),
1883-
),
1884-
);
1885-
return true;
18861878
}
1887-
false
1879+
err.span_help(
1880+
multispan,
1881+
&format!(
1882+
"you could relax the implicit `Sized` bound on `{T}` if it were \
1883+
used through indirection like `&{T}` or `Box<{T}>`",
1884+
T = param.name.ident(),
1885+
),
1886+
);
1887+
true
18881888
}
18891889

18901890
fn is_recursive_obligation(

0 commit comments

Comments
 (0)