Auto merge of #13623 - jonas-schievink:strip-trait-item-completions, r=jonas-schievink

fix: Strip comments and attributes off of all trait item completions

Previously, this was done in several places redundantly, but not for all items. It was also untested. This PR fixes that.
This commit is contained in:
bors 2022-11-15 11:45:02 +00:00
commit 8292dd8026

View File

@ -236,9 +236,7 @@ fn get_transformed_assoc_item(
); );
transform.apply(assoc_item.syntax()); transform.apply(assoc_item.syntax());
if let ast::AssocItem::Fn(func) = &assoc_item { assoc_item.remove_attrs_and_docs();
func.remove_attrs_and_docs();
}
Some(assoc_item) Some(assoc_item)
} }
@ -335,7 +333,6 @@ fn add_const_impl(
} }
fn make_const_compl_syntax(const_: &ast::Const, needs_whitespace: bool) -> String { fn make_const_compl_syntax(const_: &ast::Const, needs_whitespace: bool) -> String {
const_.remove_attrs_and_docs();
let const_ = if needs_whitespace { let const_ = if needs_whitespace {
insert_whitespace_into_node::insert_ws_into(const_.syntax().clone()) insert_whitespace_into_node::insert_ws_into(const_.syntax().clone())
} else { } else {
@ -359,8 +356,6 @@ fn make_const_compl_syntax(const_: &ast::Const, needs_whitespace: bool) -> Strin
} }
fn function_declaration(node: &ast::Fn, needs_whitespace: bool) -> String { fn function_declaration(node: &ast::Fn, needs_whitespace: bool) -> String {
node.remove_attrs_and_docs();
let node = if needs_whitespace { let node = if needs_whitespace {
insert_whitespace_into_node::insert_ws_into(node.syntax().clone()) insert_whitespace_into_node::insert_ws_into(node.syntax().clone())
} else { } else {
@ -1209,6 +1204,81 @@ trait Tr<'b> {
impl<'b> Tr<'b> for () { impl<'b> Tr<'b> for () {
type Ty<'a: 'b, T: Copy, const C: usize> = $0; type Ty<'a: 'b, T: Copy, const C: usize> = $0;
} }
"#,
);
}
#[test]
fn strips_comments() {
check_edit(
"fn func",
r#"
trait Tr {
/// docs
#[attr]
fn func();
}
impl Tr for () {
$0
}
"#,
r#"
trait Tr {
/// docs
#[attr]
fn func();
}
impl Tr for () {
fn func() {
$0
}
}
"#,
);
check_edit(
"const C",
r#"
trait Tr {
/// docs
#[attr]
const C: usize;
}
impl Tr for () {
$0
}
"#,
r#"
trait Tr {
/// docs
#[attr]
const C: usize;
}
impl Tr for () {
const C: usize = $0;
}
"#,
);
check_edit(
"type Item",
r#"
trait Tr {
/// docs
#[attr]
type Item;
}
impl Tr for () {
$0
}
"#,
r#"
trait Tr {
/// docs
#[attr]
type Item;
}
impl Tr for () {
type Item = $0;
}
"#, "#,
); );
} }