diff --git a/src/vs/workbench/api/node/extHostApiCommands.ts b/src/vs/workbench/api/node/extHostApiCommands.ts index d3467d37632..37cd6a1908d 100644 --- a/src/vs/workbench/api/node/extHostApiCommands.ts +++ b/src/vs/workbench/api/node/extHostApiCommands.ts @@ -19,6 +19,7 @@ import { ExtHostCommands } from 'vs/workbench/api/node/extHostCommands'; import { CustomCodeAction } from 'vs/workbench/api/node/extHostLanguageFeatures'; import { ICommandsExecutor, PreviewHTMLAPICommand, OpenFolderAPICommand, DiffAPICommand, OpenAPICommand, RemoveFromRecentlyOpenedAPICommand, SetEditorLayoutAPICommand } from './apiCommands'; import { EditorGroupLayout } from 'vs/workbench/services/group/common/editorGroupsService'; +import { isFalsyOrEmpty } from 'vs/base/common/arrays'; export class ExtHostApiCommands { @@ -411,15 +412,24 @@ export class ExtHostApiCommands { }); } - private _executeDocumentSymbolProvider(resource: URI): Thenable { + private _executeDocumentSymbolProvider(resource: URI): Thenable { const args = { resource }; return this._commands.executeCommand('_executeDocumentSymbolProvider', args).then(value => { - if (value && Array.isArray(value)) { - return value.map(typeConverters.DocumentSymbol.to); + if (isFalsyOrEmpty(value)) { + return undefined; } - return undefined; + let result: vscode.SymbolInformation[] = []; + for (const symbol of value) { + result.push(new types.SymbolInformation( + symbol.name, + typeConverters.SymbolKind.to(symbol.kind), + symbol.containerName, + new types.Location(resource, typeConverters.Range.to(symbol.range)) + )); + } + return result; }); } diff --git a/src/vs/workbench/test/electron-browser/api/extHostApiCommands.test.ts b/src/vs/workbench/test/electron-browser/api/extHostApiCommands.test.ts index 34528d0623d..ba37b81ff7d 100644 --- a/src/vs/workbench/test/electron-browser/api/extHostApiCommands.test.ts +++ b/src/vs/workbench/test/electron-browser/api/extHostApiCommands.test.ts @@ -332,6 +332,8 @@ suite('ExtHostLanguageFeatureCommands', function () { return commands.executeCommand('vscode.executeDocumentSymbolProvider', model.uri).then(values => { assert.equal(values.length, 2); let [first, second] = values; + assert.ok(first instanceof types.SymbolInformation); + assert.ok(second instanceof types.SymbolInformation); assert.equal(first.name, 'testing2'); assert.equal(second.name, 'testing1'); });