mirror of https://github.com/helix-editor/helix
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
parent
3906f6605f
commit
8555248b01
|
@ -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, _)| {
|
||||
cx.editor.tree.views().flat_map(|(view, _)| {
|
||||
view.jumps
|
||||
.iter()
|
||||
.rev()
|
||||
.map(|(doc_id, selection)| new_meta(view, *doc_id, selection.clone()))
|
||||
})
|
||||
.collect(),
|
||||
}),
|
||||
(),
|
||||
|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 {
|
||||
let commands = MappableCommand::STATIC_COMMAND_LIST.iter().cloned().chain(
|
||||
typed::TYPABLE_COMMAND_LIST
|
||||
.iter()
|
||||
.map(|cmd| MappableCommand::Typable {
|
||||
name: cmd.name.to_owned(),
|
||||
doc: cmd.doc.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,12 +228,7 @@ 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| {
|
||||
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)
|
||||
|
@ -242,8 +237,7 @@ pub fn file_picker(root: PathBuf, config: &helix_view::editor::Config) -> FilePi
|
|||
};
|
||||
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…
Reference in New Issue