@@ -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#"
305318pub mod foo;
306319
320+ fn f() {}
321+ "# ,
322+ r#"
323+ pub(crate) mod foo;
324+
307325fn f() {}
308326"# ,
309327 ] ,
0 commit comments