Auto merge of #17216 - Young-Flash:mod_with_path, r=Veykril
fix: extract mod to file should respect path attribute close https://github.com/rust-lang/rust-analyzer/issues/17181
This commit is contained in:
commit
652426ce65
@ -1,6 +1,7 @@
|
|||||||
use std::iter;
|
use std::iter;
|
||||||
|
|
||||||
use ast::edit::IndentLevel;
|
use ast::edit::IndentLevel;
|
||||||
|
use hir::HasAttrs;
|
||||||
use ide_db::base_db::AnchoredPathBuf;
|
use ide_db::base_db::AnchoredPathBuf;
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
use stdx::format_to;
|
use stdx::format_to;
|
||||||
@ -50,9 +51,17 @@ pub(crate) fn move_module_to_file(acc: &mut Assists, ctx: &AssistContext<'_>) ->
|
|||||||
|builder| {
|
|builder| {
|
||||||
let path = {
|
let path = {
|
||||||
let mut buf = String::from("./");
|
let mut buf = String::from("./");
|
||||||
match parent_module.name(ctx.db()) {
|
let db = ctx.db();
|
||||||
Some(name) if !parent_module.is_mod_rs(ctx.db()) => {
|
match parent_module.name(db) {
|
||||||
format_to!(buf, "{}/", name.display(ctx.db()))
|
Some(name)
|
||||||
|
if !parent_module.is_mod_rs(db)
|
||||||
|
&& parent_module
|
||||||
|
.attrs(db)
|
||||||
|
.by_key("path")
|
||||||
|
.string_value_unescape()
|
||||||
|
.is_none() =>
|
||||||
|
{
|
||||||
|
format_to!(buf, "{}/", name.display(db))
|
||||||
}
|
}
|
||||||
_ => (),
|
_ => (),
|
||||||
}
|
}
|
||||||
@ -107,6 +116,72 @@ mod tests {
|
|||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn extract_with_specified_path_attr() {
|
||||||
|
check_assist(
|
||||||
|
move_module_to_file,
|
||||||
|
r#"
|
||||||
|
//- /main.rs
|
||||||
|
#[path="parser/__mod.rs"]
|
||||||
|
mod parser;
|
||||||
|
//- /parser/__mod.rs
|
||||||
|
fn test() {}
|
||||||
|
mod $0expr {
|
||||||
|
struct A {}
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
r#"
|
||||||
|
//- /parser/__mod.rs
|
||||||
|
fn test() {}
|
||||||
|
mod expr;
|
||||||
|
//- /parser/expr.rs
|
||||||
|
struct A {}
|
||||||
|
"#,
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist(
|
||||||
|
move_module_to_file,
|
||||||
|
r#"
|
||||||
|
//- /main.rs
|
||||||
|
#[path="parser/a/__mod.rs"]
|
||||||
|
mod parser;
|
||||||
|
//- /parser/a/__mod.rs
|
||||||
|
fn test() {}
|
||||||
|
mod $0expr {
|
||||||
|
struct A {}
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
r#"
|
||||||
|
//- /parser/a/__mod.rs
|
||||||
|
fn test() {}
|
||||||
|
mod expr;
|
||||||
|
//- /parser/a/expr.rs
|
||||||
|
struct A {}
|
||||||
|
"#,
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist(
|
||||||
|
move_module_to_file,
|
||||||
|
r#"
|
||||||
|
//- /main.rs
|
||||||
|
#[path="a.rs"]
|
||||||
|
mod parser;
|
||||||
|
//- /a.rs
|
||||||
|
fn test() {}
|
||||||
|
mod $0expr {
|
||||||
|
struct A {}
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
r#"
|
||||||
|
//- /a.rs
|
||||||
|
fn test() {}
|
||||||
|
mod expr;
|
||||||
|
//- /expr.rs
|
||||||
|
struct A {}
|
||||||
|
"#,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn extract_from_root() {
|
fn extract_from_root() {
|
||||||
check_assist(
|
check_assist(
|
||||||
|
Loading…
Reference in New Issue
Block a user