diff --git a/crates/ide-diagnostics/src/handlers/unlinked_file.rs b/crates/ide-diagnostics/src/handlers/unlinked_file.rs index 2602aa011f0a..6c0c26161ede 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, + ), ]) } @@ -306,6 +319,11 @@ fn f() {} r#" pub mod foo; +fn f() {} +"#, + r#" +pub(crate) mod foo; + fn f() {} "#, ],