aboutsummaryrefslogtreecommitdiff
path: root/helix-term
diff options
context:
space:
mode:
Diffstat (limited to 'helix-term')
-rw-r--r--helix-term/src/commands.rs1
-rw-r--r--helix-term/src/commands/lsp.rs25
-rw-r--r--helix-term/src/keymap/default.rs1
3 files changed, 27 insertions, 0 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 365d5b65..47ef1ff1 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -285,6 +285,7 @@ impl MappableCommand {
select_mode, "Enter selection extend mode",
exit_select_mode, "Exit selection mode",
goto_definition, "Goto definition",
+ goto_declaration, "Goto declaration",
add_newline_above, "Add newline above",
add_newline_below, "Add newline below",
goto_type_definition, "Goto type definition",
diff --git a/helix-term/src/commands/lsp.rs b/helix-term/src/commands/lsp.rs
index 578eb608..d12aa436 100644
--- a/helix-term/src/commands/lsp.rs
+++ b/helix-term/src/commands/lsp.rs
@@ -914,6 +914,31 @@ fn to_locations(definitions: Option<lsp::GotoDefinitionResponse>) -> Vec<lsp::Lo
}
}
+pub fn goto_declaration(cx: &mut Context) {
+ let (view, doc) = current!(cx.editor);
+ let language_server = language_server!(cx.editor, doc);
+ let offset_encoding = language_server.offset_encoding();
+
+ let pos = doc.position(view.id, offset_encoding);
+
+ let future = match language_server.goto_declaration(doc.identifier(), pos, None) {
+ Some(future) => future,
+ None => {
+ cx.editor
+ .set_error("Language server does not support goto-declaration");
+ return;
+ }
+ };
+
+ cx.callback(
+ future,
+ move |editor, compositor, response: Option<lsp::GotoDefinitionResponse>| {
+ let items = to_locations(response);
+ goto_impl(editor, compositor, items, offset_encoding);
+ },
+ );
+}
+
pub fn goto_definition(cx: &mut Context) {
let (view, doc) = current!(cx.editor);
let language_server = language_server!(cx.editor, doc);
diff --git a/helix-term/src/keymap/default.rs b/helix-term/src/keymap/default.rs
index ef93dee0..d48e6935 100644
--- a/helix-term/src/keymap/default.rs
+++ b/helix-term/src/keymap/default.rs
@@ -44,6 +44,7 @@ pub fn default() -> HashMap<Mode, Keymap> {
"l" => goto_line_end,
"s" => goto_first_nonwhitespace,
"d" => goto_definition,
+ "D" => goto_declaration,
"y" => goto_type_definition,
"r" => goto_reference,
"i" => goto_implementation,