pub(crate) fn from_local_edit(file_id: FileId, label: &str, edit: LocalEdit) -> SourceChange {
let file_edit = SourceFileEdit {
file_id,
- edits: edit.edit.into_atoms(),
+ edit: edit.edit,
};
SourceChange {
label: label.to_string(),
use rustc_hash::FxHashMap;
use ra_syntax::{SourceFileNode, TextRange, TextUnit};
-use ra_text_edit::AtomTextEdit;
+use ra_text_edit::TextEdit;
use rayon::prelude::*;
use relative_path::RelativePathBuf;
#[derive(Debug)]
pub struct SourceFileEdit {
pub file_id: FileId,
- pub edits: Vec<AtomTextEdit>,
+ pub edit: TextEdit,
}
#[derive(Debug)]
type Output = Vec<languageserver_types::TextEdit>;
fn conv_with(self, line_index: &LineIndex) -> Vec<languageserver_types::TextEdit> {
- self.into_atoms()
+ self.as_atoms()
.into_iter()
.map_conv_with(line_index)
.collect()
}
}
-impl ConvWith for AtomTextEdit {
+impl<'a> ConvWith for &'a AtomTextEdit {
type Ctx = LineIndex;
type Output = languageserver_types::TextEdit;
fn conv_with(self, line_index: &LineIndex) -> languageserver_types::TextEdit {
languageserver_types::TextEdit {
range: self.delete.conv_with(line_index),
- new_text: self.insert,
+ new_text: self.insert.clone(),
}
}
}
.source_file_edits
.iter()
.find(|it| it.file_id == pos.file_id)
- .map(|it| it.edits.as_slice())
+ .map(|it| it.edit.as_atoms())
.unwrap_or(&[]);
let line_col = translate_offset_with_edit(&*line_index, pos.offset, edits);
let position =
version: None,
};
let line_index = world.analysis().file_line_index(self.file_id);
- let edits = self.edits.into_iter().map_conv_with(&line_index).collect();
+ let edits = self
+ .edit
+ .as_atoms()
+ .iter()
+ .map_conv_with(&line_index)
+ .collect();
Ok(TextDocumentEdit {
text_document,
edits,
};
let edits = match world.analysis().on_eq_typed(position) {
None => return Ok(None),
- Some(mut action) => action.source_file_edits.pop().unwrap().edits,
+ Some(mut action) => action
+ .source_file_edits
+ .pop()
+ .unwrap()
+ .edit
+ .as_atoms()
+ .iter()
+ .map_conv_with(&line_index)
+ .collect(),
};
- let edits = edits.into_iter().map_conv_with(&line_index).collect();
Ok(Some(edits))
}