A simple CPU rendered GUI IDE experience.
Diffstat (limited to 'src/edi/input_handlers/click.rs')
| -rw-r--r-- | src/edi/input_handlers/click.rs | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/edi/input_handlers/click.rs b/src/edi/input_handlers/click.rs index 2357376..93245c6 100644 --- a/src/edi/input_handlers/click.rs +++ b/src/edi/input_handlers/click.rs @@ -53,8 +53,23 @@ impl Editor { text.cursor.first_mut().extend_selection_to(p, &text.rope); self.hist.lc = text.cursor.clone(); } - Some(Do::GoToDefinition) => { - if let Some(x) = self.requests.def.result.clone() + Some(Do::GoToDefinition(tdpp)) => { + dbg!(&tdpp); + if let Some(x) = self.requests.def.result.clone().or_else(|| { + tdpp.zip(lsp!(self)).and_then(|(tdpp, lsp)| { + lsp.request_immediate::<lsp_request!("textDocument/definition")>( + &GotoDefinitionParams { + text_document_position_params: tdpp, + work_done_progress_params: default(), + partial_result_params: default(), + }, + ).ok() + }).flatten().and_then(|x| match &x { + GotoDefinitionResponse::Link([x, ..]) => Some(x.clone()), + _ => None, + }) + + }) && let Err(e) = self.go(&x, w.clone()) { log::error!("gtd: {e}"); |