in client/src/common/client.ts [3486:3558]
private doInitialize(connection: Connection, initParams: InitializeParams): Promise<InitializeResult> {
return connection.initialize(initParams).then((result) => {
this._resolvedConnection = connection;
this._initializeResult = result;
this.state = ClientState.Running;
let textDocumentSyncOptions: TextDocumentSyncOptions | undefined = undefined;
if (Is.number(result.capabilities.textDocumentSync)) {
if (result.capabilities.textDocumentSync === TextDocumentSyncKind.None) {
textDocumentSyncOptions = {
openClose: false,
change: TextDocumentSyncKind.None,
save: undefined
};
} else {
textDocumentSyncOptions = {
openClose: true,
change: result.capabilities.textDocumentSync,
save: {
includeText: false
}
};
}
} else if (result.capabilities.textDocumentSync !== undefined && result.capabilities.textDocumentSync !== null) {
textDocumentSyncOptions = result.capabilities.textDocumentSync as TextDocumentSyncOptions;
}
this._capabilities = Object.assign({}, result.capabilities, { resolvedTextDocumentSync: textDocumentSyncOptions });
connection.onDiagnostics(params => this.handleDiagnostics(params));
connection.onRequest(RegistrationRequest.type, params => this.handleRegistrationRequest(params));
// See https://github.com/Microsoft/vscode-languageserver-node/issues/199
connection.onRequest('client/registerFeature', params => this.handleRegistrationRequest(params));
connection.onRequest(UnregistrationRequest.type, params => this.handleUnregistrationRequest(params));
// See https://github.com/Microsoft/vscode-languageserver-node/issues/199
connection.onRequest('client/unregisterFeature', params => this.handleUnregistrationRequest(params));
connection.onRequest(ApplyWorkspaceEditRequest.type, params => this.handleApplyWorkspaceEdit(params));
return connection.sendNotification(InitializedNotification.type, {}).then(() => {
this.hookFileEvents(connection);
this.hookConfigurationChanged(connection);
this.initializeFeatures(connection);
this._onReadyCallbacks.resolve();
return result;
});
}).then<InitializeResult>(undefined, (error: any) => {
if (this._clientOptions.initializationFailedHandler) {
if (this._clientOptions.initializationFailedHandler(error)) {
void this.initialize(connection);
} else {
void this.stop();
this._onReadyCallbacks.reject(error);
}
} else if (error instanceof ResponseError && error.data && error.data.retry) {
void Window.showErrorMessage(error.message, { title: 'Retry', id: 'retry' }).then(item => {
if (item && item.id === 'retry') {
void this.initialize(connection);
} else {
void this.stop();
this._onReadyCallbacks.reject(error);
}
});
} else {
if (error && error.message) {
void Window.showErrorMessage(error.message);
}
this.error('Server initialization failed.', error);
void this.stop();
this._onReadyCallbacks.reject(error);
}
throw error;
});
}