Fix invalid add of whitespace when there is where clause
This commit is contained in:
parent
53792b9c5c
commit
c748551f7f
@ -146,6 +146,10 @@ impl Buffer {
|
|||||||
pub(crate) fn reserve(&mut self, additional: usize) {
|
pub(crate) fn reserve(&mut self, additional: usize) {
|
||||||
self.buffer.reserve(additional)
|
self.buffer.reserve(additional)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) fn len(&self) -> usize {
|
||||||
|
self.buffer.len()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn comma_sep<T: fmt::Display>(
|
fn comma_sep<T: fmt::Display>(
|
||||||
|
@ -62,6 +62,17 @@ struct ItemVars<'a> {
|
|||||||
src_href: Option<&'a str>,
|
src_href: Option<&'a str>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Calls `print_where_clause` and returns `true` if a `where` clause was generated.
|
||||||
|
fn print_where_clause_and_check<'a, 'tcx: 'a>(
|
||||||
|
buffer: &mut Buffer,
|
||||||
|
gens: &'a clean::Generics,
|
||||||
|
cx: &'a Context<'tcx>,
|
||||||
|
) -> bool {
|
||||||
|
let len_before = buffer.len();
|
||||||
|
write!(buffer, "{}", print_where_clause(gens, cx, 0, true));
|
||||||
|
len_before != buffer.len()
|
||||||
|
}
|
||||||
|
|
||||||
pub(super) fn print_item(
|
pub(super) fn print_item(
|
||||||
cx: &mut Context<'_>,
|
cx: &mut Context<'_>,
|
||||||
item: &clean::Item,
|
item: &clean::Item,
|
||||||
@ -1152,12 +1163,16 @@ fn item_enum(w: &mut Buffer, cx: &mut Context<'_>, it: &clean::Item, e: &clean::
|
|||||||
render_attributes_in_pre(w, it, "");
|
render_attributes_in_pre(w, it, "");
|
||||||
write!(
|
write!(
|
||||||
w,
|
w,
|
||||||
"{}enum {}{}{}",
|
"{}enum {}{}",
|
||||||
it.visibility.print_with_space(it.item_id, cx),
|
it.visibility.print_with_space(it.item_id, cx),
|
||||||
it.name.unwrap(),
|
it.name.unwrap(),
|
||||||
e.generics.print(cx),
|
e.generics.print(cx),
|
||||||
print_where_clause(&e.generics, cx, 0, true),
|
|
||||||
);
|
);
|
||||||
|
if !print_where_clause_and_check(w, &e.generics, cx) {
|
||||||
|
// If there wasn't a `where` clause, we add a whitespace.
|
||||||
|
w.write_str(" ");
|
||||||
|
}
|
||||||
|
|
||||||
let variants_stripped = e.has_stripped_entries();
|
let variants_stripped = e.has_stripped_entries();
|
||||||
if count_variants == 0 && !variants_stripped {
|
if count_variants == 0 && !variants_stripped {
|
||||||
w.write_str("{}");
|
w.write_str("{}");
|
||||||
@ -1643,10 +1658,18 @@ fn render_union(
|
|||||||
tab: &str,
|
tab: &str,
|
||||||
cx: &Context<'_>,
|
cx: &Context<'_>,
|
||||||
) {
|
) {
|
||||||
write!(w, "{}union {}", it.visibility.print_with_space(it.item_id, cx), it.name.unwrap());
|
write!(w, "{}union {}", it.visibility.print_with_space(it.item_id, cx), it.name.unwrap(),);
|
||||||
if let Some(g) = g {
|
|
||||||
|
let where_displayed = g
|
||||||
|
.map(|g| {
|
||||||
write!(w, "{}", g.print(cx));
|
write!(w, "{}", g.print(cx));
|
||||||
write!(w, "{}", print_where_clause(g, cx, 0, true));
|
print_where_clause_and_check(w, g, cx)
|
||||||
|
})
|
||||||
|
.unwrap_or(false);
|
||||||
|
|
||||||
|
// If there wasn't a `where` clause, we add a whitespace.
|
||||||
|
if !where_displayed {
|
||||||
|
w.write_str(" ");
|
||||||
}
|
}
|
||||||
|
|
||||||
write!(w, "{{\n{}", tab);
|
write!(w, "{{\n{}", tab);
|
||||||
@ -1701,10 +1724,14 @@ fn render_struct(
|
|||||||
}
|
}
|
||||||
match ty {
|
match ty {
|
||||||
CtorKind::Fictive => {
|
CtorKind::Fictive => {
|
||||||
if let Some(g) = g {
|
let where_diplayed = g.map(|g| print_where_clause_and_check(w, g, cx)).unwrap_or(false);
|
||||||
write!(w, "{}", print_where_clause(g, cx, 0, true),)
|
|
||||||
}
|
// If there wasn't a `where` clause, we add a whitespace.
|
||||||
|
if !where_diplayed {
|
||||||
w.write_str(" {");
|
w.write_str(" {");
|
||||||
|
} else {
|
||||||
|
w.write_str("{");
|
||||||
|
}
|
||||||
let count_fields =
|
let count_fields =
|
||||||
fields.iter().filter(|f| matches!(*f.kind, clean::StructFieldItem(..))).count();
|
fields.iter().filter(|f| matches!(*f.kind, clean::StructFieldItem(..))).count();
|
||||||
let has_visible_fields = count_fields > 0;
|
let has_visible_fields = count_fields > 0;
|
||||||
@ -1759,7 +1786,7 @@ fn render_struct(
|
|||||||
}
|
}
|
||||||
w.write_str(")");
|
w.write_str(")");
|
||||||
if let Some(g) = g {
|
if let Some(g) = g {
|
||||||
write!(w, "{}", print_where_clause(g, cx, 0, false),)
|
write!(w, "{}", print_where_clause(g, cx, 0, false));
|
||||||
}
|
}
|
||||||
// We only want a ";" when we are displaying a tuple struct, not a variant tuple struct.
|
// We only want a ";" when we are displaying a tuple struct, not a variant tuple struct.
|
||||||
if structhead {
|
if structhead {
|
||||||
@ -1769,7 +1796,7 @@ fn render_struct(
|
|||||||
CtorKind::Const => {
|
CtorKind::Const => {
|
||||||
// Needed for PhantomData.
|
// Needed for PhantomData.
|
||||||
if let Some(g) = g {
|
if let Some(g) = g {
|
||||||
write!(w, "{}", print_where_clause(g, cx, 0, false),)
|
write!(w, "{}", print_where_clause(g, cx, 0, false));
|
||||||
}
|
}
|
||||||
w.write_str(";");
|
w.write_str(";");
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user