Skip to content
This repository was archived by the owner on Feb 22, 2020. It is now read-only.

Commit e9b4164

Browse files
authored
fix: do not register providers inside of withConnection (#42)
1 parent 1643663 commit e9b4164

File tree

2 files changed

+64
-33
lines changed

2 files changed

+64
-33
lines changed

src/index.ts

+63-32
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,15 @@ export async function register({
155155
}
156156
}
157157

158-
async function connect(clientRootUri: URL | null, initParams: InitializeParams): Promise<LSPConnection> {
158+
async function connect({
159+
clientRootUri,
160+
initParams,
161+
registerProviders,
162+
}: {
163+
clientRootUri: URL | null
164+
initParams: InitializeParams
165+
registerProviders: boolean
166+
}): Promise<LSPConnection> {
159167
const subscriptions = new Subscription()
160168
const decorationType = sourcegraph.app.createDecorationType()
161169
const connection = await createConnection()
@@ -258,41 +266,56 @@ export async function register({
258266
}
259267
})
260268
)
261-
await initializeConnection(connection, clientRootUri, initParams)
269+
await initializeConnection({ connection, clientRootUri, initParams, registerProviders })
262270
return connection
263271
}
264272

265-
async function initializeConnection(
266-
connection: LSPConnection,
267-
clientRootUri: URL | null,
273+
async function initializeConnection({
274+
connection,
275+
clientRootUri,
276+
initParams,
277+
registerProviders,
278+
}: {
279+
connection: LSPConnection
280+
clientRootUri: URL | null
268281
initParams: InitializeParams
269-
): Promise<void> {
282+
registerProviders: boolean
283+
}): Promise<void> {
270284
const initializeResult = await connection.sendRequest(InitializeRequest.type, initParams)
271285
// Tell language server about all currently open text documents under this root
272286
syncTextDocuments(connection)
273287

274-
// Convert static capabilities to dynamic registrations
275-
const staticRegistrations = staticRegistrationsFromCapabilities(initializeResult.capabilities, documentSelector)
288+
if (registerProviders) {
289+
// Convert static capabilities to dynamic registrations
290+
const staticRegistrations = staticRegistrationsFromCapabilities(
291+
initializeResult.capabilities,
292+
documentSelector
293+
)
276294

277-
// Listen for dynamic capabilities
278-
connection.setRequestHandler(RegistrationRequest.type, params => {
279-
registerCapabilities(connection, clientRootUri, params.registrations)
280-
})
281-
// Register static capabilities
282-
registerCapabilities(connection, clientRootUri, staticRegistrations)
295+
// Listen for dynamic capabilities
296+
connection.setRequestHandler(RegistrationRequest.type, params => {
297+
registerCapabilities(connection, clientRootUri, params.registrations)
298+
})
299+
// Register static capabilities
300+
registerCapabilities(connection, clientRootUri, staticRegistrations)
301+
}
283302

284303
await afterInitialize(initializeResult)
285304
}
286305

287306
let withConnection: <R>(workspaceFolder: URL, fn: (connection: LSPConnection) => Promise<R>) => Promise<R>
288307

289308
if (supportsWorkspaceFolders) {
290-
const connection = await connect(null, {
291-
processId: null,
292-
rootUri: null,
293-
capabilities: clientCapabilities,
294-
workspaceFolders: sourcegraph.workspace.roots.map(toLSPWorkspaceFolder({ clientToServerURI })),
295-
initializationOptions,
309+
const connection = await connect({
310+
clientRootUri: null,
311+
initParams: {
312+
processId: null,
313+
rootUri: null,
314+
capabilities: clientCapabilities,
315+
workspaceFolders: sourcegraph.workspace.roots.map(toLSPWorkspaceFolder({ clientToServerURI })),
316+
initializationOptions,
317+
},
318+
registerProviders: true,
296319
})
297320
subscriptions.add(connection)
298321
withConnection = async (workspaceFolder, fn) => {
@@ -356,12 +379,16 @@ export async function register({
356379
return await fn(connection)
357380
}
358381
const serverRootUri = clientToServerURI(workspaceFolder)
359-
connection = await connect(workspaceFolder, {
360-
processId: null,
361-
rootUri: serverRootUri.href,
362-
capabilities: clientCapabilities,
363-
workspaceFolders: null,
364-
initializationOptions,
382+
connection = await connect({
383+
clientRootUri: workspaceFolder,
384+
initParams: {
385+
processId: null,
386+
rootUri: serverRootUri.href,
387+
capabilities: clientCapabilities,
388+
workspaceFolders: null,
389+
initializationOptions,
390+
},
391+
registerProviders: false,
365392
})
366393
subscriptions.add(connection)
367394
try {
@@ -376,12 +403,16 @@ export async function register({
376403
const connectionPromise = (async () => {
377404
try {
378405
const serverRootUri = clientToServerURI(new URL(root.uri.toString()))
379-
const connection = await connect(new URL(root.uri.toString()), {
380-
processId: null,
381-
rootUri: serverRootUri.href,
382-
capabilities: clientCapabilities,
383-
workspaceFolders: null,
384-
initializationOptions,
406+
const connection = await connect({
407+
clientRootUri: new URL(root.uri.toString()),
408+
initParams: {
409+
processId: null,
410+
rootUri: serverRootUri.href,
411+
capabilities: clientCapabilities,
412+
workspaceFolders: null,
413+
initializationOptions,
414+
},
415+
registerProviders: true,
385416
})
386417
subscriptions.add(connection)
387418
return connection

yarn.lock

+1-1
Original file line numberDiff line numberDiff line change
@@ -5555,7 +5555,7 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
55555555
resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
55565556
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
55575557

5558-
sourcegraph@^23.0.1, sourcegraph@^23.1.0:
5558+
sourcegraph@^23.1.0:
55595559
version "23.1.0"
55605560
resolved "https://registry.yarnpkg.com/sourcegraph/-/sourcegraph-23.1.0.tgz#3178979805239cdf777d7b2cb9aae99c2a3d1dcb"
55615561
integrity sha512-pcHP/Ad1TGJWDu4vh8iDE1bi4LOvDgc2Q+amlByjSfeg2+vd4jldpaW4HuP/fMVGYvvzxOa4jrjlluWeXFqyoA==

0 commit comments

Comments
 (0)