Unnamed repository; edit this file 'description' to name the repository.
added picker for gd, but yet to test it. also need to load appropriate file when definition isnt in same file
Jan Hrastnik 2021-03-16
parent 0322c28 · commit 294791d
-rw-r--r--helix-term/src/commands.rs29
1 files changed, 28 insertions, 1 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index b2809f96..f07a3933 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -861,15 +861,42 @@ pub fn goto_definition(cx: &mut Context) {
let res =
smol::block_on(language_server.goto_definition(doc.identifier(), pos)).unwrap_or_default();
+ /*
if res.len() == 1 {
let definition_pos = res.get(0).unwrap().range.start;
let new_pos = helix_lsp::util::lsp_pos_to_pos(doc.text().slice(..), definition_pos);
doc.set_selection(Selection::point(new_pos));
} else {
// show menu picker i guess
- }
+ }*/
doc.mode = Mode::Normal;
+
+ match &res.as_slice() {
+ [location] => {
+ let definition_pos = location.range.start;
+ let new_pos = helix_lsp::util::lsp_pos_to_pos(doc.text().slice(..), definition_pos);
+ doc.set_selection(Selection::point(new_pos));
+ }
+ [] => (), // maybe show user message that no definition was found?
+ _ => {
+ let snapshot = doc.state.clone();
+ let mut picker = ui::Picker::new(
+ res,
+ |item| {
+ let file = item.uri.as_str();
+ let line = item.range.start.line.to_string();
+ format!("{}:{}", file, line).into()
+ },
+ move |editor: &mut Editor, item| {
+ let doc = &mut editor.view_mut().doc;
+
+ // revert state to what it was before the last update
+ doc.state = snapshot.clone();
+ },
+ );
+ }
+ }
}
// NOTE: Transactions in this module get appended to history when we switch back to normal mode.