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
//
// ```
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);
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);
},
)
}