Unnamed repository; edit this file 'description' to name the repository.
feat: Add `pub(crate) mod` option for unlinked files
roifewu 2025-04-15
parent c588273 · commit 7fde3fc
-rw-r--r--crates/ide-diagnostics/src/handlers/unlinked_file.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/crates/ide-diagnostics/src/handlers/unlinked_file.rs b/crates/ide-diagnostics/src/handlers/unlinked_file.rs
index 2602aa011f..6c0c26161e 100644
--- a/crates/ide-diagnostics/src/handlers/unlinked_file.rs
+++ b/crates/ide-diagnostics/src/handlers/unlinked_file.rs
@@ -203,9 +203,11 @@ fn make_fixes(
let mod_decl = format!("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 pub_mod_decl_builder = TextEdit::builder();
+ let mut pub_crate_mod_decl_builder = TextEdit::builder();
let mut items = match &source {
ModuleSource::SourceFile(it) => it.items(),
@@ -234,6 +236,7 @@ fn make_fixes(
let indent = IndentLevel::from_node(last.syntax());
mod_decl_builder.insert(offset, format!("\n{indent}{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 => {
// Prepend before the first item in the file.
@@ -244,6 +247,8 @@ fn make_fixes(
let indent = IndentLevel::from_node(first.syntax());
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_crate_mod_decl_builder
+ .insert(offset, format!("{pub_crate_mod_decl}\n\n{indent}"));
}
None => {
// No items in the file, so just append at the end.
@@ -261,6 +266,8 @@ fn make_fixes(
};
mod_decl_builder.insert(offset, format!("{indent}{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"));
}
}
}
@@ -279,6 +286,12 @@ fn make_fixes(
SourceChange::from_text_edit(parent_file_id, pub_mod_decl_builder.finish()),
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,
+ ),
])
}
@@ -308,6 +321,11 @@ pub mod foo;
fn f() {}
"#,
+ r#"
+pub(crate) mod foo;
+
+fn f() {}
+"#,
],
);
}