in client/src/common/client.ts [2961:3034]
public constructor(id: string, name: string, clientOptions: LanguageClientOptions) {
this._id = id;
this._name = name;
clientOptions = clientOptions || {};
const markdown = { isTrusted: false, supportHtml: false };
if (clientOptions.markdown !== undefined) {
markdown.isTrusted = clientOptions.markdown.isTrusted === true;
markdown.supportHtml = clientOptions.markdown.supportHtml === true;
}
this._clientOptions = {
documentSelector: clientOptions.documentSelector ?? [],
synchronize: clientOptions.synchronize ?? {},
diagnosticCollectionName: clientOptions.diagnosticCollectionName,
outputChannelName: clientOptions.outputChannelName ?? this._name,
revealOutputChannelOn: clientOptions.revealOutputChannelOn ?? RevealOutputChannelOn.Error,
stdioEncoding: clientOptions.stdioEncoding ?? 'utf8',
initializationOptions: clientOptions.initializationOptions,
initializationFailedHandler: clientOptions.initializationFailedHandler,
progressOnInitialization: !!clientOptions.progressOnInitialization,
errorHandler: clientOptions.errorHandler ?? this.createDefaultErrorHandler(clientOptions.connectionOptions?.maxRestartCount),
middleware: clientOptions.middleware ?? {},
uriConverters: clientOptions.uriConverters,
workspaceFolder: clientOptions.workspaceFolder,
connectionOptions: clientOptions.connectionOptions,
markdown,
diagnosticPullOptions: clientOptions.diagnosticPullOptions ?? { onChange: true, onSave: false }
};
this._clientOptions.synchronize = this._clientOptions.synchronize || {};
this._state = ClientState.Initial;
this._connectionPromise = undefined;
this._resolvedConnection = undefined;
this._initializeResult = undefined;
if (clientOptions.outputChannel) {
this._outputChannel = clientOptions.outputChannel;
this._disposeOutputChannel = false;
} else {
this._outputChannel = undefined;
this._disposeOutputChannel = true;
}
this._traceOutputChannel = clientOptions.traceOutputChannel;
this._listeners = undefined;
this._providers = undefined;
this._diagnostics = undefined;
this._fileEvents = [];
this._fileEventDelayer = new Delayer<void>(250);
this._onReady = new Promise<void>((resolve, reject) => {
this._onReadyCallbacks = new OnReady(resolve, reject);
});
this._onStop = undefined;
this._telemetryEmitter = new Emitter<any>();
this._stateChangeEmitter = new Emitter<StateChangeEvent>();
this._trace = Trace.Off;
this._tracer = {
log: (messageOrDataObject: string | any, data?: string) => {
if (Is.string(messageOrDataObject)) {
this.logTrace(messageOrDataObject, data);
} else {
this.logObjectTrace(messageOrDataObject);
}
},
};
this._c2p = c2p.createConverter(clientOptions.uriConverters ? clientOptions.uriConverters.code2Protocol : undefined);
this._p2c = p2c.createConverter(
clientOptions.uriConverters ? clientOptions.uriConverters.protocol2Code : undefined,
this._clientOptions.markdown.isTrusted,
this._clientOptions.markdown.supportHtml);
this._syncedDocuments = new Map<string, TextDocument>();
this.registerBuiltinFeatures();
}