diff --git a/packages/tailwindcss-language-server/src/server.ts b/packages/tailwindcss-language-server/src/server.ts index 24a191e8c652296f238d4fd9413f05f12233e8d1..c4a844d6c208c7dc4024607299163765f5300ef3 100644 --- a/packages/tailwindcss-language-server/src/server.ts +++ b/packages/tailwindcss-language-server/src/server.ts @@ -1611,7 +1611,7 @@ })) } class TW { - private initPromise: Promise + private initialized = false private lspHandlersAdded = false private workspaces: Map private projects: Map @@ -1631,14 +1631,11 @@ this.projectCounter = 0 } async init(): Promise { - if (!this.initPromise) { - this.initPromise = this._init() - } - await this.initPromise - } + if (this.initialized) return - private async _init(): Promise { clearRequireCache() + + this.initialized = true let base: string if (this.initializeParams.rootUri) { @@ -2134,7 +2131,7 @@ } } } - setupLSPHandlers() { + private setupLSPHandlers() { if (this.lspHandlersAdded) { return } @@ -2150,10 +2147,6 @@ this.connection.onDocumentLinks(this.onDocumentLinks.bind(this)) } private updateCapabilities() { - if (!supportsDynamicRegistration(this.initializeParams)) { - return - } - if (this.registrations) { this.registrations.then((r) => r.dispose()) } @@ -2228,37 +2221,30 @@ return fallbackProject } async onDocumentColor(params: DocumentColorParams): Promise { - await this.init() return this.getProject(params.textDocument)?.onDocumentColor(params) ?? [] } async onColorPresentation(params: ColorPresentationParams): Promise { - await this.init() return this.getProject(params.textDocument)?.onColorPresentation(params) ?? [] } async onHover(params: TextDocumentPositionParams): Promise { - await this.init() return this.getProject(params.textDocument)?.onHover(params) ?? null } async onCompletion(params: CompletionParams): Promise { - await this.init() return this.getProject(params.textDocument)?.onCompletion(params) ?? null } async onCompletionResolve(item: CompletionItem): Promise { - await this.init() return this.projects.get(item.data?._projectKey)?.onCompletionResolve(item) ?? null } - async onCodeAction(params: CodeActionParams): Promise { - await this.init() + onCodeAction(params: CodeActionParams): Promise { return this.getProject(params.textDocument)?.onCodeAction(params) ?? null } - async onDocumentLinks(params: DocumentLinkParams): Promise { - await this.init() + onDocumentLinks(params: DocumentLinkParams): DocumentLink[] { return this.getProject(params.textDocument)?.onDocumentLinks(params) ?? null } @@ -2288,7 +2274,7 @@ restart(): void { console.log('----------\nRESTARTING\n----------') this.dispose() - this.initPromise = undefined + this.initialized = false this.init() } } @@ -2320,8 +2306,9 @@ return this.documents.onDidOpen } } -function supportsDynamicRegistration(params: InitializeParams): boolean { +function supportsDynamicRegistration(connection: Connection, params: InitializeParams): boolean { return ( + connection.onInitialized && params.capabilities.textDocument.hover?.dynamicRegistration && params.capabilities.textDocument.colorProvider?.dynamicRegistration && params.capabilities.textDocument.codeAction?.dynamicRegistration && @@ -2335,7 +2322,7 @@ connection.onInitialize(async (params: InitializeParams): Promise => { tw.initializeParams = params - if (supportsDynamicRegistration(params)) { + if (supportsDynamicRegistration(connection, params)) { return { capabilities: { textDocumentSync: TextDocumentSyncKind.Full, @@ -2343,7 +2330,7 @@ }, } } - tw.setupLSPHandlers() + await tw.init() return { capabilities: {