Skip to content

Commit e578b50

Browse files
committed
Ensure 'workspace/willRenameFiles' is handled only by extension.
- JDT-LS now respects the LSP Spec, and will respond to 'workspace/willRenameFiles' requests handled by vsc-languageserver-node - This extension performs the request manually in order to produce a prompt/dialog allowing a user to select which changes should be applied - To keep this behaviour, and prevent duplicate requests, we must prevent the client from advertising this option to the language server Signed-off-by: Roland Grunberg <rgrunber@redhat.com>
1 parent 9bfd8a8 commit e578b50

1 file changed

Lines changed: 19 additions & 1 deletion

File tree

src/standardLanguageClient.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import * as net from 'net';
44
import * as path from 'path';
55
import { CancellationToken, CodeActionKind, commands, ConfigurationTarget, DocumentSelector, EventEmitter, ExtensionContext, extensions, languages, Location, ProgressLocation, TextEditor, Uri, ViewColumn, window, workspace } from "vscode";
6-
import { ConfigurationParams, ConfigurationRequest, LanguageClientOptions, Location as LSLocation, MessageType, Position as LSPosition, TextDocumentPositionParams, WorkspaceEdit } from "vscode-languageclient";
6+
import { ConfigurationParams, ConfigurationRequest, LanguageClientOptions, Location as LSLocation, MessageType, Position as LSPosition, TextDocumentPositionParams, WorkspaceEdit, StaticFeature, ClientCapabilities, FeatureState } from "vscode-languageclient";
77
import { LanguageClient, StreamInfo } from "vscode-languageclient/node";
88
import { apiManager } from "./apiManager";
99
import * as buildPath from './buildpath';
@@ -107,6 +107,7 @@ export class StandardLanguageClient {
107107

108108
// Create the language client and start the client.
109109
this.languageClient = new TracingLanguageClient('java', extensionName, serverOptions, clientOptions, DEBUG);
110+
this.languageClient.registerFeature(new DisableWillRenameFeature());
110111

111112
this.registerCommandsForStandardServer(context, jdtEventEmitter);
112113
fileEventHandler.registerFileEventHandlers(this.languageClient, context);
@@ -871,4 +872,21 @@ export async function applyWorkspaceEdit(workspaceEdit: WorkspaceEdit, languageC
871872
} else {
872873
return Promise.resolve(true);
873874
}
875+
}
876+
877+
/**
878+
* 'workspace/willRenameFiles' already handled so we need to disable it.
879+
* @see fileEventHandler.registerFileEventHandlers
880+
*/
881+
export class DisableWillRenameFeature implements StaticFeature {
882+
fillClientCapabilities(capabilities: ClientCapabilities): void {
883+
capabilities.workspace.fileOperations.willRename = false;
884+
}
885+
getState(): FeatureState {
886+
return null;
887+
}
888+
clear(): void {}
889+
fillInitializeParams?: () => void;
890+
preInitialize?: () => void;
891+
initialize(): void {}
874892
}

0 commit comments

Comments
 (0)