@@ -852,27 +852,21 @@ pub fn exit_select_mode(cx: &mut Context) {
852 cx.doc().mode = Mode::Normal;
852 cx.doc().mode = Mode::Normal;
855−fn goto(cx: &mut Context, locations: Vec<lsp::Location>) {
855+fn goto(cx: &'static mut Context<'static>, locations: Vec<lsp::Location>) {
856 let doc = cx.doc();
856 let doc = cx.doc();
858 doc.mode = Mode::Normal;
858 doc.mode = Mode::Normal;
860 log::info!("{:?}", locations);
860 log::info!("{:?}", locations);
861− let filepath = doc.path().unwrap();
862− log::info!("{:?}", filepath);
864 match locations.as_slice() {
862 match locations.as_slice() {
865 [location] => {
863 [location] => {
866− if filepath.to_str().unwrap() == location.uri.path() {
864+ cx.editor
865+ .open(PathBuf::from(location.uri.path()), cx.executor);
867− let definition_pos = location.range.start;
867+ let definition_pos = location.range.start;
868− let new_pos = helix_lsp::util::lsp_pos_to_pos(doc.text().slice(..), definition_pos);
868+ let new_pos = helix_lsp::util::lsp_pos_to_pos(doc.text().slice(..), definition_pos);
869− doc.set_selection(Selection::point(new_pos));
869+ doc.set_selection(Selection::point(new_pos));
873− .open(PathBuf::from(location.uri.path()), cx.executor);
874− // TODO: go to position
877 [] => (), // maybe show user message that no definition was found?
871 [] => (), // maybe show user message that no definition was found?
878 _locations => {
872 _locations => {
@@ -884,14 +878,20 @@ fn goto(cx: &mut Context, locations: Vec<lsp::Location>) {
884 format!("{}:{}", file, line).into()
878 format!("{}:{}", file, line).into()
886 move |editor: &mut Editor, item| {
880 move |editor: &mut Editor, item| {
887− let doc = &mut editor.view_mut().doc;
881+ cx.editor.open(PathBuf::from(item.uri.path()), cx.executor);
883+ let definition_pos = item.range.start;
885+ helix_lsp::util::lsp_pos_to_pos(doc.text().slice(..), definition_pos);
886+ doc.set_selection(Selection::point(new_pos));
889+ cx.push_layer(Box::new(picker));
894−pub fn goto_definition(cx: &mut Context) {
894+pub fn goto_definition(cx: &'static mut Context<'static>) {
895 let doc = cx.doc();
895 let doc = cx.doc();
896 let language_server = match doc.language_server.as_ref() {
896 let language_server = match doc.language_server.as_ref() {
897 Some(language_server) => language_server,
897 Some(language_server) => language_server,
@@ -907,7 +907,7 @@ pub fn goto_definition(cx: &mut Context) {
907 goto(cx, res);
907 goto(cx, res);
910−pub fn goto_type_definition(cx: &mut Context) {
910+pub fn goto_type_definition(cx: &'static mut Context<'static>) {
911 let doc = cx.doc();
911 let doc = cx.doc();
912 let language_server = match doc.language_server.as_ref() {
912 let language_server = match doc.language_server.as_ref() {
913 Some(language_server) => language_server,
913 Some(language_server) => language_server,
@@ -923,7 +923,7 @@ pub fn goto_type_definition(cx: &mut Context) {
923 goto(cx, res);
923 goto(cx, res);
926−pub fn goto_implementation(cx: &mut Context) {
926+pub fn goto_implementation(cx: &'static mut Context<'static>) {
927 let doc = cx.doc();
927 let doc = cx.doc();
928 let language_server = match doc.language_server.as_ref() {
928 let language_server = match doc.language_server.as_ref() {
929 Some(language_server) => language_server,
929 Some(language_server) => language_server,
@@ -939,7 +939,7 @@ pub fn goto_implementation(cx: &mut Context) {
939 goto(cx, res);
939 goto(cx, res);
942−pub fn goto_reference(cx: &mut Context) {
942+pub fn goto_reference(cx: &'static mut Context<'static>) {
943 let doc = cx.doc();
943 let doc = cx.doc();
944 let language_server = match doc.language_server.as_ref() {
944 let language_server = match doc.language_server.as_ref() {
945 Some(language_server) => language_server,
945 Some(language_server) => language_server,