on master help sign in
picker wip
0828d1fJan Hrastnik
helix-term/src/commands.rs+18−18
@@ -852,27 +852,21 @@ pub fn exit_select_mode(cx: &mut Context) {
852 cx.doc().mode = Mode::Normal;
852 cx.doc().mode = Mode::Normal;
853}
853}
854
854
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();
857
857
858 doc.mode = Mode::Normal;
858 doc.mode = Mode::Normal;
859
859
860 log::info!("{:?}", locations);
860 log::info!("{:?}", locations);
861− let filepath = doc.path().unwrap();
862− log::info!("{:?}", filepath);
863
861
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);
866+ let doc = cx.doc();
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));
870− } else {
871− // open new file
872− cx.editor
873− .open(PathBuf::from(location.uri.path()), cx.executor);
874− // TODO: go to position
875− }
876 }
870 }
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()
885 },
879 },
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);
882+ let doc = cx.doc();
883+ let definition_pos = item.range.start;
884+ let new_pos =
885+ helix_lsp::util::lsp_pos_to_pos(doc.text().slice(..), definition_pos);
886+ doc.set_selection(Selection::point(new_pos));
888 },
887 },
889 );
888 );
889+ cx.push_layer(Box::new(picker));
890 }
890 }
891 }
891 }
892}
892}
893
893
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);
908}
908}
909
909
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);
924}
924}
925
925
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);
940}
940}
941
941
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,