Skip to content

Commit 1411fbd

Browse files
committed
feat: Add pub(crate) mod option for unlinked files
1 parent 50f3e01 commit 1411fbd

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

src/tools/rust-analyzer/crates/ide-diagnostics/src/handlers/unlinked_file.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,9 +203,11 @@ fn make_fixes(
203203

204204
let mod_decl = format!("mod {new_mod_name};");
205205
let pub_mod_decl = format!("pub mod {new_mod_name};");
206+
let pub_crate_mod_decl = format!("pub(crate) mod {new_mod_name};");
206207

207208
let mut mod_decl_builder = TextEdit::builder();
208209
let mut pub_mod_decl_builder = TextEdit::builder();
210+
let mut pub_crate_mod_decl_builder = TextEdit::builder();
209211

210212
let mut items = match &source {
211213
ModuleSource::SourceFile(it) => it.items(),
@@ -234,6 +236,7 @@ fn make_fixes(
234236
let indent = IndentLevel::from_node(last.syntax());
235237
mod_decl_builder.insert(offset, format!("\n{indent}{mod_decl}"));
236238
pub_mod_decl_builder.insert(offset, format!("\n{indent}{pub_mod_decl}"));
239+
pub_crate_mod_decl_builder.insert(offset, format!("\n{indent}{pub_crate_mod_decl}"));
237240
}
238241
None => {
239242
// Prepend before the first item in the file.
@@ -244,6 +247,8 @@ fn make_fixes(
244247
let indent = IndentLevel::from_node(first.syntax());
245248
mod_decl_builder.insert(offset, format!("{mod_decl}\n\n{indent}"));
246249
pub_mod_decl_builder.insert(offset, format!("{pub_mod_decl}\n\n{indent}"));
250+
pub_crate_mod_decl_builder
251+
.insert(offset, format!("{pub_crate_mod_decl}\n\n{indent}"));
247252
}
248253
None => {
249254
// No items in the file, so just append at the end.
@@ -261,6 +266,8 @@ fn make_fixes(
261266
};
262267
mod_decl_builder.insert(offset, format!("{indent}{mod_decl}\n"));
263268
pub_mod_decl_builder.insert(offset, format!("{indent}{pub_mod_decl}\n"));
269+
pub_crate_mod_decl_builder
270+
.insert(offset, format!("{indent}{pub_crate_mod_decl}\n"));
264271
}
265272
}
266273
}
@@ -279,6 +286,12 @@ fn make_fixes(
279286
SourceChange::from_text_edit(parent_file_id, pub_mod_decl_builder.finish()),
280287
trigger_range,
281288
),
289+
fix(
290+
"add_pub_crate_mod_declaration",
291+
&format!("Insert `{pub_crate_mod_decl}`"),
292+
SourceChange::from_text_edit(parent_file_id, pub_crate_mod_decl_builder.finish()),
293+
trigger_range,
294+
),
282295
])
283296
}
284297

@@ -306,6 +319,11 @@ fn f() {}
306319
r#"
307320
pub mod foo;
308321
322+
fn f() {}
323+
"#,
324+
r#"
325+
pub(crate) mod foo;
326+
309327
fn f() {}
310328
"#,
311329
],

0 commit comments

Comments
 (0)