]> git.lizzy.rs Git - rust.git/blobdiff - crates/ide_assists/src/handlers/move_to_mod_rs.rs
Merge #11481
[rust.git] / crates / ide_assists / src / handlers / move_to_mod_rs.rs
index 9b060bb710f0538791f999ff5fca85be3d6629fc..887960881a2015ddeb734f383fa3fdfa2afa9704 100644 (file)
@@ -2,38 +2,12 @@
     assists::{AssistId, AssistKind},
     base_db::AnchoredPathBuf,
 };
-use syntax::{
-    ast::{self, Whitespace},
-    AstNode, AstToken, SourceFile, TextRange, TextSize,
-};
-
-use crate::assist_context::{AssistContext, Assists};
+use syntax::{ast, AstNode};
 
-/// Trim(remove leading and trailing whitespace) `initial_range` in `source_file`, return the trimmed range.
-fn trimmed_text_range(source_file: &SourceFile, initial_range: TextRange) -> TextRange {
-    let mut trimmed_range = initial_range;
-    while source_file
-        .syntax()
-        .token_at_offset(trimmed_range.start())
-        .find_map(Whitespace::cast)
-        .is_some()
-        && trimmed_range.start() < trimmed_range.end()
-    {
-        let start = trimmed_range.start() + TextSize::from(1);
-        trimmed_range = TextRange::new(start, trimmed_range.end());
-    }
-    while source_file
-        .syntax()
-        .token_at_offset(trimmed_range.end())
-        .find_map(Whitespace::cast)
-        .is_some()
-        && trimmed_range.start() < trimmed_range.end()
-    {
-        let end = trimmed_range.end() - TextSize::from(1);
-        trimmed_range = TextRange::new(trimmed_range.start(), end);
-    }
-    trimmed_range
-}
+use crate::{
+    assist_context::{AssistContext, Assists},
+    utils::trimmed_text_range,
+};
 
 // Assist: move_to_mod_rs
 //
@@ -51,9 +25,9 @@ fn trimmed_text_range(source_file: &SourceFile, initial_range: TextRange) -> Tex
 // ```
 pub(crate) fn move_to_mod_rs(acc: &mut Assists, ctx: &AssistContext) -> Option<()> {
     let source_file = ctx.find_node_at_offset::<ast::SourceFile>()?;
-    let module = ctx.sema.to_module_def(ctx.frange.file_id)?;
+    let module = ctx.sema.to_module_def(ctx.file_id())?;
     // Enable this assist if the user select all "meaningful" content in the source file
-    let trimmed_selected_range = trimmed_text_range(&source_file, ctx.frange.range);
+    let trimmed_selected_range = trimmed_text_range(&source_file, ctx.selection_trimmed());
     let trimmed_file_range = trimmed_text_range(&source_file, source_file.syntax().text_range());
     if module.is_mod_rs(ctx.db()) {
         cov_mark::hit!(already_mod_rs);
@@ -64,19 +38,16 @@ pub(crate) fn move_to_mod_rs(acc: &mut Assists, ctx: &AssistContext) -> Option<(
         return None;
     }
 
-    let target = TextRange::new(
-        source_file.syntax().text_range().start(),
-        source_file.syntax().text_range().end(),
-    );
+    let target = source_file.syntax().text_range();
     let module_name = module.name(ctx.db())?.to_string();
     let path = format!("./{}/mod.rs", module_name);
-    let dst = AnchoredPathBuf { anchor: ctx.frange.file_id, path };
+    let dst = AnchoredPathBuf { anchor: ctx.file_id(), path };
     acc.add(
         AssistId("move_to_mod_rs", AssistKind::Refactor),
-        format!("Turn {}.rs to {}/mod.rs", module_name, module_name),
+        format!("Convert {}.rs to {}/mod.rs", module_name, module_name),
         target,
         |builder| {
-            builder.move_file(ctx.frange.file_id, dst);
+            builder.move_file(ctx.file_id(), dst);
         },
     )
 }