mirror of
				https://github.com/rust-lang/rust-analyzer.git
				synced 2025-10-30 11:37:31 +00:00 
			
		
		
		
	Merge pull request #19590 from roife/fix-issue-19540
feat: add `pub(crate) mod` option for unlinked files
This commit is contained in:
		
						commit
						4bef2bf192
					
				
					 1 changed files with 18 additions and 0 deletions
				
			
		|  | @ -201,9 +201,11 @@ fn make_fixes( | ||||||
| 
 | 
 | ||||||
|     let mod_decl = format!("mod {new_mod_name};"); |     let mod_decl = format!("mod {new_mod_name};"); | ||||||
|     let pub_mod_decl = format!("pub 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 mod_decl_builder = TextEdit::builder(); | ||||||
|     let mut pub_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 { |     let mut items = match &source { | ||||||
|         ModuleSource::SourceFile(it) => it.items(), |         ModuleSource::SourceFile(it) => it.items(), | ||||||
|  | @ -232,6 +234,7 @@ fn make_fixes( | ||||||
|             let indent = IndentLevel::from_node(last.syntax()); |             let indent = IndentLevel::from_node(last.syntax()); | ||||||
|             mod_decl_builder.insert(offset, format!("\n{indent}{mod_decl}")); |             mod_decl_builder.insert(offset, format!("\n{indent}{mod_decl}")); | ||||||
|             pub_mod_decl_builder.insert(offset, format!("\n{indent}{pub_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 => { |         None => { | ||||||
|             // Prepend before the first item in the file.
 |             // Prepend before the first item in the file.
 | ||||||
|  | @ -242,6 +245,8 @@ fn make_fixes( | ||||||
|                     let indent = IndentLevel::from_node(first.syntax()); |                     let indent = IndentLevel::from_node(first.syntax()); | ||||||
|                     mod_decl_builder.insert(offset, format!("{mod_decl}\n\n{indent}")); |                     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_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 => { |                 None => { | ||||||
|                     // No items in the file, so just append at the end.
 |                     // No items in the file, so just append at the end.
 | ||||||
|  | @ -259,6 +264,8 @@ fn make_fixes( | ||||||
|                     }; |                     }; | ||||||
|                     mod_decl_builder.insert(offset, format!("{indent}{mod_decl}\n")); |                     mod_decl_builder.insert(offset, format!("{indent}{mod_decl}\n")); | ||||||
|                     pub_mod_decl_builder.insert(offset, format!("{indent}{pub_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")); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  | @ -277,6 +284,12 @@ fn make_fixes( | ||||||
|             SourceChange::from_text_edit(parent_file_id, pub_mod_decl_builder.finish()), |             SourceChange::from_text_edit(parent_file_id, pub_mod_decl_builder.finish()), | ||||||
|             trigger_range, |             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, | ||||||
|  |         ), | ||||||
|     ]) |     ]) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -304,6 +317,11 @@ fn f() {} | ||||||
|                 r#" |                 r#" | ||||||
| pub mod foo; | pub mod foo; | ||||||
| 
 | 
 | ||||||
|  | fn f() {} | ||||||
|  | "#,
 | ||||||
|  |                 r#" | ||||||
|  | pub(crate) mod foo; | ||||||
|  | 
 | ||||||
| fn f() {} | fn f() {} | ||||||
| "#,
 | "#,
 | ||||||
|             ], |             ], | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Lukas Wirth
						Lukas Wirth