diff --git a/src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts b/src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts index cf46b6138e2..8ae09ea6f35 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts @@ -232,7 +232,8 @@ export class MainThreadLanguageFeatures implements MainThreadLanguageFeaturesSha // --- suggest - $registerSuggestSupport(handle: number, selector: vscode.DocumentSelector, triggerCharacters: string[]): TPromise { + $registerSuggestSupport(handle: number, selector: vscode.DocumentSelector, triggerCharacters: string[], supportsResolveDetails: boolean): TPromise { + this._registrations[handle] = modes.SuggestRegistry.register(selector, { triggerCharacters, provideCompletionItems: (model: IReadOnlyModel, position: EditorPosition, token: CancellationToken): Thenable => { @@ -247,9 +248,9 @@ export class MainThreadLanguageFeatures implements MainThreadLanguageFeaturesSha }; }); }, - resolveCompletionItem: (model: IReadOnlyModel, position: EditorPosition, suggestion: modes.ISuggestion, token: CancellationToken): Thenable => { - return wireCancellationToken(token, this._proxy.$resolveCompletionItem(handle, model.uri, position, suggestion)); - } + resolveCompletionItem: supportsResolveDetails + ? (model, position, suggestion, token) => wireCancellationToken(token, this._proxy.$resolveCompletionItem(handle, model.uri, position, suggestion)) + : undefined }); return undefined; } diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index 8e83b760583..5f6c6451184 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -229,7 +229,7 @@ export interface MainThreadLanguageFeaturesShape extends IDisposable { $registerOnTypeFormattingSupport(handle: number, selector: vscode.DocumentSelector, autoFormatTriggerCharacters: string[]): TPromise; $registerNavigateTypeSupport(handle: number): TPromise; $registerRenameSupport(handle: number, selector: vscode.DocumentSelector): TPromise; - $registerSuggestSupport(handle: number, selector: vscode.DocumentSelector, triggerCharacters: string[]): TPromise; + $registerSuggestSupport(handle: number, selector: vscode.DocumentSelector, triggerCharacters: string[], supportsResolveDetails: boolean): TPromise; $registerSignatureHelpProvider(handle: number, selector: vscode.DocumentSelector, triggerCharacter: string[]): TPromise; $registerDocumentLinkProvider(handle: number, selector: vscode.DocumentSelector): TPromise; $registerColorFormats(formats: IRawColorFormatMap): TPromise; diff --git a/src/vs/workbench/api/node/extHostLanguageFeatures.ts b/src/vs/workbench/api/node/extHostLanguageFeatures.ts index 49800798ce8..b877218b528 100644 --- a/src/vs/workbench/api/node/extHostLanguageFeatures.ts +++ b/src/vs/workbench/api/node/extHostLanguageFeatures.ts @@ -469,6 +469,10 @@ class RenameAdapter { class SuggestAdapter { + static supportsResolving(provider: vscode.CompletionItemProvider): boolean { + return typeof provider.resolveCompletionItem === 'function'; + } + private _documents: ExtHostDocuments; private _commands: CommandsConverter; private _provider: vscode.CompletionItemProvider; @@ -1002,7 +1006,7 @@ export class ExtHostLanguageFeatures implements ExtHostLanguageFeaturesShape { registerCompletionItemProvider(selector: vscode.DocumentSelector, provider: vscode.CompletionItemProvider, triggerCharacters: string[]): vscode.Disposable { const handle = this._nextHandle(); this._adapter.set(handle, new SuggestAdapter(this._documents, this._commands.converter, provider)); - this._proxy.$registerSuggestSupport(handle, selector, triggerCharacters); + this._proxy.$registerSuggestSupport(handle, selector, triggerCharacters, SuggestAdapter.supportsResolving(provider)); return this._createDisposable(handle); }