@jupyterlab/lsp 4.0.0-alpha.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/adapters/adapter.d.ts +125 -0
- package/lib/adapters/adapter.js +382 -0
- package/lib/adapters/adapter.js.map +1 -0
- package/lib/connection.d.ts +65 -0
- package/lib/connection.js +309 -0
- package/lib/connection.js.map +1 -0
- package/lib/connection_manager.d.ts +71 -0
- package/lib/connection_manager.js +312 -0
- package/lib/connection_manager.js.map +1 -0
- package/lib/extractors/manager.d.ts +13 -0
- package/lib/extractors/manager.js +44 -0
- package/lib/extractors/manager.js.map +1 -0
- package/lib/extractors/text_extractor.d.ts +28 -0
- package/lib/extractors/text_extractor.js +27 -0
- package/lib/extractors/text_extractor.js.map +1 -0
- package/lib/extractors/types.d.ts +65 -0
- package/lib/extractors/types.js +2 -0
- package/lib/extractors/types.js.map +1 -0
- package/lib/feature.d.ts +11 -0
- package/lib/feature.js +31 -0
- package/lib/feature.js.map +1 -0
- package/lib/index.d.ts +17 -0
- package/lib/index.js +22 -0
- package/lib/index.js.map +1 -0
- package/lib/lsp.d.ts +129 -0
- package/lib/lsp.js +125 -0
- package/lib/lsp.js.map +1 -0
- package/lib/manager.d.ts +29 -0
- package/lib/manager.js +130 -0
- package/lib/manager.js.map +1 -0
- package/lib/plugin.d.ts +45 -0
- package/lib/plugin.js +3 -0
- package/lib/plugin.js.map +1 -0
- package/lib/positioning.d.ts +28 -0
- package/lib/positioning.js +49 -0
- package/lib/positioning.js.map +1 -0
- package/lib/schema.d.ts +228 -0
- package/lib/schema.js +3 -0
- package/lib/schema.js.map +1 -0
- package/lib/tokens.d.ts +368 -0
- package/lib/tokens.js +58 -0
- package/lib/tokens.js.map +1 -0
- package/lib/utils.d.ts +18 -0
- package/lib/utils.js +71 -0
- package/lib/utils.js.map +1 -0
- package/lib/virtual/document.d.ts +270 -0
- package/lib/virtual/document.js +600 -0
- package/lib/virtual/document.js.map +1 -0
- package/package.json +75 -0
- package/style/index.css +11 -0
- package/style/index.js +11 -0
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
// Disclaimer/acknowledgement: Fragments are based on LspWsConnection, which is copyright of wylieconlon and contributors and ISC licenced.
|
|
2
|
+
// ISC licence is, quote, "functionally equivalent to the simplified BSD and MIT licenses,
|
|
3
|
+
// but without language deemed unnecessary following the Berne Convention." (Wikipedia).
|
|
4
|
+
// Introduced modifications are BSD licenced, copyright JupyterLab development team.
|
|
5
|
+
import { Signal } from '@lumino/signaling';
|
|
6
|
+
import { LspWsConnection } from 'lsp-ws-connection';
|
|
7
|
+
import { registerServerCapability, unregisterServerCapability } from 'lsp-ws-connection/lib/server-capability-registration';
|
|
8
|
+
import { Method } from './tokens';
|
|
9
|
+
import { untilReady } from './utils';
|
|
10
|
+
class ClientRequestHandler {
|
|
11
|
+
constructor(connection, method, emitter) {
|
|
12
|
+
this.connection = connection;
|
|
13
|
+
this.method = method;
|
|
14
|
+
this.emitter = emitter;
|
|
15
|
+
}
|
|
16
|
+
request(params) {
|
|
17
|
+
// TODO check if is ready?
|
|
18
|
+
this.emitter.log(MessageKind.clientRequested, {
|
|
19
|
+
method: this.method,
|
|
20
|
+
message: params
|
|
21
|
+
});
|
|
22
|
+
return this.connection
|
|
23
|
+
.sendRequest(this.method, params)
|
|
24
|
+
.then((result) => {
|
|
25
|
+
this.emitter.log(MessageKind.resultForClient, {
|
|
26
|
+
method: this.method,
|
|
27
|
+
message: params
|
|
28
|
+
});
|
|
29
|
+
return result;
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
class ServerRequestHandler {
|
|
34
|
+
constructor(connection, method, emitter) {
|
|
35
|
+
this.connection = connection;
|
|
36
|
+
this.method = method;
|
|
37
|
+
this.emitter = emitter;
|
|
38
|
+
// on request accepts "thenable"
|
|
39
|
+
this.connection.onRequest(method, this.handle.bind(this));
|
|
40
|
+
this._handler = null;
|
|
41
|
+
}
|
|
42
|
+
handle(request) {
|
|
43
|
+
this.emitter.log(MessageKind.serverRequested, {
|
|
44
|
+
method: this.method,
|
|
45
|
+
message: request
|
|
46
|
+
});
|
|
47
|
+
if (!this._handler) {
|
|
48
|
+
return new Promise(() => undefined);
|
|
49
|
+
}
|
|
50
|
+
return this._handler(request, this.emitter).then(result => {
|
|
51
|
+
this.emitter.log(MessageKind.responseForServer, {
|
|
52
|
+
method: this.method,
|
|
53
|
+
message: result
|
|
54
|
+
});
|
|
55
|
+
return result;
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
setHandler(handler) {
|
|
59
|
+
this._handler = handler;
|
|
60
|
+
}
|
|
61
|
+
clearHandler() {
|
|
62
|
+
this._handler = null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export const Provider = {
|
|
66
|
+
TEXT_DOCUMENT_SYNC: 'textDocumentSync',
|
|
67
|
+
COMPLETION: 'completionProvider',
|
|
68
|
+
HOVER: 'hoverProvider',
|
|
69
|
+
SIGNATURE_HELP: 'signatureHelpProvider',
|
|
70
|
+
DECLARATION: 'declarationProvider',
|
|
71
|
+
DEFINITION: 'definitionProvider',
|
|
72
|
+
TYPE_DEFINITION: 'typeDefinitionProvider',
|
|
73
|
+
IMPLEMENTATION: 'implementationProvider',
|
|
74
|
+
REFERENCES: 'referencesProvider',
|
|
75
|
+
DOCUMENT_HIGHLIGHT: 'documentHighlightProvider',
|
|
76
|
+
DOCUMENT_SYMBOL: 'documentSymbolProvider',
|
|
77
|
+
CODE_ACTION: 'codeActionProvider',
|
|
78
|
+
CODE_LENS: 'codeLensProvider',
|
|
79
|
+
DOCUMENT_LINK: 'documentLinkProvider',
|
|
80
|
+
COLOR: 'colorProvider',
|
|
81
|
+
DOCUMENT_FORMATTING: 'documentFormattingProvider',
|
|
82
|
+
DOCUMENT_RANGE_FORMATTING: 'documentRangeFormattingProvider',
|
|
83
|
+
DOCUMENT_ON_TYPE_FORMATTING: 'documentOnTypeFormattingProvider',
|
|
84
|
+
RENAME: 'renameProvider',
|
|
85
|
+
FOLDING_RANGE: 'foldingRangeProvider',
|
|
86
|
+
EXECUTE_COMMAND: 'executeCommandProvider',
|
|
87
|
+
SELECTION_RANGE: 'selectionRangeProvider',
|
|
88
|
+
WORKSPACE_SYMBOL: 'workspaceSymbolProvider',
|
|
89
|
+
WORKSPACE: 'workspace'
|
|
90
|
+
};
|
|
91
|
+
function createMethodMap(methods, handlerFactory) {
|
|
92
|
+
const result = {};
|
|
93
|
+
for (let method of Object.values(methods)) {
|
|
94
|
+
result[method] = handlerFactory(method);
|
|
95
|
+
}
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
var MessageKind;
|
|
99
|
+
(function (MessageKind) {
|
|
100
|
+
MessageKind[MessageKind["clientNotifiedServer"] = 0] = "clientNotifiedServer";
|
|
101
|
+
MessageKind[MessageKind["serverNotifiedClient"] = 1] = "serverNotifiedClient";
|
|
102
|
+
MessageKind[MessageKind["serverRequested"] = 2] = "serverRequested";
|
|
103
|
+
MessageKind[MessageKind["clientRequested"] = 3] = "clientRequested";
|
|
104
|
+
MessageKind[MessageKind["resultForClient"] = 4] = "resultForClient";
|
|
105
|
+
MessageKind[MessageKind["responseForServer"] = 5] = "responseForServer";
|
|
106
|
+
})(MessageKind || (MessageKind = {}));
|
|
107
|
+
export class LSPConnection extends LspWsConnection {
|
|
108
|
+
constructor(options) {
|
|
109
|
+
super(options);
|
|
110
|
+
this.closingManually = false;
|
|
111
|
+
this._options = options;
|
|
112
|
+
this.logAllCommunication = false;
|
|
113
|
+
this.serverIdentifier = options.serverIdentifier;
|
|
114
|
+
this.serverLanguage = options.languageId;
|
|
115
|
+
this.documentsToOpen = [];
|
|
116
|
+
this.clientNotifications =
|
|
117
|
+
this.constructNotificationHandlers(Method.ClientNotification);
|
|
118
|
+
this.serverNotifications =
|
|
119
|
+
this.constructNotificationHandlers(Method.ServerNotification);
|
|
120
|
+
}
|
|
121
|
+
log(kind, message) {
|
|
122
|
+
if (this.logAllCommunication) {
|
|
123
|
+
console.log(kind, message);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
constructNotificationHandlers(methods) {
|
|
127
|
+
return createMethodMap(methods, () => new Signal(this));
|
|
128
|
+
}
|
|
129
|
+
constructClientRequestHandler(methods) {
|
|
130
|
+
return createMethodMap(methods, method => new ClientRequestHandler(this.connection, method, this));
|
|
131
|
+
}
|
|
132
|
+
constructServerRequestHandler(methods) {
|
|
133
|
+
return createMethodMap(methods, method => new ServerRequestHandler(this.connection, method, this));
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Initialization parameters to be sent to the language server.
|
|
137
|
+
* Subclasses can overload this when adding more features.
|
|
138
|
+
*/
|
|
139
|
+
initializeParams() {
|
|
140
|
+
return Object.assign(Object.assign({}, super.initializeParams()), {
|
|
141
|
+
// TODO: remove as `lsp.ClientCapabilities` after upgrading to 3.17
|
|
142
|
+
// which should finally include a fix for moniker issue:
|
|
143
|
+
// https://github.com/microsoft/vscode-languageserver-node/pull/720
|
|
144
|
+
capabilities: this._options.capabilities, initializationOptions: null, processId: null, workspaceFolders: null });
|
|
145
|
+
}
|
|
146
|
+
sendOpenWhenReady(documentInfo) {
|
|
147
|
+
if (this.isReady) {
|
|
148
|
+
this.sendOpen(documentInfo);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
this.documentsToOpen.push(documentInfo);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
onServerInitialized(params) {
|
|
155
|
+
this.afterInitialized();
|
|
156
|
+
super.onServerInitialized(params);
|
|
157
|
+
while (this.documentsToOpen.length) {
|
|
158
|
+
this.sendOpen(this.documentsToOpen.pop());
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
afterInitialized() {
|
|
162
|
+
for (const method of Object.values(Method.ServerNotification)) {
|
|
163
|
+
const signal = this.serverNotifications[method];
|
|
164
|
+
this.connection.onNotification(method, params => {
|
|
165
|
+
this.log(MessageKind.serverNotifiedClient, {
|
|
166
|
+
method,
|
|
167
|
+
message: params
|
|
168
|
+
});
|
|
169
|
+
signal.emit(params);
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
for (const method of Object.values(Method.ClientNotification)) {
|
|
173
|
+
const signal = this.clientNotifications[method];
|
|
174
|
+
signal.connect((emitter, params) => {
|
|
175
|
+
this.log(MessageKind.clientNotifiedServer, {
|
|
176
|
+
method,
|
|
177
|
+
message: params
|
|
178
|
+
});
|
|
179
|
+
this.connection.sendNotification(method, params);
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
this.clientRequests = this.constructClientRequestHandler(Method.ClientRequest);
|
|
183
|
+
this.serverRequests = this.constructServerRequestHandler(Method.ServerRequest);
|
|
184
|
+
this.serverRequests['client/registerCapability'].setHandler(async (params) => {
|
|
185
|
+
params.registrations.forEach((capabilityRegistration) => {
|
|
186
|
+
try {
|
|
187
|
+
const updatedCapabilities = registerServerCapability(this.serverCapabilities, capabilityRegistration);
|
|
188
|
+
if (updatedCapabilities === null) {
|
|
189
|
+
console.error(`Failed to register server capability: ${capabilityRegistration}`);
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
this.serverCapabilities = updatedCapabilities;
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
console.error(err);
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
this.serverRequests['client/unregisterCapability'].setHandler(async (params) => {
|
|
200
|
+
params.unregisterations.forEach((capabilityUnregistration) => {
|
|
201
|
+
this.serverCapabilities = unregisterServerCapability(this.serverCapabilities, capabilityUnregistration);
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
this.serverRequests['workspace/configuration'].setHandler(async (params) => {
|
|
205
|
+
return params.items.map(item => {
|
|
206
|
+
// LSP: "If the client can’t provide a configuration setting for a given scope
|
|
207
|
+
// then `null` needs to be present in the returned array."
|
|
208
|
+
// for now we do not support configuration, but yaml server does not respect
|
|
209
|
+
// client capability so we have a handler just for that
|
|
210
|
+
return null;
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
sendSelectiveChange(changeEvent, documentInfo) {
|
|
215
|
+
this._sendChange([changeEvent], documentInfo);
|
|
216
|
+
}
|
|
217
|
+
sendFullTextChange(text, documentInfo) {
|
|
218
|
+
this._sendChange([{ text }], documentInfo);
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* @deprecated The method should not be used in new code. Use provides() instead.
|
|
222
|
+
*/
|
|
223
|
+
isRenameSupported() {
|
|
224
|
+
return !!(this.serverCapabilities && this.serverCapabilities.renameProvider);
|
|
225
|
+
}
|
|
226
|
+
provides(provider) {
|
|
227
|
+
return !!(this.serverCapabilities && this.serverCapabilities[provider]);
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* @deprecated The method should not be used in new code
|
|
231
|
+
*/
|
|
232
|
+
async rename(location, documentInfo, newName, emit = true) {
|
|
233
|
+
if (!this.isReady || !this.isRenameSupported()) {
|
|
234
|
+
return null;
|
|
235
|
+
}
|
|
236
|
+
const params = {
|
|
237
|
+
textDocument: {
|
|
238
|
+
uri: documentInfo.uri
|
|
239
|
+
},
|
|
240
|
+
position: {
|
|
241
|
+
line: location.line,
|
|
242
|
+
character: location.ch
|
|
243
|
+
},
|
|
244
|
+
newName
|
|
245
|
+
};
|
|
246
|
+
const edit = await this.connection.sendRequest('textDocument/rename', params);
|
|
247
|
+
if (emit) {
|
|
248
|
+
this.emit('renamed', edit);
|
|
249
|
+
}
|
|
250
|
+
return edit;
|
|
251
|
+
}
|
|
252
|
+
connect(socket) {
|
|
253
|
+
super.connect(socket);
|
|
254
|
+
untilReady(() => {
|
|
255
|
+
return this.isConnected;
|
|
256
|
+
}, -1)
|
|
257
|
+
.then(() => {
|
|
258
|
+
this.connection.onClose(() => {
|
|
259
|
+
this.isConnected = false;
|
|
260
|
+
this.emit('close', this.closingManually);
|
|
261
|
+
});
|
|
262
|
+
})
|
|
263
|
+
.catch(() => {
|
|
264
|
+
console.error('Could not connect onClose signal');
|
|
265
|
+
});
|
|
266
|
+
return this;
|
|
267
|
+
}
|
|
268
|
+
close() {
|
|
269
|
+
try {
|
|
270
|
+
this.closingManually = true;
|
|
271
|
+
super.close();
|
|
272
|
+
}
|
|
273
|
+
catch (e) {
|
|
274
|
+
this.closingManually = false;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
_sendChange(changeEvents, documentInfo) {
|
|
278
|
+
if (!this.isReady) {
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
if (!this.openedUris.get(documentInfo.uri)) {
|
|
282
|
+
this.sendOpen(documentInfo);
|
|
283
|
+
}
|
|
284
|
+
const textDocumentChange = {
|
|
285
|
+
textDocument: {
|
|
286
|
+
uri: documentInfo.uri,
|
|
287
|
+
version: documentInfo.version
|
|
288
|
+
},
|
|
289
|
+
contentChanges: changeEvents
|
|
290
|
+
};
|
|
291
|
+
this.connection.sendNotification('textDocument/didChange', textDocumentChange);
|
|
292
|
+
documentInfo.version++;
|
|
293
|
+
}
|
|
294
|
+
async getCompletionResolve(completionItem) {
|
|
295
|
+
if (!this.isReady || !this.isCompletionResolveProvider()) {
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
return this.connection.sendRequest('completionItem/resolve', completionItem);
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Does support completionItem/resolve?
|
|
302
|
+
* @deprecated The method should not be used in new code
|
|
303
|
+
*/
|
|
304
|
+
isCompletionResolveProvider() {
|
|
305
|
+
var _a, _b;
|
|
306
|
+
return (((_b = (_a = this.serverCapabilities) === null || _a === void 0 ? void 0 : _a.completionProvider) === null || _b === void 0 ? void 0 : _b.resolveProvider) || false);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
//# sourceMappingURL=connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { IDocumentWidget } from '@jupyterlab/docregistry';
|
|
2
|
+
import { Signal } from '@lumino/signaling';
|
|
3
|
+
import { WidgetAdapter } from './adapters/adapter';
|
|
4
|
+
import { LSPConnection } from './connection';
|
|
5
|
+
import { AskServersToSendTraceNotifications } from './plugin';
|
|
6
|
+
import { IDocumentConnectionData, ILanguageServerManager, ILSPConnection, ILSPDocumentConnectionManager, ISocketConnectionOptions, TLanguageServerConfigurations, TLanguageServerId } from './tokens';
|
|
7
|
+
import { IForeignContext, VirtualDocument } from './virtual/document';
|
|
8
|
+
/**
|
|
9
|
+
* Each Widget with a document (whether file or a notebook) has the same DocumentConnectionManager
|
|
10
|
+
* (see JupyterLabWidgetAdapter). Using id_path instead of uri led to documents being overwritten
|
|
11
|
+
* as two identical id_paths could be created for two different notebooks.
|
|
12
|
+
*/
|
|
13
|
+
export declare class DocumentConnectionManager implements ILSPDocumentConnectionManager {
|
|
14
|
+
connections: Map<VirtualDocument.uri, LSPConnection>;
|
|
15
|
+
adapters: Map<string, WidgetAdapter<IDocumentWidget>>;
|
|
16
|
+
documents: Map<VirtualDocument.uri, VirtualDocument>;
|
|
17
|
+
initialized: Signal<ILSPDocumentConnectionManager, IDocumentConnectionData>;
|
|
18
|
+
connected: Signal<ILSPDocumentConnectionManager, IDocumentConnectionData>;
|
|
19
|
+
/**
|
|
20
|
+
* Connection temporarily lost or could not be fully established; a re-connection will be attempted;
|
|
21
|
+
*/
|
|
22
|
+
disconnected: Signal<ILSPDocumentConnectionManager, IDocumentConnectionData>;
|
|
23
|
+
/**
|
|
24
|
+
* Connection was closed permanently and no-reconnection will be attempted, e.g.:
|
|
25
|
+
* - there was a serious server error
|
|
26
|
+
* - user closed the connection,
|
|
27
|
+
* - re-connection attempts exceeded,
|
|
28
|
+
*/
|
|
29
|
+
closed: Signal<ILSPDocumentConnectionManager, IDocumentConnectionData>;
|
|
30
|
+
documentsChanged: Signal<ILSPDocumentConnectionManager, Map<VirtualDocument.uri, VirtualDocument>>;
|
|
31
|
+
languageServerManager: ILanguageServerManager;
|
|
32
|
+
initialConfigurations: TLanguageServerConfigurations;
|
|
33
|
+
private ignoredLanguages;
|
|
34
|
+
constructor(options: DocumentConnectionManager.IOptions);
|
|
35
|
+
connectDocumentSignals(virtualDocument: VirtualDocument): void;
|
|
36
|
+
disconnectDocumentSignals(virtualDocument: VirtualDocument, emit?: boolean): void;
|
|
37
|
+
onForeignDocumentOpened(_host: VirtualDocument, context: IForeignContext): void;
|
|
38
|
+
onForeignDocumentClosed(_host: VirtualDocument, context: IForeignContext): void;
|
|
39
|
+
private connectSocket;
|
|
40
|
+
registerAdapter(path: string, adapter: WidgetAdapter<IDocumentWidget>): void;
|
|
41
|
+
updateConfiguration(allServerSettings: TLanguageServerConfigurations): void;
|
|
42
|
+
updateServerConfigurations(allServerSettings: TLanguageServerConfigurations): void;
|
|
43
|
+
/**
|
|
44
|
+
* Fired the first time a connection is opened. These _should_ be the only
|
|
45
|
+
* invocation of `.on` (once remaining LSPFeature.connection_handlers are made
|
|
46
|
+
* singletons).
|
|
47
|
+
*/
|
|
48
|
+
onNewConnection: (connection: LSPConnection) => void;
|
|
49
|
+
/**
|
|
50
|
+
* TODO: presently no longer referenced. A failing connection would close
|
|
51
|
+
* the socket, triggering the language server on the other end to exit
|
|
52
|
+
*/
|
|
53
|
+
retryToConnect(options: ISocketConnectionOptions, reconnectDelay: number, retrialsLeft?: number): Promise<void>;
|
|
54
|
+
disconnect(languageId: TLanguageServerId): void;
|
|
55
|
+
connect(options: ISocketConnectionOptions, firstTimeoutSeconds?: number, secondTimeoutMinutes?: number): Promise<ILSPConnection | undefined>;
|
|
56
|
+
unregisterDocument(virtualDocument: VirtualDocument, emit?: boolean): void;
|
|
57
|
+
updateLogging(logAllCommunication: boolean, setTrace: AskServersToSendTraceNotifications): void;
|
|
58
|
+
private forEachDocumentOfConnection;
|
|
59
|
+
}
|
|
60
|
+
export declare namespace DocumentConnectionManager {
|
|
61
|
+
interface IOptions {
|
|
62
|
+
languageServerManager: ILanguageServerManager;
|
|
63
|
+
}
|
|
64
|
+
function solveUris(virtualDocument: VirtualDocument, language: string): IURIs;
|
|
65
|
+
interface IURIs {
|
|
66
|
+
base: string;
|
|
67
|
+
document: string;
|
|
68
|
+
server: string;
|
|
69
|
+
socket: string;
|
|
70
|
+
}
|
|
71
|
+
}
|