Extract a helper function for lsp::Location

This commit is contained in:
Blaž Hrastnik 2022-02-18 14:01:50 +09:00
parent 504d5ce8bd
commit c06155ace4
3 changed files with 14 additions and 20 deletions

View file

@ -11,11 +11,20 @@ use helix_view::editor::Action;
use crate::{ use crate::{
compositor::{self, Compositor}, compositor::{self, Compositor},
ui::{self, overlay::overlayed, FilePicker, Popup, Prompt, PromptEvent}, ui::{self, overlay::overlayed, FileLocation, FilePicker, Popup, Prompt, PromptEvent},
}; };
use std::borrow::Cow; use std::borrow::Cow;
fn location_to_file_location(location: &lsp::Location) -> FileLocation {
let path = location.uri.to_file_path().unwrap();
let line = Some((
location.range.start.line as usize,
location.range.end.line as usize,
));
(path, line)
}
fn sym_picker( fn sym_picker(
symbols: Vec<lsp::SymbolInformation>, symbols: Vec<lsp::SymbolInformation>,
current_path: Option<lsp::Url>, current_path: Option<lsp::Url>,
@ -55,14 +64,7 @@ fn sym_picker(
align_view(doc, view, Align::Center); align_view(doc, view, Align::Center);
} }
}, },
move |_editor, symbol| { move |_editor, symbol| Some(location_to_file_location(&symbol.location)),
let path = symbol.location.uri.to_file_path().unwrap();
let line = Some((
symbol.location.range.start.line as usize,
symbol.location.range.end.line as usize,
));
Some((path, line))
},
); );
picker.truncate_start = false; picker.truncate_start = false;
picker picker
@ -465,15 +467,7 @@ fn goto_impl(
format!("{}:{}", file, line).into() format!("{}:{}", file, line).into()
}, },
move |cx, location, action| jump_to(cx.editor, location, offset_encoding, action), move |cx, location, action| jump_to(cx.editor, location, offset_encoding, action),
|_editor, location| { move |_editor, location| Some(location_to_file_location(location)),
// TODO: share code for symbol.location and location
let path = location.uri.to_file_path().unwrap();
let line = Some((
location.range.start.line as usize,
location.range.end.line as usize,
));
Some((path, line))
},
); );
compositor.push(Box::new(overlayed(picker))); compositor.push(Box::new(overlayed(picker)));
} }

View file

@ -14,7 +14,7 @@ pub use completion::Completion;
pub use editor::EditorView; pub use editor::EditorView;
pub use markdown::Markdown; pub use markdown::Markdown;
pub use menu::Menu; pub use menu::Menu;
pub use picker::{FilePicker, Picker}; pub use picker::{FileLocation, FilePicker, Picker};
pub use popup::Popup; pub use popup::Popup;
pub use prompt::{Prompt, PromptEvent}; pub use prompt::{Prompt, PromptEvent};
pub use spinner::{ProgressSpinners, Spinner}; pub use spinner::{ProgressSpinners, Spinner};

View file

@ -33,7 +33,7 @@ pub const MIN_AREA_WIDTH_FOR_PREVIEW: u16 = 72;
pub const MAX_FILE_SIZE_FOR_PREVIEW: u64 = 10 * 1024 * 1024; pub const MAX_FILE_SIZE_FOR_PREVIEW: u64 = 10 * 1024 * 1024;
/// File path and range of lines (used to align and highlight lines) /// File path and range of lines (used to align and highlight lines)
type FileLocation = (PathBuf, Option<(usize, usize)>); pub type FileLocation = (PathBuf, Option<(usize, usize)>);
pub struct FilePicker<T> { pub struct FilePicker<T> {
picker: Picker<T>, picker: Picker<T>,