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.rs104
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;