Skip to content

Commit 5c170aa

Browse files
authored
Merge pull request rust-lang#19590 from roife/fix-issue-19540
feat: add `pub(crate) mod` option for unlinked files
2 parents 1b528e6 + 1411fbd commit 5c170aa

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
@@ -201,9 +201,11 @@ fn make_fixes(
201201

202202
let mod_decl = format!("mod {new_mod_name};");
203203
let pub_mod_decl = format!("pub mod {new_mod_name};");
204+
let pub_crate_mod_decl = format!("pub(crate) mod {new_mod_name};");
204205

205206
let mut mod_decl_builder = TextEdit::builder();
206207
let mut pub_mod_decl_builder = TextEdit::builder();
208+
let mut pub_crate_mod_decl_builder = TextEdit::builder();
207209

208210
let mut items = match &source {
209211
ModuleSource::SourceFile(it) => it.items(),
@@ -232,6 +234,7 @@ fn make_fixes(
232234
let indent = IndentLevel::from_node(last.syntax());
233235
mod_decl_builder.insert(offset, format!("\n{indent}{mod_decl}"));
234236
pub_mod_decl_builder.insert(offset, format!("\n{indent}{pub_mod_decl}"));
237+
pub_crate_mod_decl_builder.insert(offset, format!("\n{indent}{pub_crate_mod_decl}"));
235238
}
236239
None => {
237240
// Prepend before the first item in the file.
@@ -242,6 +245,8 @@ fn make_fixes(
242245
let indent = IndentLevel::from_node(first.syntax());
243246
mod_decl_builder.insert(offset, format!("{mod_decl}\n\n{indent}"));
244247
pub_mod_decl_builder.insert(offset, format!("{pub_mod_decl}\n\n{indent}"));
248+
pub_crate_mod_decl_builder
249+
.insert(offset, format!("{pub_crate_mod_decl}\n\n{indent}"));
245250
}
246251
None => {
247252
// No items in the file, so just append at the end.
@@ -259,6 +264,8 @@ fn make_fixes(
259264
};
260265
mod_decl_builder.insert(offset, format!("{indent}{mod_decl}\n"));
261266
pub_mod_decl_builder.insert(offset, format!("{indent}{pub_mod_decl}\n"));
267+
pub_crate_mod_decl_builder
268+
.insert(offset, format!("{indent}{pub_crate_mod_decl}\n"));
262269
}
263270
}
264271
}
@@ -277,6 +284,12 @@ fn make_fixes(
277284
SourceChange::from_text_edit(parent_file_id, pub_mod_decl_builder.finish()),
278285
trigger_range,
279286
),
287+
fix(
288+
"add_pub_crate_mod_declaration",
289+
&format!("Insert `{pub_crate_mod_decl}`"),
290+
SourceChange::from_text_edit(parent_file_id, pub_crate_mod_decl_builder.finish()),
291+
trigger_range,
292+
),
280293
])
281294
}
282295

@@ -304,6 +317,11 @@ fn f() {}
304317
r#"
305318
pub mod foo;
306319
320+
fn f() {}
321+
"#,
322+
r#"
323+
pub(crate) mod foo;
324+
307325
fn f() {}
308326
"#,
309327
],

0 commit comments

Comments
 (0)