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

fix: do not register providers inside of withConnection #42

Merged
merged 3 commits into from
Jan 31, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 63 additions & 32 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,15 @@ export async function register({
}
}

async function connect(clientRootUri: URL | null, initParams: InitializeParams): Promise<LSPConnection> {
async function connect({
clientRootUri,
initParams,
registerProviders,
}: {
clientRootUri: URL | null
initParams: InitializeParams
registerProviders: boolean
}): Promise<LSPConnection> {
const subscriptions = new Subscription()
const decorationType = sourcegraph.app.createDecorationType()
const connection = await createConnection()
Expand Down Expand Up @@ -258,41 +266,56 @@ export async function register({
}
})
)
await initializeConnection(connection, clientRootUri, initParams)
await initializeConnection({ connection, clientRootUri, initParams, registerProviders })
return connection
}

async function initializeConnection(
connection: LSPConnection,
clientRootUri: URL | null,
async function initializeConnection({
connection,
clientRootUri,
initParams,
registerProviders,
}: {
connection: LSPConnection
clientRootUri: URL | null
initParams: InitializeParams
): Promise<void> {
registerProviders: boolean
}): Promise<void> {
const initializeResult = await connection.sendRequest(InitializeRequest.type, initParams)
// Tell language server about all currently open text documents under this root
syncTextDocuments(connection)

// Convert static capabilities to dynamic registrations
const staticRegistrations = staticRegistrationsFromCapabilities(initializeResult.capabilities, documentSelector)
if (registerProviders) {
// Convert static capabilities to dynamic registrations
const staticRegistrations = staticRegistrationsFromCapabilities(
initializeResult.capabilities,
documentSelector
)

// Listen for dynamic capabilities
connection.setRequestHandler(RegistrationRequest.type, params => {
registerCapabilities(connection, clientRootUri, params.registrations)
})
// Register static capabilities
registerCapabilities(connection, clientRootUri, staticRegistrations)
// Listen for dynamic capabilities
connection.setRequestHandler(RegistrationRequest.type, params => {
registerCapabilities(connection, clientRootUri, params.registrations)
})
// Register static capabilities
registerCapabilities(connection, clientRootUri, staticRegistrations)
}

await afterInitialize(initializeResult)
}

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

if (supportsWorkspaceFolders) {
const connection = await connect(null, {
processId: null,
rootUri: null,
capabilities: clientCapabilities,
workspaceFolders: sourcegraph.workspace.roots.map(toLSPWorkspaceFolder({ clientToServerURI })),
initializationOptions,
const connection = await connect({
clientRootUri: null,
initParams: {
processId: null,
rootUri: null,
capabilities: clientCapabilities,
workspaceFolders: sourcegraph.workspace.roots.map(toLSPWorkspaceFolder({ clientToServerURI })),
initializationOptions,
},
registerProviders: true,
})
subscriptions.add(connection)
withConnection = async (workspaceFolder, fn) => {
Expand Down Expand Up @@ -356,12 +379,16 @@ export async function register({
return await fn(connection)
}
const serverRootUri = clientToServerURI(workspaceFolder)
connection = await connect(workspaceFolder, {
processId: null,
rootUri: serverRootUri.href,
capabilities: clientCapabilities,
workspaceFolders: null,
initializationOptions,
connection = await connect({
clientRootUri: workspaceFolder,
initParams: {
processId: null,
rootUri: serverRootUri.href,
capabilities: clientCapabilities,
workspaceFolders: null,
initializationOptions,
},
registerProviders: false,
})
subscriptions.add(connection)
try {
Expand All @@ -376,12 +403,16 @@ export async function register({
const connectionPromise = (async () => {
try {
const serverRootUri = clientToServerURI(new URL(root.uri.toString()))
const connection = await connect(new URL(root.uri.toString()), {
processId: null,
rootUri: serverRootUri.href,
capabilities: clientCapabilities,
workspaceFolders: null,
initializationOptions,
const connection = await connect({
clientRootUri: new URL(root.uri.toString()),
initParams: {
processId: null,
rootUri: serverRootUri.href,
capabilities: clientCapabilities,
workspaceFolders: null,
initializationOptions,
},
registerProviders: true,
})
subscriptions.add(connection)
return connection
Expand Down
2 changes: 1 addition & 1 deletion yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -5555,7 +5555,7 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==

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