Accept 'IntoIterator<Item = T>' for Picker::new options

`Picker::new` loops through the input options to inject each of them, so
there's no need to collect into an intermediary Vec. This removes some
unnecessary collections. Also, pickers that start with no initial
options can now pass an empty slice instead of an empty Vec.

Co-authored-by: Luis Useche <useche@gmail.com>
pull/9647/head
Michael Davis 5 months ago
parent 3906f6605f
commit 8555248b01
No known key found for this signature in database

@ -2404,7 +2404,7 @@ fn global_search(cx: &mut Context) {
let picker = Picker::new(
columns,
1, // contents
vec![],
[],
config,
move |cx, FileResult { path, line_num, .. }, action| {
let doc = match cx.editor.open(path, action) {
@ -2991,16 +2991,12 @@ fn jumplist_picker(cx: &mut Context) {
let picker = Picker::new(
columns,
1, // path
cx.editor
.tree
.views()
.flat_map(|(view, _)| {
view.jumps
.iter()
.rev()
.map(|(doc_id, selection)| new_meta(view, *doc_id, selection.clone()))
})
.collect(),
cx.editor.tree.views().flat_map(|(view, _)| {
view.jumps
.iter()
.rev()
.map(|(doc_id, selection)| new_meta(view, *doc_id, selection.clone()))
}),
(),
|cx, meta, action| {
cx.editor.switch(meta.id, action);
@ -3077,7 +3073,7 @@ fn changed_file_picker(cx: &mut Context) {
let picker = Picker::new(
columns,
1, // path
Vec::new(),
[],
FileChangeData {
cwd: cwd.clone(),
style_untracked: added,
@ -3124,14 +3120,15 @@ pub fn command_palette(cx: &mut Context) {
[&cx.editor.mode]
.reverse_map();
let mut commands: Vec<MappableCommand> = MappableCommand::STATIC_COMMAND_LIST.into();
commands.extend(typed::TYPABLE_COMMAND_LIST.iter().map(|cmd| {
MappableCommand::Typable {
name: cmd.name.to_owned(),
doc: cmd.doc.to_owned(),
args: Vec::new(),
}
}));
let commands = MappableCommand::STATIC_COMMAND_LIST.iter().cloned().chain(
typed::TYPABLE_COMMAND_LIST
.iter()
.map(|cmd| MappableCommand::Typable {
name: cmd.name.to_owned(),
args: Vec::new(),
doc: cmd.doc.to_owned(),
}),
);
let columns = vec![
ui::PickerColumn::new("name", |item, _| match item {

@ -501,7 +501,7 @@ pub fn workspace_symbol_picker(cx: &mut Context) {
let picker = Picker::new(
columns,
1, // name column
vec![],
[],
(),
move |cx, item, action| {
jump_to_location(

@ -228,22 +228,16 @@ pub fn file_picker(root: PathBuf, config: &helix_view::editor::Config) -> FilePi
.into()
},
)];
let picker = Picker::new(
columns,
0,
Vec::new(),
root,
move |cx, path: &PathBuf, action| {
if let Err(e) = cx.editor.open(path, action) {
let err = if let Some(err) = e.source() {
format!("{}", err)
} else {
format!("unable to open \"{}\"", path.display())
};
cx.editor.set_error(err);
}
},
)
let picker = Picker::new(columns, 0, [], root, move |cx, path: &PathBuf, action| {
if let Err(e) = cx.editor.open(path, action) {
let err = if let Some(err) = e.source() {
format!("{}", err)
} else {
format!("unable to open \"{}\"", path.display())
};
cx.editor.set_error(err);
}
})
.with_preview(|_editor, path| Some((path.as_path().into(), None)));
let injector = picker.injector();
let timeout = std::time::Instant::now() + std::time::Duration::from_millis(30);

@ -298,7 +298,7 @@ impl<T: 'static + Send + Sync, D: 'static + Send + Sync> Picker<T, D> {
pub fn new(
columns: Vec<Column<T, D>>,
primary_column: usize,
options: Vec<T>,
options: impl IntoIterator<Item = T>,
editor_data: D,
callback_fn: impl Fn(&mut Context, &T, Action) + 'static,
) -> Self {

Loading…
Cancel
Save