mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-30 19:49:36 +00:00
Merge pull request #19590 from roife/fix-issue-19540
feat: add `pub(crate) mod` option for unlinked files
This commit is contained in:
commit
4bef2bf192
1 changed files with 18 additions and 0 deletions
|
|
@ -201,9 +201,11 @@ fn make_fixes(
|
||||||
|
|
||||||
let mod_decl = format!("mod {new_mod_name};");
|
let mod_decl = format!("mod {new_mod_name};");
|
||||||
let pub_mod_decl = format!("pub mod {new_mod_name};");
|
let pub_mod_decl = format!("pub mod {new_mod_name};");
|
||||||
|
let pub_crate_mod_decl = format!("pub(crate) mod {new_mod_name};");
|
||||||
|
|
||||||
let mut mod_decl_builder = TextEdit::builder();
|
let mut mod_decl_builder = TextEdit::builder();
|
||||||
let mut pub_mod_decl_builder = TextEdit::builder();
|
let mut pub_mod_decl_builder = TextEdit::builder();
|
||||||
|
let mut pub_crate_mod_decl_builder = TextEdit::builder();
|
||||||
|
|
||||||
let mut items = match &source {
|
let mut items = match &source {
|
||||||
ModuleSource::SourceFile(it) => it.items(),
|
ModuleSource::SourceFile(it) => it.items(),
|
||||||
|
|
@ -232,6 +234,7 @@ fn make_fixes(
|
||||||
let indent = IndentLevel::from_node(last.syntax());
|
let indent = IndentLevel::from_node(last.syntax());
|
||||||
mod_decl_builder.insert(offset, format!("\n{indent}{mod_decl}"));
|
mod_decl_builder.insert(offset, format!("\n{indent}{mod_decl}"));
|
||||||
pub_mod_decl_builder.insert(offset, format!("\n{indent}{pub_mod_decl}"));
|
pub_mod_decl_builder.insert(offset, format!("\n{indent}{pub_mod_decl}"));
|
||||||
|
pub_crate_mod_decl_builder.insert(offset, format!("\n{indent}{pub_crate_mod_decl}"));
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
// Prepend before the first item in the file.
|
// Prepend before the first item in the file.
|
||||||
|
|
@ -242,6 +245,8 @@ fn make_fixes(
|
||||||
let indent = IndentLevel::from_node(first.syntax());
|
let indent = IndentLevel::from_node(first.syntax());
|
||||||
mod_decl_builder.insert(offset, format!("{mod_decl}\n\n{indent}"));
|
mod_decl_builder.insert(offset, format!("{mod_decl}\n\n{indent}"));
|
||||||
pub_mod_decl_builder.insert(offset, format!("{pub_mod_decl}\n\n{indent}"));
|
pub_mod_decl_builder.insert(offset, format!("{pub_mod_decl}\n\n{indent}"));
|
||||||
|
pub_crate_mod_decl_builder
|
||||||
|
.insert(offset, format!("{pub_crate_mod_decl}\n\n{indent}"));
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
// No items in the file, so just append at the end.
|
// No items in the file, so just append at the end.
|
||||||
|
|
@ -259,6 +264,8 @@ fn make_fixes(
|
||||||
};
|
};
|
||||||
mod_decl_builder.insert(offset, format!("{indent}{mod_decl}\n"));
|
mod_decl_builder.insert(offset, format!("{indent}{mod_decl}\n"));
|
||||||
pub_mod_decl_builder.insert(offset, format!("{indent}{pub_mod_decl}\n"));
|
pub_mod_decl_builder.insert(offset, format!("{indent}{pub_mod_decl}\n"));
|
||||||
|
pub_crate_mod_decl_builder
|
||||||
|
.insert(offset, format!("{indent}{pub_crate_mod_decl}\n"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -277,6 +284,12 @@ fn make_fixes(
|
||||||
SourceChange::from_text_edit(parent_file_id, pub_mod_decl_builder.finish()),
|
SourceChange::from_text_edit(parent_file_id, pub_mod_decl_builder.finish()),
|
||||||
trigger_range,
|
trigger_range,
|
||||||
),
|
),
|
||||||
|
fix(
|
||||||
|
"add_pub_crate_mod_declaration",
|
||||||
|
&format!("Insert `{pub_crate_mod_decl}`"),
|
||||||
|
SourceChange::from_text_edit(parent_file_id, pub_crate_mod_decl_builder.finish()),
|
||||||
|
trigger_range,
|
||||||
|
),
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -304,6 +317,11 @@ fn f() {}
|
||||||
r#"
|
r#"
|
||||||
pub mod foo;
|
pub mod foo;
|
||||||
|
|
||||||
|
fn f() {}
|
||||||
|
"#,
|
||||||
|
r#"
|
||||||
|
pub(crate) mod foo;
|
||||||
|
|
||||||
fn f() {}
|
fn f() {}
|
||||||
"#,
|
"#,
|
||||||
],
|
],
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue