提交 01ae652d 编写于 作者: B Benjamin Pasero 提交者: GitHub

Merge pull request #19970 from Microsoft/ben/14727

Fuzzy Search in Cmd palette should rank results with closer search terms higher (fixes #14727)
......@@ -115,10 +115,6 @@ export function compareByScore<T>(elementA: T, elementB: T, accessor: IScorableR
const labelAScore = scorer.score(labelA, lookFor, scorerCache);
const labelBScore = scorer.score(labelB, lookFor, scorerCache);
// Useful for understanding the scoring
// elementA.setPrefix(labelAScore + ' ');
// elementB.setPrefix(labelBScore + ' ');
if (labelAScore !== labelBScore) {
return labelAScore > labelBScore ? -1 : 1;
}
......@@ -130,10 +126,6 @@ export function compareByScore<T>(elementA: T, elementB: T, accessor: IScorableR
const resourceAScore = scorer.score(resourcePathA, lookFor, scorerCache);
const resourceBScore = scorer.score(resourcePathB, lookFor, scorerCache);
// Useful for understanding the scoring
// elementA.setPrefix(elementA.getPrefix() + ' ' + resourceAScore + ': ');
// elementB.setPrefix(elementB.getPrefix() + ' ' + resourceBScore + ': ');
if (resourceAScore !== resourceBScore) {
return resourceAScore > resourceBScore ? -1 : 1;
}
......
......@@ -13,8 +13,9 @@ import types = require('vs/base/common/types');
import { language, LANGUAGE_DEFAULT } from 'vs/base/common/platform';
import { IAction, Action } from 'vs/base/common/actions';
import { toErrorMessage } from 'vs/base/common/errorMessage';
import strings = require('vs/base/common/strings');
import { Mode, IEntryRunContext, IAutoFocus } from 'vs/base/parts/quickopen/common/quickOpen';
import { QuickOpenEntryGroup, IHighlight, QuickOpenModel } from 'vs/base/parts/quickopen/browser/quickOpenModel';
import { QuickOpenEntryGroup, IHighlight, QuickOpenModel, QuickOpenEntry } from 'vs/base/parts/quickopen/browser/quickOpenModel';
import { SyncActionDescriptor, ExecuteCommandAction, IMenuService } from 'vs/platform/actions/common/actions';
import { IWorkbenchActionRegistry, Extensions as ActionExtensions } from 'vs/workbench/common/actionRegistry';
import { Registry } from 'vs/platform/platform';
......@@ -231,6 +232,7 @@ class ActionCommandEntry extends BaseCommandEntry {
}
export class CommandsHandler extends QuickOpenHandler {
private scorerCache: { [key: string]: number };
constructor(
@IWorkbenchEditorService private editorService: IWorkbenchEditorService,
......@@ -239,6 +241,8 @@ export class CommandsHandler extends QuickOpenHandler {
@IMenuService private menuService: IMenuService
) {
super();
this.scorerCache = Object.create(null);
}
protected includeWorkbenchCommands(): boolean {
......@@ -282,8 +286,13 @@ export class CommandsHandler extends QuickOpenHandler {
// Remove duplicates
entries = arrays.distinct(entries, (entry) => entry.getLabel() + entry.getGroupLabel());
// Sort by name
entries = entries.sort((elementA, elementB) => elementA.getLabel().toLowerCase().localeCompare(elementB.getLabel().toLowerCase()));
// Sort
if (searchValue) {
const normalizedSearchValue = strings.stripWildcards(searchValue).toLowerCase();
entries = entries.sort((elementA, elementB) => QuickOpenEntry.compareByScore(elementA, elementB, searchValue, normalizedSearchValue, this.scorerCache));
} else {
entries = entries.sort((elementA, elementB) => elementA.getLabel().toLowerCase().localeCompare(elementB.getLabel().toLowerCase()));
}
return TPromise.as(new QuickOpenModel(entries));
}
......@@ -376,6 +385,12 @@ export class CommandsHandler extends QuickOpenHandler {
public getEmptyLabel(searchString: string): string {
return nls.localize('noCommandsMatching', "No commands matching");
}
public onClose(canceled: boolean): void {
// Clear Cache
this.scorerCache = Object.create(null);
}
}
export class EditorCommandsHandler extends CommandsHandler {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册