From b6c2ea092d86ac506489e2e5448a6094d0386db5 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Tue, 14 Apr 2020 13:55:08 -0700 Subject: [PATCH] Add experimental trigger reason to ts server protocol For https://github.com/microsoft/TypeScript/issues/35096 --- .../src/features/refactor.ts | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/extensions/typescript-language-features/src/features/refactor.ts b/extensions/typescript-language-features/src/features/refactor.ts index e9683e51ba2..39de21a6feb 100644 --- a/extensions/typescript-language-features/src/features/refactor.ts +++ b/extensions/typescript-language-features/src/features/refactor.ts @@ -19,10 +19,24 @@ import FormattingOptionsManager from './fileConfigurationManager'; const localize = nls.loadMessageBundle(); -interface RefactorActionInfo extends Proto.RefactorActionInfo { - error?: string + +namespace Experimental { + export interface RefactorActionInfo extends Proto.RefactorActionInfo { + readonly error?: string + } + + export type RefactorTriggerReason = RefactorInvokedReason; + + export interface RefactorInvokedReason { + readonly kind: 'invoked'; + } + + export interface GetApplicableRefactorsRequestArgs extends Proto.FileRangeRequestArgs { + readonly triggerReason?: RefactorTriggerReason; + } } + class ApplyRefactoringCommand implements Command { public static readonly ID = '_typescript.applyRefactoring'; public readonly id = ApplyRefactoringCommand.ID; @@ -244,7 +258,10 @@ class TypeScriptRefactorProvider implements vscode.CodeActionProvider { } this.formattingOptionsManager.ensureConfigurationForDocument(document, token); - const args: Proto.GetApplicableRefactorsRequestArgs = typeConverters.Range.toFileRangeRequestArgs(file, rangeOrSelection); + const args: Experimental.GetApplicableRefactorsRequestArgs = { + ...typeConverters.Range.toFileRangeRequestArgs(file, rangeOrSelection), + triggerReason: this.toTsTriggerReason(context), + }; return this.client.execute('getApplicableRefactors', args, token); }); if (response?.type !== 'response' || !response.body) { @@ -258,6 +275,13 @@ class TypeScriptRefactorProvider implements vscode.CodeActionProvider { return this.appendInvalidActions(actions); } + private toTsTriggerReason(context: vscode.CodeActionContext): Experimental.RefactorInvokedReason | undefined { + if (!context.only) { + return; + } + return { kind: 'invoked' }; + } + private convertApplicableRefactors( body: Proto.ApplicableRefactorInfo[], document: vscode.TextDocument, @@ -283,7 +307,7 @@ class TypeScriptRefactorProvider implements vscode.CodeActionProvider { } private refactorActionToCodeAction( - action: RefactorActionInfo, + action: Experimental.RefactorActionInfo, document: vscode.TextDocument, info: Proto.ApplicableRefactorInfo, rangeOrSelection: vscode.Range | vscode.Selection,