提交 cee2a0a9 编写于 作者: J Johannes Rieken

debt - quick outline cancellation token

上级 7845ce83
......@@ -7,21 +7,20 @@
import { illegalArgument, onUnexpectedExternalError } from 'vs/base/common/errors';
import { URI } from 'vs/base/common/uri';
import { TPromise } from 'vs/base/common/winjs.base';
import { Range } from 'vs/editor/common/core/range';
import { ITextModel } from 'vs/editor/common/model';
import { registerLanguageCommand } from 'vs/editor/browser/editorExtensions';
import { DocumentSymbol, DocumentSymbolProviderRegistry } from 'vs/editor/common/modes';
import { IModelService } from 'vs/editor/common/services/modelService';
import { asWinJsPromise } from 'vs/base/common/async';
import { CancellationToken } from 'vs/base/common/cancellation';
export function getDocumentSymbols(model: ITextModel): TPromise<DocumentSymbol[]> {
export function getDocumentSymbols(model: ITextModel, token: CancellationToken): Thenable<DocumentSymbol[]> {
let roots: DocumentSymbol[] = [];
let promises = DocumentSymbolProviderRegistry.all(model).map(support => {
return asWinJsPromise(token => support.provideDocumentSymbols(model, token)).then(result => {
return Promise.resolve(support.provideDocumentSymbols(model, token)).then(result => {
if (Array.isArray(result)) {
roots.push(...result);
}
......@@ -30,7 +29,7 @@ export function getDocumentSymbols(model: ITextModel): TPromise<DocumentSymbol[]
});
});
return TPromise.join(promises).then(() => {
return Promise.all(promises).then(() => {
let flatEntries: DocumentSymbol[] = [];
flatten(flatEntries, roots, '');
flatEntries.sort(compareEntriesUsingStart);
......@@ -69,5 +68,5 @@ registerLanguageCommand('_executeDocumentSymbolProvider', function (accessor, ar
if (!model) {
throw illegalArgument('resource');
}
return getDocumentSymbols(model);
return getDocumentSymbols(model, CancellationToken.None);
});
......@@ -23,6 +23,7 @@ import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';
import { Range, IRange } from 'vs/editor/common/core/range';
import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';
import { CancellationToken } from 'vs/base/common/cancellation';
let SCOPE_PREFIX = ':';
......@@ -140,13 +141,13 @@ export class QuickOutlineAction extends BaseEditorQuickOpenAction {
}
// Resolve outline
return getDocumentSymbols(model).then((result: DocumentSymbol[]) => {
return TPromise.wrap(getDocumentSymbols(model, CancellationToken.None).then((result: DocumentSymbol[]) => {
if (result.length === 0) {
return;
}
this._run(editor, result);
});
}));
}
private _run(editor: ICodeEditor, result: DocumentSymbol[]): void {
......
......@@ -26,6 +26,7 @@ import { overviewRulerRangeHighlight } from 'vs/editor/common/view/editorColorRe
import { GroupIdentifier, IEditorInput } from 'vs/workbench/common/editor';
import { IEditorService, SIDE_GROUP } from 'vs/workbench/services/editor/common/editorService';
import { IEditorGroup } from 'vs/workbench/services/group/common/editorGroupsService';
import { asWinJsPromise } from 'vs/base/common/async';
export const GOTO_SYMBOL_PREFIX = '@';
export const SCOPE_PREFIX = ':';
......@@ -483,7 +484,7 @@ export class GotoSymbolHandler extends QuickOpenHandler {
return TPromise.as(this.outlineToModelCache[modelId]);
}
return getDocumentSymbols(<ITextModel>model).then(entries => {
return asWinJsPromise(token => getDocumentSymbols(<ITextModel>model, token)).then(entries => {
const model = new OutlineModel(this.toQuickOpenEntries(entries));
......
......@@ -163,7 +163,7 @@ suite('ExtHostLanguageFeatures', function () {
return rpcProtocol.sync().then(() => {
return getDocumentSymbols(model).then(value => {
return getDocumentSymbols(model, CancellationToken.None).then(value => {
assert.equal(value.length, 1);
});
});
......@@ -178,7 +178,7 @@ suite('ExtHostLanguageFeatures', function () {
return rpcProtocol.sync().then(() => {
return getDocumentSymbols(model).then(value => {
return getDocumentSymbols(model, CancellationToken.None).then(value => {
assert.equal(value.length, 1);
let entry = value[0];
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册