Skip to content

Commit

Permalink
Fix doc of generic items formmating error (rust-lang#5124)
Browse files Browse the repository at this point in the history
* Fix doc of generic items formmating error

* Remove tracked `attrs_end_with_doc_comment` flag in `RewriteContext`

* Fix duplicated doc comments of const generic params

* Fix `<ast::GenericParam as Spanned>::span()`

* Remove duplicated source file of `doc-of-generic-item.rs`
  • Loading branch information
frank-king authored Feb 7, 2022
1 parent fd6e11c commit 5df8c8f
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 12 deletions.
15 changes: 4 additions & 11 deletions src/spanned.rs
Original file line number Diff line number Diff line change
Expand Up @@ -113,17 +113,10 @@ impl Spanned for ast::Param {

impl Spanned for ast::GenericParam {
fn span(&self) -> Span {
let lo = if let ast::GenericParamKind::Const {
ty: _,
kw_span,
default: _,
} = self.kind
{
kw_span.lo()
} else if self.attrs.is_empty() {
self.ident.span.lo()
} else {
self.attrs[0].span.lo()
let lo = match self.kind {
_ if !self.attrs.is_empty() => self.attrs[0].span.lo(),
ast::GenericParamKind::Const { kw_span, .. } => kw_span.lo(),
_ => self.ident.span.lo(),
};
let hi = if self.bounds.is_empty() {
self.ident.span.hi()
Expand Down
11 changes: 10 additions & 1 deletion src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -575,7 +575,16 @@ impl Rewrite for ast::GenericParam {
let mut result = String::with_capacity(128);
// FIXME: If there are more than one attributes, this will force multiline.
match self.attrs.rewrite(context, shape) {
Some(ref rw) if !rw.is_empty() => result.push_str(&format!("{} ", rw)),
Some(ref rw) if !rw.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(' ');
}
}
_ => (),
}

Expand Down
14 changes: 14 additions & 0 deletions tests/target/doc-of-generic-item.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// 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
'a,
// Non-doc pre-comment of T
/// doc of T
T,
// Non-doc pre-comment of N
/// doc of N
const N: item,
>;

0 comments on commit 5df8c8f

Please sign in to comment.