mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-25 04:23:25 +00:00
Merge #9939
9939: feat: Adding extract_module assist r=Veykril a=feniljain Should solve https://github.com/rust-analyzer/rust-analyzer/issues/9591 Co-authored-by: vi_mi <fenil.jain2018@vitstudent.ac.in> Co-authored-by: Laurențiu Nicola <lnicola@dend.ro>
This commit is contained in:
commit
a75353e8ac
5 changed files with 1446 additions and 1 deletions
1410
crates/ide_assists/src/handlers/extract_module.rs
Normal file
1410
crates/ide_assists/src/handlers/extract_module.rs
Normal file
File diff suppressed because it is too large
Load diff
|
@ -140,7 +140,7 @@ fn process_usage(
|
|||
None
|
||||
}
|
||||
|
||||
fn range_to_remove(node: &SyntaxNode) -> TextRange {
|
||||
pub(crate) fn range_to_remove(node: &SyntaxNode) -> TextRange {
|
||||
let up_to_comma = next_prev().find_map(|dir| {
|
||||
node.siblings_with_tokens(dir)
|
||||
.filter_map(|it| it.into_token())
|
||||
|
|
|
@ -122,6 +122,7 @@ mod handlers {
|
|||
mod destructure_tuple_binding;
|
||||
mod expand_glob_import;
|
||||
mod extract_function;
|
||||
mod extract_module;
|
||||
mod extract_struct_from_enum_variant;
|
||||
mod extract_type_alias;
|
||||
mod extract_variable;
|
||||
|
@ -275,6 +276,7 @@ mod handlers {
|
|||
//
|
||||
extract_variable::extract_variable,
|
||||
extract_function::extract_function,
|
||||
extract_module::extract_module,
|
||||
//
|
||||
generate_getter::generate_getter,
|
||||
generate_getter::generate_getter_mut,
|
||||
|
|
|
@ -526,6 +526,33 @@ fn $0fun_name(n: i32) {
|
|||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn doctest_extract_module() {
|
||||
check_doc_test(
|
||||
"extract_module",
|
||||
r#####"
|
||||
$0fn foo(name: i32) -> i32 {
|
||||
name + 1
|
||||
}$0
|
||||
|
||||
fn bar(name: i32) -> i32 {
|
||||
name + 2
|
||||
}
|
||||
"#####,
|
||||
r#####"
|
||||
mod modname {
|
||||
pub(crate) fn foo(name: i32) -> i32 {
|
||||
name + 1
|
||||
}
|
||||
}
|
||||
|
||||
fn bar(name: i32) -> i32 {
|
||||
name + 2
|
||||
}
|
||||
"#####,
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn doctest_extract_struct_from_enum_variant() {
|
||||
check_doc_test(
|
||||
|
|
|
@ -196,6 +196,12 @@ pub fn path_from_segments(
|
|||
format!("use {};", segments)
|
||||
})
|
||||
}
|
||||
|
||||
pub fn join_paths(paths: impl IntoIterator<Item = ast::Path>) -> ast::Path {
|
||||
let paths = paths.into_iter().map(|it| it.syntax().clone()).join("::");
|
||||
ast_from_text(&format!("use {};", paths))
|
||||
}
|
||||
|
||||
// FIXME: should not be pub
|
||||
pub fn path_from_text(text: &str) -> ast::Path {
|
||||
ast_from_text(&format!("fn main() {{ let test = {}; }}", text))
|
||||
|
|
Loading…
Reference in a new issue