From c9255aa6ebed358e01605709de28704fa634ada5 Mon Sep 17 00:00:00 2001 From: Alexandru Dima Date: Thu, 28 Jan 2021 21:48:01 +0100 Subject: [PATCH] Fixes microsoft/monaco-editor#2325: Funnel SignatureHelpContext to TypeScript --- src/languageFeatures.ts | 31 +++++++++++++++++++++++++++++-- src/monaco.contribution.ts | 2 +- src/tsWorker.ts | 5 +++-- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/languageFeatures.ts b/src/languageFeatures.ts index 4ac245a9..6a5eb762 100644 --- a/src/languageFeatures.ts +++ b/src/languageFeatures.ts @@ -538,15 +538,42 @@ function tagToString(tag: ts.JSDocTagInfo): string { export class SignatureHelpAdapter extends Adapter implements languages.SignatureHelpProvider { public signatureHelpTriggerCharacters = ['(', ',']; + private static _toSignatureHelpTriggerReason( + context: languages.SignatureHelpContext + ): ts.SignatureHelpTriggerReason { + switch (context.triggerKind) { + case languages.SignatureHelpTriggerKind.TriggerCharacter: + if (context.triggerCharacter) { + if (context.isRetrigger) { + return { kind: 'retrigger', triggerCharacter: context.triggerCharacter as any }; + } else { + return { kind: 'characterTyped', triggerCharacter: context.triggerCharacter as any }; + } + } else { + return { kind: 'invoked' }; + } + + case languages.SignatureHelpTriggerKind.ContentChange: + return context.isRetrigger ? { kind: 'retrigger' } : { kind: 'invoked' }; + + case languages.SignatureHelpTriggerKind.Invoke: + default: + return { kind: 'invoked' }; + } + } + public async provideSignatureHelp( model: editor.ITextModel, position: Position, - token: CancellationToken + token: CancellationToken, + context: languages.SignatureHelpContext ): Promise { const resource = model.uri; const offset = model.getOffsetAt(position); const worker = await this._worker(resource); - const info = await worker.getSignatureHelpItems(resource.toString(), offset); + const info = await worker.getSignatureHelpItems(resource.toString(), offset, { + triggerReason: SignatureHelpAdapter._toSignatureHelpTriggerReason(context) + }); if (!info || model.isDisposed()) { return; diff --git a/src/monaco.contribution.ts b/src/monaco.contribution.ts index 4c98acf7..88da84da 100644 --- a/src/monaco.contribution.ts +++ b/src/monaco.contribution.ts @@ -340,7 +340,7 @@ export interface TypeScriptWorker { * Get signature help items for the item at the given file and position. * @returns `Promise` */ - getSignatureHelpItems(fileName: string, position: number): Promise; + getSignatureHelpItems(fileName: string, position: number, options: any): Promise; /** * Get quick info for the item at the given position in the file. diff --git a/src/tsWorker.ts b/src/tsWorker.ts index 049234ac..eccab5bf 100644 --- a/src/tsWorker.ts +++ b/src/tsWorker.ts @@ -215,9 +215,10 @@ export class TypeScriptWorker implements ts.LanguageServiceHost, ITypeScriptWork async getSignatureHelpItems( fileName: string, - position: number + position: number, + options: ts.SignatureHelpItemsOptions | undefined ): Promise { - return this._languageService.getSignatureHelpItems(fileName, position, undefined); + return this._languageService.getSignatureHelpItems(fileName, position, options); } async getQuickInfoAtPosition(