aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBlaž Hrastnik2022-02-18 05:01:50 +0000
committerBlaž Hrastnik2022-02-18 05:37:59 +0000
commitc06155ace4ef4aa65b680093da920bded320b8f0 (patch)
tree410392516089d3d60efad02e2d7ea09420e2a555
parent504d5ce8bd71486fc897ecdb33ff12c1c3a1e6b3 (diff)
Extract a helper function for lsp::Location
-rw-r--r--helix-term/src/commands/lsp.rs30
-rw-r--r--helix-term/src/ui/mod.rs2
-rw-r--r--helix-term/src/ui/picker.rs2
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>,