提交 b52e3c25 编写于 作者: B Benjamin Pasero

further simplify quick open around default handlers

上级 60707855
......@@ -33,7 +33,7 @@ export class QuickOpenHandler {
* As such, returning the same model instance across multiple searches will yield best
* results in terms of performance when many items are shown.
*/
public getResults(searchValue: string): TPromise<IModel<any>> | QuickOpenHandlerResult {
public getResults(searchValue: string): TPromise<IModel<any>> {
return TPromise.as(null);
}
......@@ -59,6 +59,13 @@ export class QuickOpenHandler {
return true;
}
/**
* Hints to the outside that this quick open handler typically returns results fast.
*/
public hasShortResponseTime(): boolean {
return false;
}
/**
* Indicates if the handler wishes the quick open widget to automatically select the first result entry or an entry
* based on a specific prefix match.
......@@ -100,11 +107,6 @@ export class QuickOpenHandler {
}
}
export interface QuickOpenHandlerResult {
shortResponseTime: boolean;
promisedModel: TPromise<IModel<any>>;
}
export interface QuickOpenHandlerHelpEntry {
prefix: string;
description: string;
......@@ -170,18 +172,17 @@ export interface IQuickOpenRegistry {
getQuickOpenHandler(prefix: string): QuickOpenHandlerDescriptor;
/**
* Returns the default quick open handlers.
* Returns the default quick open handler.
*/
getDefaultQuickOpenHandlers(): QuickOpenHandlerDescriptor[];
getDefaultQuickOpenHandler(): QuickOpenHandlerDescriptor;
}
class QuickOpenRegistry implements IQuickOpenRegistry {
private handlers: QuickOpenHandlerDescriptor[];
private defaultHandlers: QuickOpenHandlerDescriptor[];
private defaultHandler: QuickOpenHandlerDescriptor;
constructor() {
this.handlers = [];
this.defaultHandlers = [];
}
public registerQuickOpenHandler(descriptor: QuickOpenHandlerDescriptor): void {
......@@ -193,7 +194,7 @@ class QuickOpenRegistry implements IQuickOpenRegistry {
}
public registerDefaultQuickOpenHandler(descriptor: QuickOpenHandlerDescriptor): void {
this.defaultHandlers.push(descriptor);
this.defaultHandler = descriptor;
}
public getQuickOpenHandlers(): QuickOpenHandlerDescriptor[] {
......@@ -204,8 +205,8 @@ class QuickOpenRegistry implements IQuickOpenRegistry {
return text ? arrays.first(this.handlers, h => strings.startsWith(text, h.prefix), null) : null;
}
public getDefaultQuickOpenHandlers(): QuickOpenHandlerDescriptor[] {
return this.defaultHandlers;
public getDefaultQuickOpenHandler(): QuickOpenHandlerDescriptor {
return this.defaultHandler;
}
}
......
......@@ -127,9 +127,9 @@ export class HelpHandler extends QuickOpenHandler {
let registry = (<IQuickOpenRegistry>Registry.as(Extensions.Quickopen));
let handlerDescriptors = registry.getQuickOpenHandlers();
let defaultHandlers = registry.getDefaultQuickOpenHandlers();
if (defaultHandlers.length > 0) {
handlerDescriptors.push(...defaultHandlers);
let defaultHandler = registry.getDefaultQuickOpenHandler();
if (defaultHandler) {
handlerDescriptors.push(defaultHandler);
}
let workbenchScoped: HelpEntry[] = [];
......
......@@ -17,7 +17,7 @@ import strings = require('vs/base/common/strings');
import {IRange} from 'vs/editor/common/editorCommon';
import {IAutoFocus} from 'vs/base/parts/quickopen/common/quickOpen';
import {QuickOpenEntry, QuickOpenModel} from 'vs/base/parts/quickopen/browser/quickOpenModel';
import {QuickOpenHandler, QuickOpenHandlerResult} from 'vs/workbench/browser/quickopen';
import {QuickOpenHandler} from 'vs/workbench/browser/quickopen';
import {FileEntry, OpenFileHandler, FileQuickOpenModel} from 'vs/workbench/parts/search/browser/openFileHandler';
/* tslint:disable:no-unused-variable */
import * as openSymbolHandler from 'vs/workbench/parts/search/browser/openSymbolHandler';
......@@ -139,7 +139,7 @@ export class OpenAnythingHandler extends QuickOpenHandler {
});
}
public getResults(searchValue: string): TPromise<QuickOpenModel> | QuickOpenHandlerResult {
public getResults(searchValue: string): TPromise<QuickOpenModel> {
const timerEvent = this.telemetryService.timedPublicLog('openAnything');
const startTime = timerEvent.startTime ? timerEvent.startTime.getTime() : Date.now(); // startTime is undefined when telemetry is disabled
......@@ -231,11 +231,11 @@ export class OpenAnythingHandler extends QuickOpenHandler {
};
// Trigger through delayer to prevent accumulation while the user is typing (except when expecting results to come from cache)
const isFileCacheLoaded = this.openFileHandler.isCacheLoaded;
return {
shortResponseTime: isFileCacheLoaded,
promisedModel: isFileCacheLoaded ? promiseFactory() : this.fileSearchDelayer.trigger(promiseFactory)
};
return this.hasShortResponseTime() ? promiseFactory() : this.fileSearchDelayer.trigger(promiseFactory);
}
public hasShortResponseTime(): boolean {
return this.openFileHandler.isCacheLoaded;
}
private extractRange(value: string): ISearchWithRange {
......
......@@ -17,7 +17,7 @@ import {IUntitledEditorService, UntitledEditorService} from 'vs/workbench/servic
import {IWorkbenchEditorService} from 'vs/workbench/services/editor/common/editorService';
import * as minimist from 'minimist';
import * as path from 'path';
import {QuickOpenHandler, QuickOpenHandlerResult, IQuickOpenRegistry, Extensions} from 'vs/workbench/browser/quickopen';
import {QuickOpenHandler, IQuickOpenRegistry, Extensions} from 'vs/workbench/browser/quickopen';
import {Registry} from 'vs/platform/platform';
import {SearchService} from 'vs/workbench/services/search/node/searchService';
import {ServiceCollection} from 'vs/platform/instantiation/common/serviceCollection';
......@@ -26,7 +26,6 @@ import {IEnvironmentService} from 'vs/platform/environment/common/environment';
import * as Timer from 'vs/base/common/timer';
import {TPromise} from 'vs/base/common/winjs.base';
import URI from 'vs/base/common/uri';
import {IModel} from 'vs/base/parts/quickopen/common/quickOpen';
declare var __dirname: string;
......@@ -59,16 +58,14 @@ suite('QuickOpen performance', () => {
));
const registry = Registry.as<IQuickOpenRegistry>(Extensions.Quickopen);
const descriptors = registry.getDefaultQuickOpenHandlers();
assert.strictEqual(descriptors.length, 1);
const descriptor = registry.getDefaultQuickOpenHandler();
assert.ok(descriptor);
function measure() {
return instantiationService.createInstance(descriptors[0])
return instantiationService.createInstance(descriptor)
.then((handler: QuickOpenHandler) => {
handler.onOpen();
const result = handler.getResults('a');
const promise = (<QuickOpenHandlerResult>result).promisedModel || <TPromise<IModel<any>>>result;
return promise.then(result => {
return handler.getResults('a').then(result => {
const uncachedEvent = popEvent();
assert.strictEqual(uncachedEvent.data.symbols.fromCache, false, 'symbols.fromCache');
assert.strictEqual(uncachedEvent.data.files.fromCache, true, 'files.fromCache');
......@@ -77,9 +74,7 @@ suite('QuickOpen performance', () => {
}
return uncachedEvent;
}).then(uncachedEvent => {
const result = handler.getResults('ab');
const promise = (<QuickOpenHandlerResult>result).promisedModel || <TPromise<IModel<any>>>result;
return promise.then(result => {
return handler.getResults('ab').then(result => {
const cachedEvent = popEvent();
assert.strictEqual(uncachedEvent.data.symbols.fromCache, false, 'symbols.fromCache');
assert.ok(cachedEvent.data.files.fromCache, 'filesFromCache');
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册