11472: fix: visibility in impl items and pub(crate) to pub in extract_module r=feniljain a=feniljain

Should fix #11007 and #11443

Makes following changes:

- Removes visiblity modifiers from trait items
- Respect user given visibility
- Updated tests for the same

Co-authored-by: vi_mi <fkjainco@gmail.com>
Co-authored-by: vi_mi <49019259+feniljain@users.noreply.github.com>
This commit is contained in:
bors[bot] 2022-02-22 18:12:27 +00:00 committed by GitHub
commit 033f91e75d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -779,7 +779,8 @@ fn get_replacements_for_visibilty_change(
ast::Item::Enum(it) => replacements.push((it.visibility(), it.syntax().clone())),
ast::Item::ExternCrate(it) => replacements.push((it.visibility(), it.syntax().clone())),
ast::Item::Fn(it) => replacements.push((it.visibility(), it.syntax().clone())),
ast::Item::Impl(it) => impls.push(it),
//Associated item's visibility should not be changed
ast::Item::Impl(it) if it.for_token().is_none() => impls.push(it),
ast::Item::MacroRules(it) => replacements.push((it.visibility(), it.syntax().clone())),
ast::Item::MacroDef(it) => replacements.push((it.visibility(), it.syntax().clone())),
ast::Item::Module(it) => replacements.push((it.visibility(), it.syntax().clone())),
@ -825,11 +826,7 @@ fn add_change_vis(
vis: Option<ast::Visibility>,
node_or_token_opt: Option<syntax::SyntaxElement>,
) -> Option<()> {
if let Some(vis) = vis {
if vis.syntax().text() == "pub" {
ted::replace(vis.syntax(), make::visibility_pub_crate().syntax().clone_for_update());
}
} else {
if let None = vis {
if let Some(node_or_token) = node_or_token_opt {
let pub_crate_vis = make::visibility_pub_crate().clone_for_update();
if let Some(node) = node_or_token.as_node() {
@ -962,8 +959,8 @@ mod modname {
pub(crate) inner: SomeType,
}
pub(crate) struct PrivateStruct1 {
pub(crate) inner: i32,
pub struct PrivateStruct1 {
pub inner: i32,
}
impl PrivateStruct {
@ -1033,7 +1030,7 @@ mod modname {
pub(crate) struct A {}
impl A {
pub(crate) fn new_a() -> i32 {
pub fn new_a() -> i32 {
2
}
}
@ -1148,7 +1145,7 @@ mod modname {
pub struct PrivateStruct;
$0struct Strukt {
field: PrivateStruct,
field: PrivateStruct,
}$0
struct Strukt1 {
@ -1164,7 +1161,7 @@ mod modname {
use super::PrivateStruct;
pub(crate) struct Strukt {
pub(crate) field: PrivateStruct,
pub(crate) field: PrivateStruct,
}
}
@ -1203,7 +1200,7 @@ mod modname {
use super::A;
impl A {
pub(crate) fn new_a() -> i32 {
pub fn new_a() -> i32 {
2
}
}
@ -1251,7 +1248,7 @@ mod modname {
use super::super::foo::A;
impl A {
pub(crate) fn new_a() -> i32 {
pub fn new_a() -> i32 {
2
}
}
@ -1378,4 +1375,39 @@ mod modname {
",
)
}
#[test]
fn test_do_not_apply_visibility_modifier_to_trait_impl_items() {
check_assist(
extract_module,
r"
trait ATrait {
fn function();
}
struct A {}
$0impl ATrait for A {
fn function() {}
}$0
",
r"
trait ATrait {
fn function();
}
struct A {}
mod modname {
use super::A;
use super::ATrait;
impl ATrait for A {
fn function() {}
}
}
",
)
}
}