|
1 |
| -use anyhow::anyhow; |
2 | 1 | use collections::{CommandPaletteFilter, HashMap};
|
3 | 2 | use fuzzy::{StringMatch, StringMatchCandidate};
|
4 | 3 | use gpui::{
|
5 |
| - actions, div, Action, AnyElement, AnyWindowHandle, AppContext, BorrowWindow, Component, Div, |
6 |
| - Element, EventEmitter, FocusHandle, Keystroke, ParentElement, Render, StatelessInteractive, |
7 |
| - Styled, View, ViewContext, VisualContext, WeakView, WindowContext, |
| 4 | + actions, div, Action, AppContext, Component, Div, EventEmitter, FocusHandle, Keystroke, |
| 5 | + ParentElement, Render, StatelessInteractive, Styled, View, ViewContext, VisualContext, |
| 6 | + WeakView, WindowContext, |
8 | 7 | };
|
9 | 8 | use picker::{Picker, PickerDelegate};
|
10 | 9 | use std::cmp::{self, Reverse};
|
@@ -60,7 +59,7 @@ impl CommandPalette {
|
60 | 59 | .collect();
|
61 | 60 |
|
62 | 61 | let delegate =
|
63 |
| - CommandPaletteDelegate::new(cx.view().downgrade(), commands, previous_focus_handle, cx); |
| 62 | + CommandPaletteDelegate::new(cx.view().downgrade(), commands, previous_focus_handle); |
64 | 63 |
|
65 | 64 | let picker = cx.build_view(|cx| Picker::new(delegate, cx));
|
66 | 65 | Self { picker }
|
@@ -125,17 +124,20 @@ impl CommandPaletteDelegate {
|
125 | 124 | command_palette: WeakView<CommandPalette>,
|
126 | 125 | commands: Vec<Command>,
|
127 | 126 | previous_focus_handle: FocusHandle,
|
128 |
| - cx: &ViewContext<CommandPalette>, |
129 | 127 | ) -> Self {
|
130 | 128 | Self {
|
131 | 129 | command_palette,
|
| 130 | + matches: commands |
| 131 | + .iter() |
| 132 | + .enumerate() |
| 133 | + .map(|(i, command)| StringMatch { |
| 134 | + candidate_id: i, |
| 135 | + string: command.name.clone(), |
| 136 | + positions: Vec::new(), |
| 137 | + score: 0.0, |
| 138 | + }) |
| 139 | + .collect(), |
132 | 140 | commands,
|
133 |
| - matches: vec![StringMatch { |
134 |
| - candidate_id: 0, |
135 |
| - score: 0., |
136 |
| - positions: vec![], |
137 |
| - string: "Foo my bar".into(), |
138 |
| - }], |
139 | 141 | selected_ix: 0,
|
140 | 142 | previous_focus_handle,
|
141 | 143 | }
|
@@ -405,129 +407,129 @@ impl std::fmt::Debug for Command {
|
405 | 407 | }
|
406 | 408 | }
|
407 | 409 |
|
408 |
| -#[cfg(test)] |
409 |
| -mod tests { |
410 |
| - use std::sync::Arc; |
411 |
| - |
412 |
| - use super::*; |
413 |
| - use editor::Editor; |
414 |
| - use gpui::{executor::Deterministic, TestAppContext}; |
415 |
| - use project::Project; |
416 |
| - use workspace::{AppState, Workspace}; |
417 |
| - |
418 |
| - #[test] |
419 |
| - fn test_humanize_action_name() { |
420 |
| - assert_eq!( |
421 |
| - humanize_action_name("editor::GoToDefinition"), |
422 |
| - "editor: go to definition" |
423 |
| - ); |
424 |
| - assert_eq!( |
425 |
| - humanize_action_name("editor::Backspace"), |
426 |
| - "editor: backspace" |
427 |
| - ); |
428 |
| - assert_eq!( |
429 |
| - humanize_action_name("go_to_line::Deploy"), |
430 |
| - "go to line: deploy" |
431 |
| - ); |
432 |
| - } |
433 |
| - |
434 |
| - #[gpui::test] |
435 |
| - async fn test_command_palette(deterministic: Arc<Deterministic>, cx: &mut TestAppContext) { |
436 |
| - let app_state = init_test(cx); |
437 |
| - |
438 |
| - let project = Project::test(app_state.fs.clone(), [], cx).await; |
439 |
| - let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); |
440 |
| - let workspace = window.root(cx); |
441 |
| - let editor = window.add_view(cx, |cx| { |
442 |
| - let mut editor = Editor::single_line(None, cx); |
443 |
| - editor.set_text("abc", cx); |
444 |
| - editor |
445 |
| - }); |
446 |
| - |
447 |
| - workspace.update(cx, |workspace, cx| { |
448 |
| - cx.focus(&editor); |
449 |
| - workspace.add_item(Box::new(editor.clone()), cx) |
450 |
| - }); |
451 |
| - |
452 |
| - workspace.update(cx, |workspace, cx| { |
453 |
| - toggle_command_palette(workspace, &Toggle, cx); |
454 |
| - }); |
455 |
| - |
456 |
| - let palette = workspace.read_with(cx, |workspace, _| { |
457 |
| - workspace.modal::<CommandPalette>().unwrap() |
458 |
| - }); |
459 |
| - |
460 |
| - palette |
461 |
| - .update(cx, |palette, cx| { |
462 |
| - // Fill up palette's command list by running an empty query; |
463 |
| - // we only need it to subsequently assert that the palette is initially |
464 |
| - // sorted by command's name. |
465 |
| - palette.delegate_mut().update_matches("".to_string(), cx) |
466 |
| - }) |
467 |
| - .await; |
468 |
| - |
469 |
| - palette.update(cx, |palette, _| { |
470 |
| - let is_sorted = |
471 |
| - |actions: &[Command]| actions.windows(2).all(|pair| pair[0].name <= pair[1].name); |
472 |
| - assert!(is_sorted(&palette.delegate().actions)); |
473 |
| - }); |
474 |
| - |
475 |
| - palette |
476 |
| - .update(cx, |palette, cx| { |
477 |
| - palette |
478 |
| - .delegate_mut() |
479 |
| - .update_matches("bcksp".to_string(), cx) |
480 |
| - }) |
481 |
| - .await; |
482 |
| - |
483 |
| - palette.update(cx, |palette, cx| { |
484 |
| - assert_eq!(palette.delegate().matches[0].string, "editor: backspace"); |
485 |
| - palette.confirm(&Default::default(), cx); |
486 |
| - }); |
487 |
| - deterministic.run_until_parked(); |
488 |
| - editor.read_with(cx, |editor, cx| { |
489 |
| - assert_eq!(editor.text(cx), "ab"); |
490 |
| - }); |
491 |
| - |
492 |
| - // Add namespace filter, and redeploy the palette |
493 |
| - cx.update(|cx| { |
494 |
| - cx.update_default_global::<CommandPaletteFilter, _, _>(|filter, _| { |
495 |
| - filter.filtered_namespaces.insert("editor"); |
496 |
| - }) |
497 |
| - }); |
498 |
| - |
499 |
| - workspace.update(cx, |workspace, cx| { |
500 |
| - toggle_command_palette(workspace, &Toggle, cx); |
501 |
| - }); |
502 |
| - |
503 |
| - // Assert editor command not present |
504 |
| - let palette = workspace.read_with(cx, |workspace, _| { |
505 |
| - workspace.modal::<CommandPalette>().unwrap() |
506 |
| - }); |
507 |
| - |
508 |
| - palette |
509 |
| - .update(cx, |palette, cx| { |
510 |
| - palette |
511 |
| - .delegate_mut() |
512 |
| - .update_matches("bcksp".to_string(), cx) |
513 |
| - }) |
514 |
| - .await; |
515 |
| - |
516 |
| - palette.update(cx, |palette, _| { |
517 |
| - assert!(palette.delegate().matches.is_empty()) |
518 |
| - }); |
519 |
| - } |
520 |
| - |
521 |
| - fn init_test(cx: &mut TestAppContext) -> Arc<AppState> { |
522 |
| - cx.update(|cx| { |
523 |
| - let app_state = AppState::test(cx); |
524 |
| - theme::init(cx); |
525 |
| - language::init(cx); |
526 |
| - editor::init(cx); |
527 |
| - workspace::init(app_state.clone(), cx); |
528 |
| - init(cx); |
529 |
| - Project::init_settings(cx); |
530 |
| - app_state |
531 |
| - }) |
532 |
| - } |
533 |
| -} |
| 410 | +// #[cfg(test)] |
| 411 | +// mod tests { |
| 412 | +// use std::sync::Arc; |
| 413 | + |
| 414 | +// use super::*; |
| 415 | +// use editor::Editor; |
| 416 | +// use gpui::{executor::Deterministic, TestAppContext}; |
| 417 | +// use project::Project; |
| 418 | +// use workspace::{AppState, Workspace}; |
| 419 | + |
| 420 | +// #[test] |
| 421 | +// fn test_humanize_action_name() { |
| 422 | +// assert_eq!( |
| 423 | +// humanize_action_name("editor::GoToDefinition"), |
| 424 | +// "editor: go to definition" |
| 425 | +// ); |
| 426 | +// assert_eq!( |
| 427 | +// humanize_action_name("editor::Backspace"), |
| 428 | +// "editor: backspace" |
| 429 | +// ); |
| 430 | +// assert_eq!( |
| 431 | +// humanize_action_name("go_to_line::Deploy"), |
| 432 | +// "go to line: deploy" |
| 433 | +// ); |
| 434 | +// } |
| 435 | + |
| 436 | +// #[gpui::test] |
| 437 | +// async fn test_command_palette(deterministic: Arc<Deterministic>, cx: &mut TestAppContext) { |
| 438 | +// let app_state = init_test(cx); |
| 439 | + |
| 440 | +// let project = Project::test(app_state.fs.clone(), [], cx).await; |
| 441 | +// let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); |
| 442 | +// let workspace = window.root(cx); |
| 443 | +// let editor = window.add_view(cx, |cx| { |
| 444 | +// let mut editor = Editor::single_line(None, cx); |
| 445 | +// editor.set_text("abc", cx); |
| 446 | +// editor |
| 447 | +// }); |
| 448 | + |
| 449 | +// workspace.update(cx, |workspace, cx| { |
| 450 | +// cx.focus(&editor); |
| 451 | +// workspace.add_item(Box::new(editor.clone()), cx) |
| 452 | +// }); |
| 453 | + |
| 454 | +// workspace.update(cx, |workspace, cx| { |
| 455 | +// toggle_command_palette(workspace, &Toggle, cx); |
| 456 | +// }); |
| 457 | + |
| 458 | +// let palette = workspace.read_with(cx, |workspace, _| { |
| 459 | +// workspace.modal::<CommandPalette>().unwrap() |
| 460 | +// }); |
| 461 | + |
| 462 | +// palette |
| 463 | +// .update(cx, |palette, cx| { |
| 464 | +// // Fill up palette's command list by running an empty query; |
| 465 | +// // we only need it to subsequently assert that the palette is initially |
| 466 | +// // sorted by command's name. |
| 467 | +// palette.delegate_mut().update_matches("".to_string(), cx) |
| 468 | +// }) |
| 469 | +// .await; |
| 470 | + |
| 471 | +// palette.update(cx, |palette, _| { |
| 472 | +// let is_sorted = |
| 473 | +// |actions: &[Command]| actions.windows(2).all(|pair| pair[0].name <= pair[1].name); |
| 474 | +// assert!(is_sorted(&palette.delegate().actions)); |
| 475 | +// }); |
| 476 | + |
| 477 | +// palette |
| 478 | +// .update(cx, |palette, cx| { |
| 479 | +// palette |
| 480 | +// .delegate_mut() |
| 481 | +// .update_matches("bcksp".to_string(), cx) |
| 482 | +// }) |
| 483 | +// .await; |
| 484 | + |
| 485 | +// palette.update(cx, |palette, cx| { |
| 486 | +// assert_eq!(palette.delegate().matches[0].string, "editor: backspace"); |
| 487 | +// palette.confirm(&Default::default(), cx); |
| 488 | +// }); |
| 489 | +// deterministic.run_until_parked(); |
| 490 | +// editor.read_with(cx, |editor, cx| { |
| 491 | +// assert_eq!(editor.text(cx), "ab"); |
| 492 | +// }); |
| 493 | + |
| 494 | +// // Add namespace filter, and redeploy the palette |
| 495 | +// cx.update(|cx| { |
| 496 | +// cx.update_default_global::<CommandPaletteFilter, _, _>(|filter, _| { |
| 497 | +// filter.filtered_namespaces.insert("editor"); |
| 498 | +// }) |
| 499 | +// }); |
| 500 | + |
| 501 | +// workspace.update(cx, |workspace, cx| { |
| 502 | +// toggle_command_palette(workspace, &Toggle, cx); |
| 503 | +// }); |
| 504 | + |
| 505 | +// // Assert editor command not present |
| 506 | +// let palette = workspace.read_with(cx, |workspace, _| { |
| 507 | +// workspace.modal::<CommandPalette>().unwrap() |
| 508 | +// }); |
| 509 | + |
| 510 | +// palette |
| 511 | +// .update(cx, |palette, cx| { |
| 512 | +// palette |
| 513 | +// .delegate_mut() |
| 514 | +// .update_matches("bcksp".to_string(), cx) |
| 515 | +// }) |
| 516 | +// .await; |
| 517 | + |
| 518 | +// palette.update(cx, |palette, _| { |
| 519 | +// assert!(palette.delegate().matches.is_empty()) |
| 520 | +// }); |
| 521 | +// } |
| 522 | + |
| 523 | +// fn init_test(cx: &mut TestAppContext) -> Arc<AppState> { |
| 524 | +// cx.update(|cx| { |
| 525 | +// let app_state = AppState::test(cx); |
| 526 | +// theme::init(cx); |
| 527 | +// language::init(cx); |
| 528 | +// editor::init(cx); |
| 529 | +// workspace::init(app_state.clone(), cx); |
| 530 | +// init(cx); |
| 531 | +// Project::init_settings(cx); |
| 532 | +// app_state |
| 533 | +// }) |
| 534 | +// } |
| 535 | +// } |
0 commit comments