Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'src/edi/input_handlers/cursor.rs')
| -rw-r--r-- | src/edi/input_handlers/cursor.rs | 104 |
1 files changed, 52 insertions, 52 deletions
diff --git a/src/edi/input_handlers/cursor.rs b/src/edi/input_handlers/cursor.rs index 092bc5d..8887045 100644 --- a/src/edi/input_handlers/cursor.rs +++ b/src/edi/input_handlers/cursor.rs @@ -3,11 +3,11 @@ use std::sync::Arc; use Default::default; use implicit_fn::implicit_fn; -use lsp_types::request::*; use lsp_types::*; use rust_fsm::StateMachine; use tokio::task::spawn_blocking; use tokio_util::task::AbortOnDropHandle as DropH; +use url::Url; use winit::window::Window; enum Set<T> { To(T), @@ -17,6 +17,7 @@ enum Set<T> { use crate::edi::*; use crate::hov::{DiagnosticHovr, Hoverable, Hovring}; use crate::lsp::BehaviourAfter; +use crate::lsp::communication::send; use crate::rnd::CellBuffer; impl Editor { #[implicit_fn] @@ -26,7 +27,7 @@ impl Editor { w: Arc<dyn Window>, c: usize, ) { - match self.state.consume(Action::C(cursor_position)).unwrap() { + match self.transition(Action::C(cursor_position)) { Some(Do::ExtendSelectionToMouse) => { let p = self.text.mapped_index_at(cursor_position); self.text @@ -53,9 +54,7 @@ impl Editor { && !e.is_whitespace() => 'out: { match self - .state - .consume(Action::HOnSomething(cursor_position)) - .unwrap() + .transition(Action::HOnSomething(cursor_position)) { Some(Do::SetHovering) => { let State::Hovering(l) = &mut self.state else { @@ -109,8 +108,10 @@ impl Editor { // let l = &mut self.requests.hovering.result; } Some(Do::Hover) => { - self.state.consume(Action::HOnNothing).unwrap(); - w.request_redraw(); + match self.state.consume(Action::HOnNothing).unwrap() { + Some(st::Do::R(false)) => {} + _ => w.request_redraw(), + } } None => {} x => unreachable!("{x:?}"), @@ -221,12 +222,15 @@ impl Editor { .is_none_or(|&(_, x)| x != cursor_position) { let handle = lsp.runtime.spawn( - lsp.request::<lsp_request!("textDocument/definition")>( - &GotoDefinitionParams { - text_document_position_params: tdpp.clone(), - work_done_progress_params: default(), - partial_result_params: default(), - }, + send!( + lsp.request, + "textDocument/definition", + _ { + text_document_position_params: tdpp + .clone(), + work_done_progress_params: default(), + partial_result_params: default(), + }, ) .unwrap() .0, @@ -267,44 +271,42 @@ impl Editor { let tdp = tdpp.clone(); let l = self.language; let window = w.clone(); + let x = lsp.request_::<HoverRequest, { BehaviourAfter::Nil }>( + &HoverParams { + text_document_position_params: tdp.clone(), + work_done_progress_params: default(), + }, + ); let handle: tokio::task::JoinHandle<Result<Option<Hovr>, _>> = lsp.runtime.spawn(async move { - let Some(x) = lsp - .request_::<HoverRequest, { BehaviourAfter::Nil }>( - &HoverParams { - text_document_position_params: tdp.clone(), - work_done_progress_params: default(), - }, - )? - .0 - .await? - else { + let Some(x) = x?.0.await? else { return Ok(None::<Hovr>); }; let (width, cells) = spawn_blocking(move || { + #[allow(deprecated)] let mut x = match &x.contents { - lsp_types::HoverContents::Scalar( - marked_string, - ) => match marked_string { - MarkedString::LanguageString(x) => - Cow::Borrowed(&*x.value), - MarkedString::String(x) => Cow::Borrowed(&**x), - }, - lsp_types::HoverContents::Array( - marked_strings, - ) => Cow::Owned( - marked_strings - .iter() - .map(|x| match x { - MarkedString::LanguageString(x) => - &*x.value, - MarkedString::String(x) => &*x, - }) - .collect::<String>(), - ), - lsp_types::HoverContents::Markup( - markup_content, - ) => Cow::Borrowed(&*markup_content.value), + Contents::MarkedString(marked_string) => + match marked_string { + MarkedString::MarkedStringWithLanguage( + x, + ) => Cow::Borrowed(&*x.value), + MarkedString::String(x) => + Cow::Borrowed(&**x), + }, + Contents::MarkedStringList(marked_strings) => + Cow::Owned( + marked_strings + .iter() + .map(|x| match x { + MarkedString::MarkedStringWithLanguage( + x, + ) => &*x.value, + MarkedString::String(x) => &*x, + }) + .collect::<String>(), + ), + Contents::MarkupContent(markup_content) => + Cow::Borrowed(&*markup_content.value), }; if l.is_some_and(|l| { matches!( @@ -358,13 +360,11 @@ impl Editor { }); let diags = self.find_diags(cursor_position, &w); println!("requesting hover"); - self.state - .consume(Action::SetHovering( - diags.map(|of| Hovring { of, ..default() }), - handle, - (cursor_position, tdpp), - )) - .unwrap(); + self.transition(Action::SetHovering( + diags.map(|of| Hovring { of, ..default() }), + handle, + (cursor_position, tdpp), + )); // self.requests.hovering.request = // (DropH::new(handle), cursor_position).into(); // requests.hovering.result = None; |