diff --git a/src/vs/editor/contrib/documentSymbols/outlineModel.ts b/src/vs/editor/contrib/documentSymbols/outlineModel.ts index 46fae4393356068931af69e98df0785360e6e62e..b904bd37ecc52dd5d9c3f489d725ab259f1e230a 100644 --- a/src/vs/editor/contrib/documentSymbols/outlineModel.ts +++ b/src/vs/editor/contrib/documentSymbols/outlineModel.ts @@ -443,7 +443,7 @@ export class OutlineModel extends TreeElement { } } - asListOfDocumentSymbols(): DocumentSymbol[] { + getTopLevelSymbols(): DocumentSymbol[] { const roots: DocumentSymbol[] = []; for (const child of this.children.values()) { if (child instanceof OutlineElement) { @@ -452,9 +452,14 @@ export class OutlineModel extends TreeElement { roots.push(...Iterable.map(child.children.values(), child => child.symbol)); } } + return roots.sort((a, b) => Range.compareRangesUsingStarts(a.range, b.range)); + } + + asListOfDocumentSymbols(): DocumentSymbol[] { + const roots = this.getTopLevelSymbols(); const bucket: DocumentSymbol[] = []; OutlineModel._flattenDocumentSymbols(bucket, roots, ''); - return bucket; + return bucket.sort((a, b) => Range.compareRangesUsingStarts(a.range, b.range)); } private static _flattenDocumentSymbols(bucket: DocumentSymbol[], entries: DocumentSymbol[], overrideContainerLabel: string): void { diff --git a/src/vs/editor/contrib/gotoSymbol/documentSymbols.ts b/src/vs/editor/contrib/gotoSymbol/documentSymbols.ts index 4d9a68f5ccfae7537201c3df4eeae57f6b5d6cbf..64f5fa0dea1def88e2b54c8a54192e4d38eb99c3 100644 --- a/src/vs/editor/contrib/gotoSymbol/documentSymbols.ts +++ b/src/vs/editor/contrib/gotoSymbol/documentSymbols.ts @@ -15,7 +15,9 @@ import { assertType } from 'vs/base/common/types'; export async function getDocumentSymbols(document: ITextModel, flat: boolean, token: CancellationToken): Promise { const model = await OutlineModel.create(document, token); - return model.asListOfDocumentSymbols(); + return flat + ? model.asListOfDocumentSymbols() + : model.getTopLevelSymbols(); } CommandsRegistry.registerCommand('_executeDocumentSymbolProvider', async function (accessor, ...args) {