diff options
author | Blaž Hrastnik | 2022-02-18 05:01:50 +0000 |
---|---|---|
committer | Blaž Hrastnik | 2022-02-18 05:37:59 +0000 |
commit | c06155ace4ef4aa65b680093da920bded320b8f0 (patch) | |
tree | 410392516089d3d60efad02e2d7ea09420e2a555 | |
parent | 504d5ce8bd71486fc897ecdb33ff12c1c3a1e6b3 (diff) |
Extract a helper function for lsp::Location
-rw-r--r-- | helix-term/src/commands/lsp.rs | 30 | ||||
-rw-r--r-- | helix-term/src/ui/mod.rs | 2 | ||||
-rw-r--r-- | helix-term/src/ui/picker.rs | 2 |
3 files changed, 14 insertions, 20 deletions
diff --git a/helix-term/src/commands/lsp.rs b/helix-term/src/commands/lsp.rs index 084c7c6a..722490b2 100644 --- a/helix-term/src/commands/lsp.rs +++ b/helix-term/src/commands/lsp.rs @@ -11,11 +11,20 @@ use helix_view::editor::Action; use crate::{ compositor::{self, Compositor}, - ui::{self, overlay::overlayed, FilePicker, Popup, Prompt, PromptEvent}, + ui::{self, overlay::overlayed, FileLocation, FilePicker, Popup, Prompt, PromptEvent}, }; 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( symbols: Vec<lsp::SymbolInformation>, current_path: Option<lsp::Url>, @@ -55,14 +64,7 @@ fn sym_picker( align_view(doc, view, Align::Center); } }, - move |_editor, symbol| { - 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)) - }, + move |_editor, symbol| Some(location_to_file_location(&symbol.location)), ); picker.truncate_start = false; picker @@ -465,15 +467,7 @@ fn goto_impl( format!("{}:{}", file, line).into() }, move |cx, location, action| jump_to(cx.editor, location, offset_encoding, action), - |_editor, 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)) - }, + move |_editor, location| Some(location_to_file_location(location)), ); compositor.push(Box::new(overlayed(picker))); } diff --git a/helix-term/src/ui/mod.rs b/helix-term/src/ui/mod.rs index e269c8ed..21c1f7aa 100644 --- a/helix-term/src/ui/mod.rs +++ b/helix-term/src/ui/mod.rs @@ -14,7 +14,7 @@ pub use completion::Completion; pub use editor::EditorView; pub use markdown::Markdown; pub use menu::Menu; -pub use picker::{FilePicker, Picker}; +pub use picker::{FileLocation, FilePicker, Picker}; pub use popup::Popup; pub use prompt::{Prompt, PromptEvent}; pub use spinner::{ProgressSpinners, Spinner}; diff --git a/helix-term/src/ui/picker.rs b/helix-term/src/ui/picker.rs index 622af387..9e236510 100644 --- a/helix-term/src/ui/picker.rs +++ b/helix-term/src/ui/picker.rs @@ -33,7 +33,7 @@ pub const MIN_AREA_WIDTH_FOR_PREVIEW: u16 = 72; pub const MAX_FILE_SIZE_FOR_PREVIEW: u64 = 10 * 1024 * 1024; /// 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> { picker: Picker<T>, |