diff --git a/src/vs/editor/common/modes.ts b/src/vs/editor/common/modes.ts index 0584508a3878f002f61bd22881c403c308d13c1a..da61c64e070ed2c7882230da4b4384143a1eb40d 100644 --- a/src/vs/editor/common/modes.ts +++ b/src/vs/editor/common/modes.ts @@ -628,6 +628,10 @@ export interface SignatureHelp { activeParameter: number; } +export interface SignatureHelpResult extends IDisposable { + value: SignatureHelp; +} + export enum SignatureHelpTriggerKind { Invoke = 1, TriggerCharacter = 2, @@ -653,7 +657,7 @@ export interface SignatureHelpProvider { /** * Provide help for the signature at the given position and document. */ - provideSignatureHelp(model: model.ITextModel, position: Position, token: CancellationToken, context: SignatureHelpContext): ProviderResult; + provideSignatureHelp(model: model.ITextModel, position: Position, token: CancellationToken, context: SignatureHelpContext): ProviderResult; } /** diff --git a/src/vs/editor/contrib/parameterHints/parameterHintsModel.ts b/src/vs/editor/contrib/parameterHints/parameterHintsModel.ts index d52dc7948493c1b87ef8e7184a0c42c0c86dcec2..c34c68a84a21b9ef5d65fd8f866ace7ea2c30530 100644 --- a/src/vs/editor/contrib/parameterHints/parameterHintsModel.ts +++ b/src/vs/editor/contrib/parameterHints/parameterHintsModel.ts @@ -6,7 +6,7 @@ import { CancelablePromise, createCancelablePromise, Delayer } from 'vs/base/common/async'; import { onUnexpectedError } from 'vs/base/common/errors'; import { Emitter } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; +import { Disposable, MutableDisposable } from 'vs/base/common/lifecycle'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { ICursorSelectionChangedEvent } from 'vs/editor/common/controller/cursorEvents'; import { CharacterSet } from 'vs/editor/common/core/characterClassifier'; @@ -30,7 +30,7 @@ namespace ParameterHintState { export class Pending { readonly type = Type.Pending; constructor( - readonly request: CancelablePromise + readonly request: CancelablePromise ) { } } @@ -54,6 +54,7 @@ export class ParameterHintsModel extends Disposable { private readonly editor: ICodeEditor; private enabled: boolean; private _state: ParameterHintState.State = ParameterHintState.Default; + private readonly _lastSignatureHelpResult = this._register(new MutableDisposable()); private triggerChars = new CharacterSet(); private retriggerChars = new CharacterSet(); @@ -92,7 +93,6 @@ export class ParameterHintsModel extends Disposable { } cancel(silent: boolean = false): void { - this.state = ParameterHintState.Default; this.throttledDelayer.cancel(); @@ -181,14 +181,22 @@ export class ParameterHintsModel extends Disposable { return this.state.request.then(result => { // Check that we are still resolving the correct signature help if (triggerId !== this.triggerId) { + if (result) { + result.dispose(); + } return false; } - if (!result || !result.signatures || result.signatures.length === 0) { + if (!result || !result.value.signatures || result.value.signatures.length === 0) { + if (result) { + result.dispose(); + } + this._lastSignatureHelpResult.clear(); this.cancel(); return false; } else { - this.state = new ParameterHintState.Active(result); + this.state = new ParameterHintState.Active(result.value); + this._lastSignatureHelpResult.value = result; this._onChangedHints.fire(this.state.hints); return true; } diff --git a/src/vs/editor/contrib/parameterHints/provideSignatureHelp.ts b/src/vs/editor/contrib/parameterHints/provideSignatureHelp.ts index 87ea878abfddf81638c65d88726b801f09ccc8a0..8aaf09f8b6f42dc07ed6966d7054f7e886147561 100644 --- a/src/vs/editor/contrib/parameterHints/provideSignatureHelp.ts +++ b/src/vs/editor/contrib/parameterHints/provideSignatureHelp.ts @@ -17,18 +17,32 @@ export const Context = { MultipleSignatures: new RawContextKey('parameterHintsMultipleSignatures', false), }; -export function provideSignatureHelp(model: ITextModel, position: Position, context: modes.SignatureHelpContext, token: CancellationToken): Promise { +export function provideSignatureHelp( + model: ITextModel, + position: Position, + context: modes.SignatureHelpContext, + token: CancellationToken +): Promise { const supports = modes.SignatureHelpProviderRegistry.ordered(model); return first(supports.map(support => () => { - return Promise.resolve(support.provideSignatureHelp(model, position, token, context)).catch(onUnexpectedExternalError); + return Promise.resolve(support.provideSignatureHelp(model, position, token, context)) + .catch(e => onUnexpectedExternalError(e)); })); } -registerDefaultLanguageCommand('_executeSignatureHelpProvider', (model, position, args) => - provideSignatureHelp(model, position, { +registerDefaultLanguageCommand('_executeSignatureHelpProvider', async (model, position, args) => { + const result = await provideSignatureHelp(model, position, { triggerKind: modes.SignatureHelpTriggerKind.Invoke, isRetrigger: false, triggerCharacter: args['triggerCharacter'] - }, CancellationToken.None)); + }, CancellationToken.None); + + if (!result) { + return undefined; + } + + setTimeout(() => result.dispose(), 0); + return result.value; +}); diff --git a/src/vs/editor/contrib/parameterHints/test/parameterHintsModel.test.ts b/src/vs/editor/contrib/parameterHints/test/parameterHintsModel.test.ts index 8ccff16267a37b6a297a9ca8a88614cfe6af3548..a6ffca40e2025858f1521d1ae16f69628340e9a8 100644 --- a/src/vs/editor/contrib/parameterHints/test/parameterHintsModel.test.ts +++ b/src/vs/editor/contrib/parameterHints/test/parameterHintsModel.test.ts @@ -23,7 +23,7 @@ const mockFile = URI.parse('test:somefile.ttt'); const mockFileSelector = { scheme: 'test' }; -const emptySigHelpResult = { +const emptySigHelp: modes.SignatureHelp = { signatures: [{ label: 'none', parameters: [] @@ -31,6 +31,12 @@ const emptySigHelpResult = { activeParameter: 0, activeSignature: 0 }; + +const emptySigHelpResult: modes.SignatureHelpResult = { + value: emptySigHelp, + dispose: () => { } +}; + suite('ParameterHintsModel', () => { const disposables = new DisposableStore(); @@ -88,7 +94,7 @@ suite('ParameterHintsModel', () => { signatureHelpTriggerCharacters = [triggerChar]; signatureHelpRetriggerCharacters = []; - provideSignatureHelp(_model: ITextModel, _position: Position, _token: CancellationToken, context: modes.SignatureHelpContext): modes.SignatureHelp | Promise { + provideSignatureHelp(_model: ITextModel, _position: Position, _token: CancellationToken, context: modes.SignatureHelpContext): modes.SignatureHelpResult | Promise { ++invokeCount; if (invokeCount === 1) { assert.strictEqual(context.triggerKind, modes.SignatureHelpTriggerKind.TriggerCharacter); @@ -103,7 +109,7 @@ suite('ParameterHintsModel', () => { assert.strictEqual(context.triggerKind, modes.SignatureHelpTriggerKind.TriggerCharacter); assert.strictEqual(context.isRetrigger, true); assert.strictEqual(context.triggerCharacter, triggerChar); - assert.strictEqual(context.activeSignatureHelp, emptySigHelpResult); + assert.strictEqual(context.activeSignatureHelp, emptySigHelp); done(); } @@ -126,7 +132,7 @@ suite('ParameterHintsModel', () => { signatureHelpTriggerCharacters = [triggerChar]; signatureHelpRetriggerCharacters = []; - provideSignatureHelp(_model: ITextModel, _position: Position, _token: CancellationToken, context: modes.SignatureHelpContext): modes.SignatureHelp | Promise { + provideSignatureHelp(_model: ITextModel, _position: Position, _token: CancellationToken, context: modes.SignatureHelpContext): modes.SignatureHelpResult | Promise { ++invokeCount; if (invokeCount === 1) { assert.strictEqual(context.triggerKind, modes.SignatureHelpTriggerKind.TriggerCharacter); @@ -192,7 +198,7 @@ suite('ParameterHintsModel', () => { signatureHelpTriggerCharacters = ['a', 'b']; signatureHelpRetriggerCharacters = []; - provideSignatureHelp(_model: ITextModel, _position: Position, _token: CancellationToken, context: modes.SignatureHelpContext): modes.SignatureHelp | Promise { + provideSignatureHelp(_model: ITextModel, _position: Position, _token: CancellationToken, context: modes.SignatureHelpContext): modes.SignatureHelpResult | Promise { ++invokeCount; if (invokeCount === 1) { assert.strictEqual(context.triggerKind, modes.SignatureHelpTriggerKind.TriggerCharacter); @@ -227,7 +233,7 @@ suite('ParameterHintsModel', () => { signatureHelpRetriggerCharacters = []; - provideSignatureHelp(_model: ITextModel, _position: Position, token: CancellationToken): modes.SignatureHelp | Promise { + provideSignatureHelp(_model: ITextModel, _position: Position, token: CancellationToken): modes.SignatureHelpResult | Promise { const count = invokeCount++; token.onCancellationRequested(() => { didRequestCancellationOf = count; }); @@ -236,15 +242,18 @@ suite('ParameterHintsModel', () => { hintsModel.trigger({ triggerKind: modes.SignatureHelpTriggerKind.Invoke }, 0); } - return new Promise(resolve => { + return new Promise(resolve => { setTimeout(() => { resolve({ - signatures: [{ - label: '' + count, - parameters: [] - }], - activeParameter: 0, - activeSignature: 0 + value: { + signatures: [{ + label: '' + count, + parameters: [] + }], + activeParameter: 0, + activeSignature: 0 + }, + dispose: () => { } }); }, 100); }); @@ -280,7 +289,7 @@ suite('ParameterHintsModel', () => { signatureHelpTriggerCharacters = [triggerChar]; signatureHelpRetriggerCharacters = [retriggerChar]; - provideSignatureHelp(_model: ITextModel, _position: Position, _token: CancellationToken, context: modes.SignatureHelpContext): modes.SignatureHelp | Promise { + provideSignatureHelp(_model: ITextModel, _position: Position, _token: CancellationToken, context: modes.SignatureHelpContext): modes.SignatureHelpResult | Promise { ++invokeCount; if (invokeCount === 1) { assert.strictEqual(context.triggerKind, modes.SignatureHelpTriggerKind.TriggerCharacter); @@ -322,20 +331,23 @@ suite('ParameterHintsModel', () => { signatureHelpTriggerCharacters = [triggerChar]; signatureHelpRetriggerCharacters = []; - async provideSignatureHelp(_model: ITextModel, _position: Position, _token: CancellationToken, context: modes.SignatureHelpContext): Promise { + async provideSignatureHelp(_model: ITextModel, _position: Position, _token: CancellationToken, context: modes.SignatureHelpContext): Promise { if (!context.isRetrigger) { // retrigger after delay for widget to show up setTimeout(() => editor.trigger('keyboard', Handler.Type, { text: triggerChar }), 50); return { - activeParameter: 0, - activeSignature: 0, - signatures: [{ - label: firstProviderId, - parameters: [ - { label: paramterLabel } - ] - }] + value: { + activeParameter: 0, + activeSignature: 0, + signatures: [{ + label: firstProviderId, + parameters: [ + { label: paramterLabel } + ] + }] + }, + dispose: () => { } }; } @@ -347,15 +359,18 @@ suite('ParameterHintsModel', () => { signatureHelpTriggerCharacters = [triggerChar]; signatureHelpRetriggerCharacters = []; - async provideSignatureHelp(_model: ITextModel, _position: Position, _token: CancellationToken, context: modes.SignatureHelpContext): Promise { + async provideSignatureHelp(_model: ITextModel, _position: Position, _token: CancellationToken, context: modes.SignatureHelpContext): Promise { if (context.isRetrigger) { return { - activeParameter: 0, - activeSignature: context.activeSignatureHelp ? context.activeSignatureHelp.activeSignature + 1 : 0, - signatures: [{ - label: secondProviderId, - parameters: context.activeSignatureHelp ? context.activeSignatureHelp.signatures[0].parameters : [] - }] + value: { + activeParameter: 0, + activeSignature: context.activeSignatureHelp ? context.activeSignatureHelp.activeSignature + 1 : 0, + signatures: [{ + label: secondProviderId, + parameters: context.activeSignatureHelp ? context.activeSignatureHelp.signatures[0].parameters : [] + }] + }, + dispose: () => { } }; } @@ -365,23 +380,23 @@ suite('ParameterHintsModel', () => { editor.trigger('keyboard', Handler.Type, { text: triggerChar }); - const firstHint = await getNextHint(model); - assert.strictEqual(firstHint!.signatures[0].label, firstProviderId); - assert.strictEqual(firstHint!.activeSignature, 0); - assert.strictEqual(firstHint!.signatures[0].parameters[0].label, paramterLabel); + const firstHint = (await getNextHint(model))!.value; + assert.strictEqual(firstHint.signatures[0].label, firstProviderId); + assert.strictEqual(firstHint.activeSignature, 0); + assert.strictEqual(firstHint.signatures[0].parameters[0].label, paramterLabel); - const secondHint = await getNextHint(model); - assert.strictEqual(secondHint!.signatures[0].label, secondProviderId); - assert.strictEqual(secondHint!.activeSignature, 1); - assert.strictEqual(secondHint!.signatures[0].parameters[0].label, paramterLabel); + const secondHint = (await getNextHint(model))!.value; + assert.strictEqual(secondHint.signatures[0].label, secondProviderId); + assert.strictEqual(secondHint.activeSignature, 1); + assert.strictEqual(secondHint.signatures[0].parameters[0].label, paramterLabel); }); }); function getNextHint(model: ParameterHintsModel) { - return new Promise(resolve => { + return new Promise(resolve => { const sub = model.onChangedHints(e => { sub.dispose(); - return resolve(e); + return resolve(e ? { value: e, dispose: () => { } } : undefined); }); }); } diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index c292ab5e9d0a5bab32d77ef4429c26b1a4abb3ba..34e8a703be45188b5849745330a4eb67688e9d39 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -4957,6 +4957,10 @@ declare namespace monaco.languages { activeParameter: number; } + export interface SignatureHelpResult extends IDisposable { + value: SignatureHelp; + } + export enum SignatureHelpTriggerKind { Invoke = 1, TriggerCharacter = 2, @@ -4980,7 +4984,7 @@ declare namespace monaco.languages { /** * Provide help for the signature at the given position and document. */ - provideSignatureHelp(model: editor.ITextModel, position: Position, token: CancellationToken, context: SignatureHelpContext): ProviderResult; + provideSignatureHelp(model: editor.ITextModel, position: Position, token: CancellationToken, context: SignatureHelpContext): ProviderResult; } /** diff --git a/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts b/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts index 5b25bf022575c238449d68001ee85c1a5e16602a..1b55da3d731d60cc5b39420176d867547f6d1167 100644 --- a/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts +++ b/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts @@ -384,8 +384,17 @@ export class MainThreadLanguageFeatures implements MainThreadLanguageFeaturesSha signatureHelpTriggerCharacters: metadata.triggerCharacters, signatureHelpRetriggerCharacters: metadata.retriggerCharacters, - provideSignatureHelp: (model: ITextModel, position: EditorPosition, token: CancellationToken, context: modes.SignatureHelpContext): Promise => { - return this._proxy.$provideSignatureHelp(handle, model.uri, position, context, token); + provideSignatureHelp: async (model: ITextModel, position: EditorPosition, token: CancellationToken, context: modes.SignatureHelpContext): Promise => { + const result = await this._proxy.$provideSignatureHelp(handle, model.uri, position, context, token); + if (!result) { + return undefined; + } + return { + value: result, + dispose: () => { + this._proxy.$releaseSignatureHelp(handle, result.id); + } + }; } }); } diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index ae81362612060ad789166952f6c422aa57104d8a..00249585adadc9ca748fdace8836031d7da8af37 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -922,6 +922,20 @@ export interface SuggestResultDto { c?: boolean; } +export interface SignatureHelpDto { + id: CacheId; + signatures: modes.SignatureInformation[]; + activeSignature: number; + activeParameter: number; +} + +export interface SignatureHelpContextDto { + readonly triggerKind: modes.SignatureHelpTriggerKind; + readonly triggerCharacter?: string; + readonly isRetrigger: boolean; + readonly activeSignatureHelp?: SignatureHelpDto; +} + export interface LocationDto { uri: UriComponents; range: IRange; @@ -1060,7 +1074,8 @@ export interface ExtHostLanguageFeaturesShape { $provideCompletionItems(handle: number, resource: UriComponents, position: IPosition, context: modes.CompletionContext, token: CancellationToken): Promise; $resolveCompletionItem(handle: number, resource: UriComponents, position: IPosition, id: ChainedCacheId, token: CancellationToken): Promise; $releaseCompletionItems(handle: number, id: number): void; - $provideSignatureHelp(handle: number, resource: UriComponents, position: IPosition, context: modes.SignatureHelpContext, token: CancellationToken): Promise; + $provideSignatureHelp(handle: number, resource: UriComponents, position: IPosition, context: modes.SignatureHelpContext, token: CancellationToken): Promise; + $releaseSignatureHelp(handle: number, id: number): void; $provideDocumentLinks(handle: number, resource: UriComponents, token: CancellationToken): Promise; $resolveDocumentLink(handle: number, id: ChainedCacheId, token: CancellationToken): Promise; $releaseDocumentLinks(handle: number, id: number): void; diff --git a/src/vs/workbench/api/common/extHostLanguageFeatures.ts b/src/vs/workbench/api/common/extHostLanguageFeatures.ts index e962967ee8b455d0f32d68c018d8fda93e6fc9be..661e98948c92250b79858fd2d31f48283a4e9927 100644 --- a/src/vs/workbench/api/common/extHostLanguageFeatures.ts +++ b/src/vs/workbench/api/common/extHostLanguageFeatures.ts @@ -10,12 +10,11 @@ import * as typeConvert from 'vs/workbench/api/common/extHostTypeConverters'; import { Range, Disposable, CompletionList, SnippetString, CodeActionKind, SymbolInformation, DocumentSymbol } from 'vs/workbench/api/common/extHostTypes'; import { ISingleEditOperation } from 'vs/editor/common/model'; import * as modes from 'vs/editor/common/modes'; -import { ExtHostHeapService } from 'vs/workbench/api/common/extHostHeapService'; import { ExtHostDocuments } from 'vs/workbench/api/common/extHostDocuments'; import { ExtHostCommands, CommandsConverter } from 'vs/workbench/api/common/extHostCommands'; import { ExtHostDiagnostics } from 'vs/workbench/api/common/extHostDiagnostics'; import { asPromise } from 'vs/base/common/async'; -import { MainContext, MainThreadLanguageFeaturesShape, ExtHostLanguageFeaturesShape, ObjectIdentifier, IRawColorInfo, IMainContext, IdObject, ISerializedRegExp, ISerializedIndentationRule, ISerializedOnEnterRule, ISerializedLanguageConfiguration, WorkspaceSymbolDto, SuggestResultDto, WorkspaceSymbolsDto, CodeActionDto, ISerializedDocumentFilter, WorkspaceEditDto, ISerializedSignatureHelpProviderMetadata, LinkDto, CodeLensDto, SuggestDataDto, LinksListDto, ChainedCacheId, CodeLensListDto, CodeActionListDto } from './extHost.protocol'; +import { MainContext, MainThreadLanguageFeaturesShape, ExtHostLanguageFeaturesShape, IRawColorInfo, IMainContext, IdObject, ISerializedRegExp, ISerializedIndentationRule, ISerializedOnEnterRule, ISerializedLanguageConfiguration, WorkspaceSymbolDto, SuggestResultDto, WorkspaceSymbolsDto, CodeActionDto, ISerializedDocumentFilter, WorkspaceEditDto, ISerializedSignatureHelpProviderMetadata, LinkDto, CodeLensDto, SuggestDataDto, LinksListDto, ChainedCacheId, CodeLensListDto, CodeActionListDto, SignatureHelpDto, SignatureHelpContextDto } from './extHost.protocol'; import { regExpLeadsToEndlessLoop, regExpFlags } from 'vs/base/common/strings'; import { IPosition } from 'vs/editor/common/core/position'; import { IRange, Range as EditorRange } from 'vs/editor/common/core/range'; @@ -771,31 +770,32 @@ class SuggestAdapter { class SignatureHelpAdapter { + private readonly _cache = new Cache(); + constructor( private readonly _documents: ExtHostDocuments, private readonly _provider: vscode.SignatureHelpProvider, - private readonly _heap: ExtHostHeapService, ) { } - provideSignatureHelp(resource: URI, position: IPosition, context: modes.SignatureHelpContext, token: CancellationToken): Promise { + provideSignatureHelp(resource: URI, position: IPosition, context: SignatureHelpContextDto, token: CancellationToken): Promise { const doc = this._documents.getDocument(resource); const pos = typeConvert.Position.to(position); const vscodeContext = this.reviveContext(context); return asPromise(() => this._provider.provideSignatureHelp(doc, pos, token, vscodeContext)).then(value => { if (value) { - const id = this._heap.keep(value); - return ObjectIdentifier.mixin(typeConvert.SignatureHelp.from(value), id); + const id = this._cache.add([value]); + return { ...typeConvert.SignatureHelp.from(value), id }; } return undefined; }); } - private reviveContext(context: modes.SignatureHelpContext): vscode.SignatureHelpContext { + private reviveContext(context: SignatureHelpContextDto): vscode.SignatureHelpContext { let activeSignatureHelp: vscode.SignatureHelp | undefined = undefined; if (context.activeSignatureHelp) { const revivedSignatureHelp = typeConvert.SignatureHelp.to(context.activeSignatureHelp); - const saved = this._heap.get(ObjectIdentifier.of(context.activeSignatureHelp)); + const saved = this._cache.get(context.activeSignatureHelp.id, 0); if (saved) { activeSignatureHelp = saved; activeSignatureHelp.activeSignature = revivedSignatureHelp.activeSignature; @@ -806,6 +806,10 @@ class SignatureHelpAdapter { } return { ...context, activeSignatureHelp }; } + + releaseSignatureHelp(id: number): any { + this._cache.delete(id); + } } class Cache { @@ -1065,7 +1069,6 @@ export class ExtHostLanguageFeatures implements ExtHostLanguageFeaturesShape { private _proxy: MainThreadLanguageFeaturesShape; private _documents: ExtHostDocuments; private _commands: ExtHostCommands; - private _heapService: ExtHostHeapService; private _diagnostics: ExtHostDiagnostics; private _adapter = new Map(); private readonly _logService: ILogService; @@ -1075,7 +1078,6 @@ export class ExtHostLanguageFeatures implements ExtHostLanguageFeaturesShape { uriTransformer: IURITransformer | null, documents: ExtHostDocuments, commands: ExtHostCommands, - heapMonitor: ExtHostHeapService, diagnostics: ExtHostDiagnostics, logService: ILogService ) { @@ -1083,7 +1085,6 @@ export class ExtHostLanguageFeatures implements ExtHostLanguageFeaturesShape { this._proxy = mainContext.getProxy(MainContext.MainThreadLanguageFeatures); this._documents = documents; this._commands = commands; - this._heapService = heapMonitor; this._diagnostics = diagnostics; this._logService = logService; } @@ -1402,15 +1403,19 @@ export class ExtHostLanguageFeatures implements ExtHostLanguageFeaturesShape { ? { triggerCharacters: metadataOrTriggerChars, retriggerCharacters: [] } : metadataOrTriggerChars; - const handle = this._addNewAdapter(new SignatureHelpAdapter(this._documents, provider, this._heapService), extension); + const handle = this._addNewAdapter(new SignatureHelpAdapter(this._documents, provider), extension); this._proxy.$registerSignatureHelpProvider(handle, this._transformDocumentSelector(selector), metadata); return this._createDisposable(handle); } - $provideSignatureHelp(handle: number, resource: UriComponents, position: IPosition, context: modes.SignatureHelpContext, token: CancellationToken): Promise { + $provideSignatureHelp(handle: number, resource: UriComponents, position: IPosition, context: SignatureHelpContextDto, token: CancellationToken): Promise { return this._withAdapter(handle, SignatureHelpAdapter, adapter => adapter.provideSignatureHelp(URI.revive(resource), position, context, token), undefined); } + $releaseSignatureHelp(handle: number, id: number): void { + this._withAdapter(handle, SignatureHelpAdapter, adapter => adapter.releaseSignatureHelp(id), undefined); + } + // --- links registerDocumentLinkProvider(extension: IExtensionDescription | undefined, selector: vscode.DocumentSelector, provider: vscode.DocumentLinkProvider): vscode.Disposable { diff --git a/src/vs/workbench/api/node/extHost.api.impl.ts b/src/vs/workbench/api/node/extHost.api.impl.ts index 6944f8e767eb9f9f9bde8cfab4f94639c36f5205..e662303e702365a1505a58f0ade48747da98d71e 100644 --- a/src/vs/workbench/api/node/extHost.api.impl.ts +++ b/src/vs/workbench/api/node/extHost.api.impl.ts @@ -112,7 +112,7 @@ export function createApiFactory( rpcProtocol.set(ExtHostContext.ExtHostConfiguration, extHostConfiguration); const extHostEditorInsets = rpcProtocol.set(ExtHostContext.ExtHostEditorInsets, new ExtHostEditorInsets(rpcProtocol.getProxy(MainContext.MainThreadEditorInsets), extHostEditors)); const extHostDiagnostics = rpcProtocol.set(ExtHostContext.ExtHostDiagnostics, new ExtHostDiagnostics(rpcProtocol)); - const extHostLanguageFeatures = rpcProtocol.set(ExtHostContext.ExtHostLanguageFeatures, new ExtHostLanguageFeatures(rpcProtocol, uriTransformer, extHostDocuments, extHostCommands, extHostHeapService, extHostDiagnostics, extHostLogService)); + const extHostLanguageFeatures = rpcProtocol.set(ExtHostContext.ExtHostLanguageFeatures, new ExtHostLanguageFeatures(rpcProtocol, uriTransformer, extHostDocuments, extHostCommands, extHostDiagnostics, extHostLogService)); const extHostFileSystem = rpcProtocol.set(ExtHostContext.ExtHostFileSystem, new ExtHostFileSystem(rpcProtocol, extHostLanguageFeatures)); const extHostFileSystemEvent = rpcProtocol.set(ExtHostContext.ExtHostFileSystemEventService, new ExtHostFileSystemEventService(rpcProtocol, extHostDocumentsAndEditors)); const extHostQuickOpen = rpcProtocol.set(ExtHostContext.ExtHostQuickOpen, new ExtHostQuickOpen(rpcProtocol, extHostWorkspace, extHostCommands)); 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 abc74538e761a86e867bec2bf53e99b88f3a7706..ee6c78be43ecbcb5d01da469f337eb86faec0bc6 100644 --- a/src/vs/workbench/test/electron-browser/api/extHostApiCommands.test.ts +++ b/src/vs/workbench/test/electron-browser/api/extHostApiCommands.test.ts @@ -117,7 +117,7 @@ suite('ExtHostLanguageFeatureCommands', function () { const diagnostics = new ExtHostDiagnostics(rpcProtocol); rpcProtocol.set(ExtHostContext.ExtHostDiagnostics, diagnostics); - extHost = new ExtHostLanguageFeatures(rpcProtocol, null, extHostDocuments, commands, heapService, diagnostics, new NullLogService()); + extHost = new ExtHostLanguageFeatures(rpcProtocol, null, extHostDocuments, commands, diagnostics, new NullLogService()); rpcProtocol.set(ExtHostContext.ExtHostLanguageFeatures, extHost); mainThread = rpcProtocol.set(MainContext.MainThreadLanguageFeatures, inst.createInstance(MainThreadLanguageFeatures, rpcProtocol)); diff --git a/src/vs/workbench/test/electron-browser/api/extHostLanguageFeatures.test.ts b/src/vs/workbench/test/electron-browser/api/extHostLanguageFeatures.test.ts index 19afeb7060967b42c97e8ec28e2c4943152d3156..713720637d24dc153cc89dc6ade4f733f1294692 100644 --- a/src/vs/workbench/test/electron-browser/api/extHostLanguageFeatures.test.ts +++ b/src/vs/workbench/test/electron-browser/api/extHostLanguageFeatures.test.ts @@ -109,7 +109,7 @@ suite('ExtHostLanguageFeatures', function () { const diagnostics = new ExtHostDiagnostics(rpcProtocol); rpcProtocol.set(ExtHostContext.ExtHostDiagnostics, diagnostics); - extHost = new ExtHostLanguageFeatures(rpcProtocol, null, extHostDocuments, commands, heapService, diagnostics, new NullLogService()); + extHost = new ExtHostLanguageFeatures(rpcProtocol, null, extHostDocuments, commands, diagnostics, new NullLogService()); rpcProtocol.set(ExtHostContext.ExtHostLanguageFeatures, extHost); mainThread = rpcProtocol.set(MainContext.MainThreadLanguageFeatures, inst.createInstance(MainThreadLanguageFeatures, rpcProtocol));