mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 11:31:15 +00:00
Fix #7712 retain visibility extracting mod to file
This commit is contained in:
parent
de67469f59
commit
b963893349
@ -1,4 +1,4 @@
|
|||||||
use ast::edit::IndentLevel;
|
use ast::{edit::IndentLevel, VisibilityOwner};
|
||||||
use ide_db::base_db::AnchoredPathBuf;
|
use ide_db::base_db::AnchoredPathBuf;
|
||||||
use syntax::{
|
use syntax::{
|
||||||
ast::{self, edit::AstNodeEdit, NameOwner},
|
ast::{self, edit::AstNodeEdit, NameOwner},
|
||||||
@ -36,6 +36,8 @@ pub(crate) fn move_module_to_file(acc: &mut Assists, ctx: &AssistContext) -> Opt
|
|||||||
|
|
||||||
let module_def = ctx.sema.to_def(&module_ast)?;
|
let module_def = ctx.sema.to_def(&module_ast)?;
|
||||||
let parent_module = module_def.parent(ctx.db())?;
|
let parent_module = module_def.parent(ctx.db())?;
|
||||||
|
let vis_str =
|
||||||
|
if let Some(v) = module_ast.visibility() { v.to_string() + " " } else { "".to_string() };
|
||||||
|
|
||||||
acc.add(
|
acc.add(
|
||||||
AssistId("move_module_to_file", AssistKind::RefactorExtract),
|
AssistId("move_module_to_file", AssistKind::RefactorExtract),
|
||||||
@ -59,7 +61,10 @@ pub(crate) fn move_module_to_file(acc: &mut Assists, ctx: &AssistContext) -> Opt
|
|||||||
items
|
items
|
||||||
};
|
};
|
||||||
|
|
||||||
builder.replace(module_ast.syntax().text_range(), format!("mod {};", module_name));
|
builder.replace(
|
||||||
|
module_ast.syntax().text_range(),
|
||||||
|
format!("{}mod {};", vis_str, module_name),
|
||||||
|
);
|
||||||
|
|
||||||
let dst = AnchoredPathBuf { anchor: ctx.frange.file_id, path };
|
let dst = AnchoredPathBuf { anchor: ctx.frange.file_id, path };
|
||||||
builder.create_file(dst, contents);
|
builder.create_file(dst, contents);
|
||||||
@ -137,6 +142,42 @@ fn f() {}
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn extract_public() {
|
||||||
|
check_assist(
|
||||||
|
move_module_to_file,
|
||||||
|
r#"
|
||||||
|
pub mod $0tests {
|
||||||
|
#[test] fn t() {}
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
r#"
|
||||||
|
//- /main.rs
|
||||||
|
pub mod tests;
|
||||||
|
//- /tests.rs
|
||||||
|
#[test] fn t() {}
|
||||||
|
"#,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn extract_public_crate() {
|
||||||
|
check_assist(
|
||||||
|
move_module_to_file,
|
||||||
|
r#"
|
||||||
|
pub(crate) mod $0tests {
|
||||||
|
#[test] fn t() {}
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
r#"
|
||||||
|
//- /main.rs
|
||||||
|
pub(crate) mod tests;
|
||||||
|
//- /tests.rs
|
||||||
|
#[test] fn t() {}
|
||||||
|
"#,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn available_before_curly() {
|
fn available_before_curly() {
|
||||||
mark::check!(available_before_curly);
|
mark::check!(available_before_curly);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user