Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'src/text.rs')
-rw-r--r--src/text.rs33
1 files changed, 20 insertions, 13 deletions
diff --git a/src/text.rs b/src/text.rs
index f3677b0..59dd5ae 100644
--- a/src/text.rs
+++ b/src/text.rs
@@ -16,14 +16,14 @@ use helix_core::syntax::{HighlightEvent, Loader};
use implicit_fn::implicit_fn;
use itertools::Itertools;
use lsp_types::{
- DocumentSymbol, Location, SemanticTokensLegend, SnippetTextEdit,
- TextEdit,
+ DocumentSymbol, Edit, Location, SemanticTokensLegend, TextEdit,
};
pub use manipulations::Manip;
use rootcause::option_ext::OptionExt;
use rootcause::prelude::{IteratorExt, ResultExt};
use rootcause::report;
use ropey::{Rope, RopeSlice};
+use rust_analyzer::lsp::ext::SnippetTextEdit;
use serde::{Deserialize, Serialize};
use tree_house::Language;
pub mod cursor;
@@ -358,7 +358,7 @@ impl TextArea {
text: &'b mut Rope,
) -> rootcause::Result<()> {
match insert_text_format {
- Some(lsp_types::InsertTextFormat::SNIPPET) => {
+ Some(lsp_types::InsertTextFormat::Snippet) => {
let begin = text.l_position(range.start).ok_or_report()?;
let end = text.l_position(range.end).ok_or_report()?;
text.try_remove(begin..end)?;
@@ -380,7 +380,7 @@ impl TextArea {
SnippetTextEdit { range,new_text, insert_text_format, .. }: &'b SnippetTextEdit,
) -> rootcause::Result<()> {
match insert_text_format {
- Some(lsp_types::InsertTextFormat::SNIPPET) => self
+ Some(lsp_types::InsertTextFormat::Snippet) => self
.apply_snippet(&TextEdit {
range: range.clone(),
new_text: new_text.clone(),
@@ -523,13 +523,11 @@ impl TextArea {
Some(x) => {
self.cursor.one(Cursor::new(x.r().end, &self.rope));
}
- None => {
- self.cursor.one(Cursor::new(
- x.last.clone().unwrap().r().end,
- &self.rope,
- ));
+ None if let Some(x) = &x.last => {
+ self.cursor.one(Cursor::new(x.r().end, &self.rope));
self.tabstops = None;
}
+ None => self.tabstops = None,
},
}
}
@@ -1449,12 +1447,21 @@ fn apply2() {
pub trait SortTedits {
fn sort_tedits(&mut self);
}
+impl SortTedits for [Edit] {
+ fn sort_tedits(&mut self) {
+ self.as_mut().sort_by_key(|t| match t {
+ Edit::TextEdit(t) => Reverse(t.range.start),
+ Edit::AnnotatedTextEdit(t) => Reverse(t.text_edit.range.start),
+ Edit::SnippetTextEdit(t) => Reverse(t.range.start),
+ });
+ }
+}
impl SortTedits for [TextEdit] {
fn sort_tedits(&mut self) {
self.as_mut().sort_by_key(|t| Reverse(t.range.start));
}
}
-impl SortTedits for [SnippetTextEdit] {
+impl SortTedits for [rust_analyzer::lsp::ext::SnippetTextEdit] {
fn sort_tedits(&mut self) {
self.as_mut().sort_by_key(|t| Reverse(t.range.start));
}
@@ -1462,13 +1469,13 @@ impl SortTedits for [SnippetTextEdit] {
#[test]
fn inlays() {
- use lsp_types::{InlayHint, InlayHintLabel};
+ use lsp_types::InlayHint;
let mut t = TextArea::default();
_ = t.insert("let x = 4;");
t.set_inlay(&[InlayHint {
position: lsp_types::Position { line: 0, character: 4 },
- label: InlayHintLabel::String("u".into()),
- kind: Some(lsp_types::InlayHintKind::TYPE),
+ label: lsp_types::Label::String("u".into()),
+ kind: Some(lsp_types::InlayHintKind::Type),
text_edits: None,
tooltip: None,
padding_left: None,