parent
e903fcdaae
commit
5f9de6bfc9
@ -589,6 +589,8 @@ impl<'a> Context<'a> {
|
|||||||
|
|
||||||
fn rewrite_items(&self) -> Option<(bool, String)> {
|
fn rewrite_items(&self) -> Option<(bool, String)> {
|
||||||
let span = self.items_span();
|
let span = self.items_span();
|
||||||
|
debug!("items: {:?}", self.items);
|
||||||
|
|
||||||
let items = itemize_list(
|
let items = itemize_list(
|
||||||
self.context.snippet_provider,
|
self.context.snippet_provider,
|
||||||
self.items.iter(),
|
self.items.iter(),
|
||||||
@ -603,6 +605,8 @@ impl<'a> Context<'a> {
|
|||||||
);
|
);
|
||||||
let mut list_items: Vec<_> = items.collect();
|
let mut list_items: Vec<_> = items.collect();
|
||||||
|
|
||||||
|
debug!("items: {list_items:?}");
|
||||||
|
|
||||||
// Try letting the last argument overflow to the next line with block
|
// Try letting the last argument overflow to the next line with block
|
||||||
// indentation. If its first line fits on one line with the other arguments,
|
// indentation. If its first line fits on one line with the other arguments,
|
||||||
// we format the function arguments horizontally.
|
// we format the function arguments horizontally.
|
||||||
|
76
src/types.rs
76
src/types.rs
@ -572,49 +572,41 @@ impl Rewrite for ast::GenericBounds {
|
|||||||
|
|
||||||
impl Rewrite for ast::GenericParam {
|
impl Rewrite for ast::GenericParam {
|
||||||
fn rewrite(&self, context: &RewriteContext<'_>, shape: Shape) -> Option<String> {
|
fn rewrite(&self, context: &RewriteContext<'_>, shape: Shape) -> Option<String> {
|
||||||
let mut result = String::with_capacity(128);
|
|
||||||
// FIXME: If there are more than one attributes, this will force multiline.
|
// FIXME: If there are more than one attributes, this will force multiline.
|
||||||
match self.attrs.rewrite(context, shape) {
|
let mut result = self.attrs.rewrite(context, shape).unwrap_or(String::new());
|
||||||
Some(ref rw) if !rw.is_empty() => {
|
let has_attrs = !result.is_empty();
|
||||||
result.push_str(rw);
|
|
||||||
// When rewriting generic params, an extra newline should be put
|
|
||||||
// if the attributes end with a doc comment
|
|
||||||
if let Some(true) = self.attrs.last().map(|a| a.is_doc_comment()) {
|
|
||||||
result.push_str(&shape.indent.to_string_with_newline(context.config));
|
|
||||||
} else {
|
|
||||||
result.push(' ');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_ => (),
|
|
||||||
}
|
|
||||||
|
|
||||||
if let ast::GenericParamKind::Const {
|
let mut param = String::with_capacity(128);
|
||||||
|
|
||||||
|
let param_start = if let ast::GenericParamKind::Const {
|
||||||
ref ty,
|
ref ty,
|
||||||
kw_span: _,
|
kw_span,
|
||||||
default,
|
default,
|
||||||
} = &self.kind
|
} = &self.kind
|
||||||
{
|
{
|
||||||
result.push_str("const ");
|
param.push_str("const ");
|
||||||
result.push_str(rewrite_ident(context, self.ident));
|
param.push_str(rewrite_ident(context, self.ident));
|
||||||
result.push_str(": ");
|
param.push_str(": ");
|
||||||
result.push_str(&ty.rewrite(context, shape)?);
|
param.push_str(&ty.rewrite(context, shape)?);
|
||||||
if let Some(default) = default {
|
if let Some(default) = default {
|
||||||
let eq_str = match context.config.type_punctuation_density() {
|
let eq_str = match context.config.type_punctuation_density() {
|
||||||
TypeDensity::Compressed => "=",
|
TypeDensity::Compressed => "=",
|
||||||
TypeDensity::Wide => " = ",
|
TypeDensity::Wide => " = ",
|
||||||
};
|
};
|
||||||
result.push_str(eq_str);
|
param.push_str(eq_str);
|
||||||
let budget = shape.width.checked_sub(result.len())?;
|
let budget = shape.width.checked_sub(param.len())?;
|
||||||
let rewrite = default.rewrite(context, Shape::legacy(budget, shape.indent))?;
|
let rewrite = default.rewrite(context, Shape::legacy(budget, shape.indent))?;
|
||||||
result.push_str(&rewrite);
|
param.push_str(&rewrite);
|
||||||
}
|
}
|
||||||
|
kw_span.lo()
|
||||||
} else {
|
} else {
|
||||||
result.push_str(rewrite_ident(context, self.ident));
|
param.push_str(rewrite_ident(context, self.ident));
|
||||||
}
|
self.ident.span.lo()
|
||||||
|
};
|
||||||
|
|
||||||
if !self.bounds.is_empty() {
|
if !self.bounds.is_empty() {
|
||||||
result.push_str(type_bound_colon(context));
|
param.push_str(type_bound_colon(context));
|
||||||
result.push_str(&self.bounds.rewrite(context, shape)?)
|
param.push_str(&self.bounds.rewrite(context, shape)?)
|
||||||
}
|
}
|
||||||
if let ast::GenericParamKind::Type {
|
if let ast::GenericParamKind::Type {
|
||||||
default: Some(ref def),
|
default: Some(ref def),
|
||||||
@ -624,11 +616,33 @@ impl Rewrite for ast::GenericParam {
|
|||||||
TypeDensity::Compressed => "=",
|
TypeDensity::Compressed => "=",
|
||||||
TypeDensity::Wide => " = ",
|
TypeDensity::Wide => " = ",
|
||||||
};
|
};
|
||||||
result.push_str(eq_str);
|
param.push_str(eq_str);
|
||||||
let budget = shape.width.checked_sub(result.len())?;
|
let budget = shape.width.checked_sub(param.len())?;
|
||||||
let rewrite =
|
let rewrite =
|
||||||
def.rewrite(context, Shape::legacy(budget, shape.indent + result.len()))?;
|
def.rewrite(context, Shape::legacy(budget, shape.indent + param.len()))?;
|
||||||
result.push_str(&rewrite);
|
param.push_str(&rewrite);
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(last_attr) = self.attrs.last().filter(|last_attr| {
|
||||||
|
contains_comment(context.snippet(mk_sp(last_attr.span.hi(), param_start)))
|
||||||
|
}) {
|
||||||
|
result = combine_strs_with_missing_comments(
|
||||||
|
context,
|
||||||
|
&result,
|
||||||
|
¶m,
|
||||||
|
mk_sp(last_attr.span.hi(), param_start),
|
||||||
|
shape,
|
||||||
|
!last_attr.is_doc_comment(),
|
||||||
|
)?;
|
||||||
|
} else {
|
||||||
|
// When rewriting generic params, an extra newline should be put
|
||||||
|
// if the attributes end with a doc comment
|
||||||
|
if let Some(true) = self.attrs.last().map(|a| a.is_doc_comment()) {
|
||||||
|
result.push_str(&shape.indent.to_string_with_newline(context.config));
|
||||||
|
} else if has_attrs {
|
||||||
|
result.push(' ');
|
||||||
|
}
|
||||||
|
result.push_str(¶m);
|
||||||
}
|
}
|
||||||
|
|
||||||
Some(result)
|
Some(result)
|
||||||
|
@ -12,3 +12,21 @@ struct Foo<
|
|||||||
/// doc of N
|
/// doc of N
|
||||||
const N: item,
|
const N: item,
|
||||||
>;
|
>;
|
||||||
|
|
||||||
|
// Non-doc pre-comment of Foo
|
||||||
|
/// doc of Foo
|
||||||
|
// Non-doc post-comment of Foo
|
||||||
|
struct Foo<
|
||||||
|
// Non-doc pre-comment of 'a
|
||||||
|
/// doc of 'a
|
||||||
|
// Non-doc post-comment of 'a
|
||||||
|
'a,
|
||||||
|
// Non-doc pre-comment of T
|
||||||
|
/// doc of T
|
||||||
|
// Non-doc post-comment of T
|
||||||
|
T,
|
||||||
|
// Non-doc pre-comment of N
|
||||||
|
/// doc of N
|
||||||
|
// Non-doc post-comment of N
|
||||||
|
const N: item,
|
||||||
|
>;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user