Use nicer filepaths instead of URIs in goto picker

This commit is contained in:
Blaž Hrastnik 2021-08-03 09:29:03 +09:00
parent b3aefe18cd
commit adb5d842ba

View file

@ -2497,6 +2497,8 @@ fn goto_impl(
align_view(doc, view, Align::Center);
}
let cwdir = std::env::current_dir().expect("couldn't determine current directory");
match locations.as_slice() {
[location] => {
jump_to(editor, location, offset_encoding, Action::Replace);
@ -2507,8 +2509,23 @@ fn goto_impl(
_locations => {
let picker = ui::Picker::new(
locations,
|location| {
let file = location.uri.as_str();
move |location| {
let file: Cow<'_, str> = (location.uri.scheme() == "file")
.then(|| {
location
.uri
.to_file_path()
.map(|path| {
// strip root prefix
path.strip_prefix(&cwdir)
.map(|path| path.to_path_buf())
.unwrap_or(path)
})
.ok()
.and_then(|path| path.to_str().map(|path| path.to_owned().into()))
})
.flatten()
.unwrap_or_else(|| location.uri.as_str().into());
let line = location.range.start.line;
format!("{}:{}", file, line).into()
},