diff --git a/src/vs/editor/common/modes.ts b/src/vs/editor/common/modes.ts index 97a3a1ab3455cff2a2c45ce32c31a9106d48c68d..6b7ae998466a8d3ebd261d2d2bc666322b804c98 100644 --- a/src/vs/editor/common/modes.ts +++ b/src/vs/editor/common/modes.ts @@ -676,6 +676,9 @@ export interface SymbolInformation { * the [go to symbol](https://code.visualstudio.com/docs/editor/editingevolved#_goto-symbol)-feature. */ export interface DocumentSymbolProvider { + + extensionId?: string; + /** * Provide symbol information for the given document. */ diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index 5867d5cabbbcd0626b7ba0faef6e2a5ff25d7210..9aeabdb729a9e3bfc35b55df83dace2ecb10c644 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -4893,6 +4893,7 @@ declare namespace monaco.languages { * the [go to symbol](https://code.visualstudio.com/docs/editor/editingevolved#_goto-symbol)-feature. */ export interface DocumentSymbolProvider { + extensionId?: string; /** * Provide symbol information for the given document. */ diff --git a/src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts b/src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts index c25c6477b5067640b17a38ddb27858853dc24ebc..1e2e17a94339be642b896935511aa1b36c637bd4 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts @@ -97,8 +97,9 @@ export class MainThreadLanguageFeatures implements MainThreadLanguageFeaturesSha // --- outline - $registerOutlineSupport(handle: number, selector: ISerializedDocumentFilter[]): void { + $registerOutlineSupport(handle: number, selector: ISerializedDocumentFilter[], extensionId: string): void { this._registrations[handle] = modes.DocumentSymbolProviderRegistry.register(typeConverters.LanguageSelector.from(selector), { + extensionId, provideDocumentSymbols: (model: ITextModel, token: CancellationToken): Thenable => { return wireCancellationToken(token, this._proxy.$provideDocumentSymbols(handle, model.uri)).then(MainThreadLanguageFeatures._reviveSymbolInformationDto); } diff --git a/src/vs/workbench/api/node/extHost.api.impl.ts b/src/vs/workbench/api/node/extHost.api.impl.ts index 1334c6cb44d679ee079171a792ed6d36d67e7732..e3a63ed328db5e5f67af1e5d28403addf9c65e5f 100644 --- a/src/vs/workbench/api/node/extHost.api.impl.ts +++ b/src/vs/workbench/api/node/extHost.api.impl.ts @@ -285,7 +285,7 @@ export function createApiFactory( return extHostLanguageFeatures.registerRenameProvider(checkSelector(selector), provider); }, registerDocumentSymbolProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentSymbolProvider): vscode.Disposable { - return extHostLanguageFeatures.registerDocumentSymbolProvider(checkSelector(selector), provider); + return extHostLanguageFeatures.registerDocumentSymbolProvider(checkSelector(selector), provider, extension.id); }, registerWorkspaceSymbolProvider(provider: vscode.WorkspaceSymbolProvider): vscode.Disposable { return extHostLanguageFeatures.registerWorkspaceSymbolProvider(provider); diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index 870a18c23580e9d1438648d60e7bd048a43afc6f..ec48069d253aefb063d0b2a1b3a21432cc82e781 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -263,7 +263,7 @@ export interface ISerializedDocumentFilter { export interface MainThreadLanguageFeaturesShape extends IDisposable { $unregister(handle: number): void; - $registerOutlineSupport(handle: number, selector: ISerializedDocumentFilter[]): void; + $registerOutlineSupport(handle: number, selector: ISerializedDocumentFilter[], extensionId: string): void; $registerCodeLensSupport(handle: number, selector: ISerializedDocumentFilter[], eventHandle: number): void; $emitCodeLensEvent(eventHandle: number, event?: any): void; $registerDeclaractionSupport(handle: number, selector: ISerializedDocumentFilter[]): void; diff --git a/src/vs/workbench/api/node/extHostLanguageFeatures.ts b/src/vs/workbench/api/node/extHostLanguageFeatures.ts index a5c89164b99f5b83daa5d5f317103696ebb4e508..44222b9b03b4cf990f3da9bdc642626694eb5df0 100644 --- a/src/vs/workbench/api/node/extHostLanguageFeatures.ts +++ b/src/vs/workbench/api/node/extHostLanguageFeatures.ts @@ -928,9 +928,9 @@ export class ExtHostLanguageFeatures implements ExtHostLanguageFeaturesShape { // --- outline - registerDocumentSymbolProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentSymbolProvider): vscode.Disposable { + registerDocumentSymbolProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentSymbolProvider, extensionId?: string): vscode.Disposable { const handle = this._addNewAdapter(new OutlineAdapter(this._documents, provider)); - this._proxy.$registerOutlineSupport(handle, this._transformDocumentSelector(selector)); + this._proxy.$registerOutlineSupport(handle, this._transformDocumentSelector(selector), extensionId); return this._createDisposable(handle); } diff --git a/src/vs/workbench/parts/outline/electron-browser/outlineModel.ts b/src/vs/workbench/parts/outline/electron-browser/outlineModel.ts index d258c920d05af644114c26cedaedd0bb2a0307c0..98724108c694087f49217f3da64c163022642c52 100644 --- a/src/vs/workbench/parts/outline/electron-browser/outlineModel.ts +++ b/src/vs/workbench/parts/outline/electron-browser/outlineModel.ts @@ -14,10 +14,9 @@ import { Range } from 'vs/editor/common/core/range'; import { values } from 'vs/base/common/map'; export function getOutline(model: ITextModel): TPromise[] { - return DocumentSymbolProviderRegistry.ordered(model).map((provider, i) => { - let source = `provider${i}`; + return DocumentSymbolProviderRegistry.ordered(model).map(provider => { return asWinJsPromise(token => provider.provideDocumentSymbols(model, token)).then(result => { - let group = new OutlineItemGroup(source); + let group = new OutlineItemGroup(provider.extensionId); for (const info of result) { let child = asOutlineItem(info, group); group.children.set(child.id, child); @@ -25,7 +24,7 @@ export function getOutline(model: ITextModel): TPromise[] { return group; }, err => { //todo@joh capture error in group - return new OutlineItemGroup(source); + return new OutlineItemGroup(provider.extensionId); }); }); }