Browse Source

Fixes microsoft/monaco-editor#2325: Funnel SignatureHelpContext to TypeScript

Alexandru Dima 4 years ago
parent
commit
c9255aa6eb
3 changed files with 33 additions and 5 deletions
  1. 29 2
      src/languageFeatures.ts
  2. 1 1
      src/monaco.contribution.ts
  3. 3 2
      src/tsWorker.ts

+ 29 - 2
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<languages.SignatureHelpResult | undefined> {
 		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;

+ 1 - 1
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<typescript.SignatureHelpItems | undefined>`
 	 */
-	getSignatureHelpItems(fileName: string, position: number): Promise<any | undefined>;
+	getSignatureHelpItems(fileName: string, position: number, options: any): Promise<any | undefined>;
 
 	/**
 	 * Get quick info for the item at the given position in the file.

+ 3 - 2
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<ts.SignatureHelpItems | undefined> {
-		return this._languageService.getSignatureHelpItems(fileName, position, undefined);
+		return this._languageService.getSignatureHelpItems(fileName, position, options);
 	}
 
 	async getQuickInfoAtPosition(