Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'src/text.rs')
| -rw-r--r-- | src/text.rs | 33 |
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, |