From 1aa60c4c3c06816a77e3af6bb2e82a0f593a27f2 Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Mon, 19 May 2025 13:22:01 -0400 Subject: [PATCH 1/4] Clear trigger characters when restarting server --- packages/tailwindcss-language-server/src/tw.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/tailwindcss-language-server/src/tw.ts b/packages/tailwindcss-language-server/src/tw.ts index f2376154..6dfcb3d9 100644 --- a/packages/tailwindcss-language-server/src/tw.ts +++ b/packages/tailwindcss-language-server/src/tw.ts @@ -1127,6 +1127,7 @@ export class TW { this.commonRegistrations?.dispose() this.commonRegistrations = undefined + this.lastTriggerCharacters.clear() this.completionRegistration?.dispose() this.completionRegistration = undefined From da8b8ae730eb749b8444146ac15ca540431288af Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Mon, 19 May 2025 14:50:33 -0400 Subject: [PATCH 2/4] Add test --- .../tests/env/capabilities.test.ts | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/packages/tailwindcss-language-server/tests/env/capabilities.test.ts b/packages/tailwindcss-language-server/tests/env/capabilities.test.ts index 22eac608..21c09678 100644 --- a/packages/tailwindcss-language-server/tests/env/capabilities.test.ts +++ b/packages/tailwindcss-language-server/tests/env/capabilities.test.ts @@ -182,3 +182,66 @@ defineTest({ expect(idsBefore).toEqual(idsAfter) }, }) + +defineTest({ + name: 'Trigger characters are registered after a server restart', + fs: { + 'app.css': '@import "tailwindcss"', + }, + prepare: async ({ root }) => ({ client: await createClient({ root }) }), + handle: async ({ root, client }) => { + // Initially don't have any registered capabilities because dynamic + // registration is delayed until after project initialization + expect(client.serverCapabilities).toEqual([]) + + // We open a document so a project gets initialized + await client.open({ + lang: 'html', + text: '
', + }) + + // And now capabilities are registered + expect(client.serverCapabilities).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + method: 'textDocument/hover', + }), + + expect.objectContaining({ + method: 'textDocument/completion', + registerOptions: { + documentSelector: null, + resolveProvider: true, + triggerCharacters: ['"', "'", '`', ' ', '.', '(', '[', ']', '!', '/', '-', ':'], + }, + }), + ]), + ) + + let didRestart = new Promise((resolve) => { + client.conn.onNotification('@/tailwindCSS/serverRestarted', resolve) + }) + + // Force the server to restart: + // A tsconfig.json change causes that currently + client.notifyChangedFiles({ + changed: [`${root}/tsconfig.json`], + }) + + // Wait for the project to finish building + await didRestart + + expect(client.serverCapabilities).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + method: 'textDocument/completion', + registerOptions: { + documentSelector: null, + resolveProvider: true, + triggerCharacters: ['"', "'", '`', ' ', '.', '(', '[', ']', '!', '/', '-', ':'], + }, + }), + ]), + ) + }, +}) From 92ad53989de64dfb61baa09113b19d4642888e6d Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Mon, 19 May 2025 14:51:19 -0400 Subject: [PATCH 3/4] Tweak check --- packages/tailwindcss-language-server/src/tw.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/tailwindcss-language-server/src/tw.ts b/packages/tailwindcss-language-server/src/tw.ts index 6dfcb3d9..882d1be2 100644 --- a/packages/tailwindcss-language-server/src/tw.ts +++ b/packages/tailwindcss-language-server/src/tw.ts @@ -929,7 +929,13 @@ export class TW { } // If the trigger characters haven't changed then we don't need to do anything - if (equal(Array.from(chars), Array.from(this.lastTriggerCharacters ?? []))) return + if ( + this.completionRegistration && + equal(Array.from(chars), Array.from(this.lastTriggerCharacters ?? [])) + ) { + return + } + this.lastTriggerCharacters = chars this.completionRegistration?.dispose() From 71e3a3e2752e18f52226f824360d58c1b382cae9 Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Mon, 19 May 2025 15:00:35 -0400 Subject: [PATCH 4/4] Tweak comments --- .../tests/env/capabilities.test.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/tailwindcss-language-server/tests/env/capabilities.test.ts b/packages/tailwindcss-language-server/tests/env/capabilities.test.ts index 21c09678..6799c0ba 100644 --- a/packages/tailwindcss-language-server/tests/env/capabilities.test.ts +++ b/packages/tailwindcss-language-server/tests/env/capabilities.test.ts @@ -222,13 +222,12 @@ defineTest({ client.conn.onNotification('@/tailwindCSS/serverRestarted', resolve) }) - // Force the server to restart: - // A tsconfig.json change causes that currently + // Force a server restart by telling the server tsconfig.json changed client.notifyChangedFiles({ changed: [`${root}/tsconfig.json`], }) - // Wait for the project to finish building + // Wait for the server initialization to finish await didRestart expect(client.serverCapabilities).toEqual(