From 0f80cc0defd4142ceee73b32416c0eac9e725c3b Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Wed, 28 May 2025 08:51:17 -0400 Subject: [PATCH 1/4] Add test verifying that creating a CSS config restarts the server --- .../tests/env/restart.test.ts | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/packages/tailwindcss-language-server/tests/env/restart.test.ts b/packages/tailwindcss-language-server/tests/env/restart.test.ts index 35b595f8..fa56cfb7 100644 --- a/packages/tailwindcss-language-server/tests/env/restart.test.ts +++ b/packages/tailwindcss-language-server/tests/env/restart.test.ts @@ -190,3 +190,79 @@ defineTest({ expect(ids3).not.toContainEqual(expect.toBeOneOf(ids2)) }, }) + +defineTest({ + name: 'Creating a CSS config in an empty folder initalizes a project', + fs: { + 'app.css': css` + /* this file is not a Tailwind CSS config yet */ + `, + }, + prepare: async ({ root }) => ({ + client: await createClient({ root, log: true }), + }), + handle: async ({ root, client }) => { + let doc = await client.open({ + lang: 'html', + text: '
', + }) + + //
+ // ^ + let hover = await doc.hover({ line: 0, character: 13 }) + + expect(hover).toEqual(null) + + // Create a CSS config file + await fs.writeFile( + `${root}/app.css`, + css` + @import 'tailwindcss'; + + @theme { + --color-primary: #c0ffee; + } + `, + ) + + // Create a CSS config file + // Notify the server of the config change + let didRestart = Promise.race([ + new Promise((resolve) => { + client.conn.onNotification('@/tailwindCSS/serverRestarted', resolve) + }), + new Promise((_, reject) => + setTimeout(() => reject(new Error('Did not restart in time')), 5000), + ), + ]) + + await client.notifyChangedFiles({ + changed: [`${root}/app.css`], + }) + + await didRestart + + // TODO: Sending a shutdown request immediately after a restart + // gets lost + // await client.shutdown() + + //
+ // ^ + hover = await doc.hover({ line: 0, character: 13 }) + + expect(hover).toEqual({ + contents: { + language: 'css', + value: dedent` + .text-primary { + color: var(--color-primary) /* #c0ffee */; + } + `, + }, + range: { + start: { line: 0, character: 12 }, + end: { line: 0, character: 24 }, + }, + }) + }, +}) From 107b9de461cd971175e60c2a075d612a4aa2aa60 Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Wed, 28 May 2025 08:51:31 -0400 Subject: [PATCH 2/4] Add shutdown request to client --- .../tests/utils/client.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/tailwindcss-language-server/tests/utils/client.ts b/packages/tailwindcss-language-server/tests/utils/client.ts index 681843a8..17db7a1e 100644 --- a/packages/tailwindcss-language-server/tests/utils/client.ts +++ b/packages/tailwindcss-language-server/tests/utils/client.ts @@ -12,6 +12,7 @@ import { DocumentLinkRequest, DocumentSymbol, DocumentSymbolRequest, + ExitNotification, FileChangeType, FileEvent, Hover, @@ -19,6 +20,7 @@ import { ProtocolConnection, PublishDiagnosticsParams, Registration, + ShutdownRequest, SymbolInformation, UnregistrationRequest, WorkspaceFolder, @@ -226,6 +228,11 @@ export interface Client extends ClientWorkspace { * Update the global settings for the server */ updateSettings(settings: DeepPartial): Promise + + /** + * Shutdown the server + */ + shutdown(): Promise } export interface ClientWorkspaceOptions { @@ -567,6 +574,13 @@ export async function createClient(opts: ClientOptions): Promise { }) } + let didExit = new Promise((resolve) => conn.onNotification(ExitNotification.type, resolve)) + + async function shutdown() { + await conn.sendRequest(ShutdownRequest.type) + await didExit + } + return { ...clientWorkspaces[0], get serverCapabilities() { @@ -576,6 +590,7 @@ export async function createClient(opts: ClientOptions): Promise { notifyChangedFiles, workspace, updateSettings, + shutdown, } } From 9b920b75f365481edd3ccd8604fe83e6a5c24155 Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Wed, 28 May 2025 08:51:34 -0400 Subject: [PATCH 3/4] Fix error --- packages/tailwindcss-language-server/src/tw.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/tailwindcss-language-server/src/tw.ts b/packages/tailwindcss-language-server/src/tw.ts index da8de46c..245fa9e5 100644 --- a/packages/tailwindcss-language-server/src/tw.ts +++ b/packages/tailwindcss-language-server/src/tw.ts @@ -1133,7 +1133,7 @@ export class TW { this.commonRegistrations?.dispose() this.commonRegistrations = undefined - this.lastTriggerCharacters.clear() + this.lastTriggerCharacters?.clear() this.completionRegistration?.then((r) => r.dispose()) this.completionRegistration = undefined From 867995d76765abc19972a343f530d7d3bbf380f9 Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Wed, 28 May 2025 08:56:31 -0400 Subject: [PATCH 4/4] Update changelog --- packages/vscode-tailwindcss/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/vscode-tailwindcss/CHANGELOG.md b/packages/vscode-tailwindcss/CHANGELOG.md index 2353dd86..353aad73 100644 --- a/packages/vscode-tailwindcss/CHANGELOG.md +++ b/packages/vscode-tailwindcss/CHANGELOG.md @@ -3,6 +3,7 @@ ## Prerelease - Simplify completion details for border and outline utilities ([#1384](https://github.com/tailwindlabs/tailwindcss-intellisense/pull/1384)) +- Fix error initializing a new project when editing a CSS file ([#1387](https://github.com/tailwindlabs/tailwindcss-intellisense/pull/1387)) # 0.14.19