@@ -467,38 +467,28 @@ pub fn code_action(cx: &mut Context) {
467 // while more situational commands (like refactors) show up later
467 // while more situational commands (like refactors) show up later
468 // this behaviour is modeled after the behaviour of vscode (editor/contrib/codeAction/browser/codeActionWidget.ts)
468 // this behaviour is modeled after the behaviour of vscode (editor/contrib/codeAction/browser/codeActionWidget.ts)
470− let mut categories = vec![Vec::new(); 8];
470+ actions.sort_by_key(|action| match &action {
471− for action in actions.drain(..) {
472− let category = match &action {
473− lsp::CodeActionOrCommand::CodeAction(lsp::CodeAction {
471+ lsp::CodeActionOrCommand::CodeAction(lsp::CodeAction {
474− kind: Some(kind),
472+ kind: Some(kind), ..
477− let mut components = kind.as_str().split('.');
474+ let mut components = kind.as_str().split('.');
479− match components.next() {
476+ match components.next() {
480− Some("quickfix") => 0,
477+ Some("quickfix") => 0,
481− Some("refactor") => match components.next() {
478+ Some("refactor") => match components.next() {
482− Some("extract") => 1,
479+ Some("extract") => 1,
483− Some("inline") => 2,
480+ Some("inline") => 2,
484− Some("rewrite") => 3,
481+ Some("rewrite") => 3,
485− Some("move") => 4,
482+ Some("move") => 4,
486− Some("surround") => 5,
483+ Some("surround") => 5,
489− Some("source") => 6,
486+ Some("source") => 6,
496− categories[category].push(action);
499− for category in categories {
500− actions.extend(category.into_iter())
503 let mut picker =
493 let mut picker =
504 ui::Menu::new(actions, false, (), move |editor, code_action, event| {
494 ui::Menu::new(actions, false, (), move |editor, code_action, event| {