feat: Add `pub(crate) mod` option for unlinked files
diff --git a/crates/ide-diagnostics/src/handlers/unlinked_file.rs b/crates/ide-diagnostics/src/handlers/unlinked_file.rs
index 2602aa0..6c0c261 100644
--- a/crates/ide-diagnostics/src/handlers/unlinked_file.rs
+++ b/crates/ide-diagnostics/src/handlers/unlinked_file.rs
@@ -203,9 +203,11 @@
 
     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 @@
             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 @@
                     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 @@
                     };
                     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 @@
             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 @@
 
 fn f() {}
 "#,
+                r#"
+pub(crate) mod foo;
+
+fn f() {}
+"#,
             ],
         );
     }