hide atom edits a bit

This commit is contained in:
Aleksey Kladov 2018-12-21 11:24:16 +03:00
parent 164d53b22f
commit 0063f03e86
5 changed files with 24 additions and 12 deletions

View file

@ -520,7 +520,7 @@ impl SourceChange {
pub(crate) fn from_local_edit(file_id: FileId, label: &str, edit: LocalEdit) -> SourceChange { pub(crate) fn from_local_edit(file_id: FileId, label: &str, edit: LocalEdit) -> SourceChange {
let file_edit = SourceFileEdit { let file_edit = SourceFileEdit {
file_id, file_id,
edits: edit.edit.into_atoms(), edit: edit.edit,
}; };
SourceChange { SourceChange {
label: label.to_string(), label: label.to_string(),

View file

@ -20,7 +20,7 @@ use std::{fmt, sync::Arc};
use rustc_hash::FxHashMap; use rustc_hash::FxHashMap;
use ra_syntax::{SourceFileNode, TextRange, TextUnit}; use ra_syntax::{SourceFileNode, TextRange, TextUnit};
use ra_text_edit::AtomTextEdit; use ra_text_edit::TextEdit;
use rayon::prelude::*; use rayon::prelude::*;
use relative_path::RelativePathBuf; use relative_path::RelativePathBuf;
@ -167,7 +167,7 @@ pub struct SourceChange {
#[derive(Debug)] #[derive(Debug)]
pub struct SourceFileEdit { pub struct SourceFileEdit {
pub file_id: FileId, pub file_id: FileId,
pub edits: Vec<AtomTextEdit>, pub edit: TextEdit,
} }
#[derive(Debug)] #[derive(Debug)]

View file

@ -97,21 +97,21 @@ impl ConvWith for TextEdit {
type Output = Vec<languageserver_types::TextEdit>; type Output = Vec<languageserver_types::TextEdit>;
fn conv_with(self, line_index: &LineIndex) -> Vec<languageserver_types::TextEdit> { fn conv_with(self, line_index: &LineIndex) -> Vec<languageserver_types::TextEdit> {
self.into_atoms() self.as_atoms()
.into_iter() .into_iter()
.map_conv_with(line_index) .map_conv_with(line_index)
.collect() .collect()
} }
} }
impl ConvWith for AtomTextEdit { impl<'a> ConvWith for &'a AtomTextEdit {
type Ctx = LineIndex; type Ctx = LineIndex;
type Output = languageserver_types::TextEdit; type Output = languageserver_types::TextEdit;
fn conv_with(self, line_index: &LineIndex) -> languageserver_types::TextEdit { fn conv_with(self, line_index: &LineIndex) -> languageserver_types::TextEdit {
languageserver_types::TextEdit { languageserver_types::TextEdit {
range: self.delete.conv_with(line_index), range: self.delete.conv_with(line_index),
new_text: self.insert, new_text: self.insert.clone(),
} }
} }
} }
@ -199,7 +199,7 @@ impl TryConvWith for SourceChange {
.source_file_edits .source_file_edits
.iter() .iter()
.find(|it| it.file_id == pos.file_id) .find(|it| it.file_id == pos.file_id)
.map(|it| it.edits.as_slice()) .map(|it| it.edit.as_atoms())
.unwrap_or(&[]); .unwrap_or(&[]);
let line_col = translate_offset_with_edit(&*line_index, pos.offset, edits); let line_col = translate_offset_with_edit(&*line_index, pos.offset, edits);
let position = let position =
@ -265,7 +265,12 @@ impl TryConvWith for SourceFileEdit {
version: None, version: None,
}; };
let line_index = world.analysis().file_line_index(self.file_id); 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 { Ok(TextDocumentEdit {
text_document, text_document,
edits, edits,

View file

@ -107,9 +107,16 @@ pub fn handle_on_type_formatting(
}; };
let edits = match world.analysis().on_eq_typed(position) { let edits = match world.analysis().on_eq_typed(position) {
None => return Ok(None), 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)) Ok(Some(edits))
} }

View file

@ -41,8 +41,8 @@ impl TextEditBuilder {
} }
impl TextEdit { impl TextEdit {
pub fn into_atoms(self) -> Vec<AtomTextEdit> { pub fn as_atoms(&self) -> &[AtomTextEdit] {
self.atoms &self.atoms
} }
pub fn apply(&self, text: &str) -> String { pub fn apply(&self, text: &str) -> String {