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

debt - quick outline using the same model cache as breadcrumbs and outline tree

上级 5458ae72
...@@ -3,32 +3,30 @@ ...@@ -3,32 +3,30 @@
* Licensed under the MIT License. See License.txt in the project root for license information. * Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { illegalArgument, onUnexpectedExternalError } from 'vs/base/common/errors'; import { illegalArgument } from 'vs/base/common/errors';
import { URI } from 'vs/base/common/uri'; import { URI } from 'vs/base/common/uri';
import { Range } from 'vs/editor/common/core/range'; import { Range } from 'vs/editor/common/core/range';
import { ITextModel } from 'vs/editor/common/model'; import { ITextModel } from 'vs/editor/common/model';
import { registerLanguageCommand } from 'vs/editor/browser/editorExtensions'; import { registerLanguageCommand } from 'vs/editor/browser/editorExtensions';
import { DocumentSymbol, DocumentSymbolProviderRegistry } from 'vs/editor/common/modes'; import { DocumentSymbol } from 'vs/editor/common/modes';
import { IModelService } from 'vs/editor/common/services/modelService'; import { IModelService } from 'vs/editor/common/services/modelService';
import { CancellationToken } from 'vs/base/common/cancellation'; import { CancellationToken } from 'vs/base/common/cancellation';
import { ITextModelService } from 'vs/editor/common/services/resolverService'; import { ITextModelService } from 'vs/editor/common/services/resolverService';
import { OutlineModel, OutlineElement } from 'vs/editor/contrib/documentSymbols/outlineModel';
import { values } from 'vs/base/common/collections';
export function getDocumentSymbols(model: ITextModel, flat: boolean, token: CancellationToken): Promise<DocumentSymbol[]> { export async function getDocumentSymbols(document: ITextModel, flat: boolean, token: CancellationToken): Promise<DocumentSymbol[]> {
let roots: DocumentSymbol[] = []; const model = await OutlineModel.create(document, token);
const roots: DocumentSymbol[] = [];
let promises = DocumentSymbolProviderRegistry.all(model).map(support => { for (const child of values(model.children)) {
if (child instanceof OutlineElement) {
return Promise.resolve(support.provideDocumentSymbols(model, token)).then(result => { roots.push(child.symbol);
if (Array.isArray(result)) { } else {
roots.push(...result); roots.push(...values(child.children).map(child => child.symbol));
}
} }
}, err => {
onUnexpectedExternalError(err);
});
});
return Promise.all(promises).then(() => {
let flatEntries: DocumentSymbol[] = []; let flatEntries: DocumentSymbol[] = [];
if (token.isCancellationRequested) { if (token.isCancellationRequested) {
return flatEntries; return flatEntries;
...@@ -38,9 +36,8 @@ export function getDocumentSymbols(model: ITextModel, flat: boolean, token: Canc ...@@ -38,9 +36,8 @@ export function getDocumentSymbols(model: ITextModel, flat: boolean, token: Canc
} else { } else {
flatEntries = roots; flatEntries = roots;
} }
flatEntries.sort(compareEntriesUsingStart);
return flatEntries; return flatEntries.sort(compareEntriesUsingStart);
});
} }
function compareEntriesUsingStart(a: DocumentSymbol, b: DocumentSymbol): number { function compareEntriesUsingStart(a: DocumentSymbol, b: DocumentSymbol): number {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册