mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-12 21:28:51 +00:00
hide atom edits a bit
This commit is contained in:
parent
164d53b22f
commit
0063f03e86
5 changed files with 24 additions and 12 deletions
|
@ -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(),
|
||||||
|
|
|
@ -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)]
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in a new issue