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:
bors[bot] 2021-10-22 09:29:16 +00:00 committed by GitHub
commit a75353e8ac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 1446 additions and 1 deletions

File diff suppressed because it is too large Load Diff

View File

@ -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())

View File

@ -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 @@ pub(crate) fn all() -> &'static [Handler] {
//
extract_variable::extract_variable,
extract_function::extract_function,
extract_module::extract_module,
//
generate_getter::generate_getter,
generate_getter::generate_getter_mut,

View File

@ -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(

View File

@ -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))