Skip to content

Commit 14abd06

Browse files
h9jianggopherbot
authored andcommitted
extension/src/language: separate interactive client capability injection
Moving the interactive refactoring related client capability from the Go language client to interactive language client. The Go language client extends interactive language client and the interactive extends the library language client. Each language client will call "super.fillInitializeParams" before injecting related language client capabilities. Change-Id: I855764ffa57697bc37438565766b3ee94f768f23 Reviewed-on: https://go-review.googlesource.com/c/vscode-go/+/780820 LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Auto-Submit: Hongxiang Jiang <hxjiang@golang.org> Reviewed-by: Madeline Kalil <mkalil@google.com>
1 parent 5bcb6c9 commit 14abd06

2 files changed

Lines changed: 24 additions & 5 deletions

File tree

extension/src/language/form.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*--------------------------------------------------------*/
66

77
import * as vscode from 'vscode';
8+
import { InitializeParams } from 'vscode-languageserver-protocol';
89
import { LanguageClient, RequestType, ServerOptions, LanguageClientOptions } from 'vscode-languageclient/node';
910

1011
// ----------------------------------------------------------------------------
@@ -293,6 +294,25 @@ export class InteractiveLanguageClient extends LanguageClient {
293294
super(id, name, serverOptions, clientOptions, forceDebug);
294295
}
295296

297+
/**
298+
* Fills in the LSP initialize parameters during the handshake, and registers
299+
* client capabilities to support interactive refactoring prompts.
300+
*
301+
* @important Subclasses overriding this method must:
302+
* 1. Call `super.fillInitializeParams(params)` first to preserve base client
303+
* configurations.
304+
* 2. Amend or merge properties into `params.capabilities.experimental`
305+
* rather than overwriting the entire field, to prevent erasing the
306+
* interactive capabilities.
307+
*/
308+
protected fillInitializeParams(params: InitializeParams): void {
309+
super.fillInitializeParams(params);
310+
311+
const experimental = params.capabilities.experimental || {};
312+
experimental.interactiveInputTypes = ['bool', 'file', 'enum', 'lazyEnum', 'number', 'string'];
313+
params.capabilities.experimental = experimental;
314+
}
315+
296316
/**
297317
* MAX_RETRY defined the maximum number of user collection allowed for when
298318
* resolving a command.

extension/src/language/goLanguageServer.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import path = require('path');
1414
import semver = require('semver');
1515
import util = require('util');
1616
import vscode = require('vscode');
17-
import { InitializeParams, LSPObject } from 'vscode-languageserver-protocol';
17+
import { InitializeParams } from 'vscode-languageserver-protocol';
1818
import {
1919
CancellationToken,
2020
CloseAction,
@@ -363,10 +363,9 @@ export class GoLanguageClient extends InteractiveLanguageClient implements vscod
363363
// library. Experimental capabilities not used by vscode-languageserver-node
364364
// can be used for custom communication between vscode-go and gopls.
365365
// See https://github.com/microsoft/vscode-languageserver-node/issues/1607
366-
const experimental: LSPObject = {
367-
progressMessageStyles: ['log'],
368-
interactiveInputTypes: ['bool', 'file', 'enum', 'lazyEnum', 'number', 'string']
369-
};
366+
const experimental = (params.capabilities.experimental as any) || {};
367+
experimental.progressMessageStyles = ['log'];
368+
370369
params.capabilities.experimental = experimental;
371370
}
372371
}

0 commit comments

Comments
 (0)