From 31c76a56cba7a0f4e26e9ee2cdbb7529598e9cd8 Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Mon, 15 Dec 2025 23:53:08 -0500 Subject: [PATCH 1/2] Add targeted fix for stylesheets named `tailwindcss.css` --- .../src/project-locator.test.ts | 16 +++++++++++ .../src/resolver/index.ts | 28 ++++++++++++++++++- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/packages/tailwindcss-language-server/src/project-locator.test.ts b/packages/tailwindcss-language-server/src/project-locator.test.ts index 529987953..d42ecc8e2 100644 --- a/packages/tailwindcss-language-server/src/project-locator.test.ts +++ b/packages/tailwindcss-language-server/src/project-locator.test.ts @@ -588,6 +588,22 @@ testLocator({ ], }) +testLocator({ + name: 'A stylesheet can be named tailwindcss.css', + fs: { + 'src/tailwindcss.css': css` + @import 'tailwindcss'; + `, + }, + expected: [ + { + version: '4.1.18 (bundled)', + config: '/src/tailwindcss.css', + content: [], + }, + ], +}) + // --- function testLocator({ diff --git a/packages/tailwindcss-language-server/src/resolver/index.ts b/packages/tailwindcss-language-server/src/resolver/index.ts index 8dfab846e..86c441606 100644 --- a/packages/tailwindcss-language-server/src/resolver/index.ts +++ b/packages/tailwindcss-language-server/src/resolver/index.ts @@ -170,6 +170,17 @@ export async function createResolver(opts: ResolverOptions): Promise { preferRelative: true, }) + let absoluteCssResolver = ResolverFactory.createResolver({ + fileSystem, + extensions: ['.css'], + mainFields: ['style'], + conditionNames: ['style'], + pnpApi, + + // Used as a fallback when a file ends up importing itself + preferRelative: false, + }) + async function resolveId( resolver: BaseResolver, id: string, @@ -235,7 +246,22 @@ export async function createResolver(opts: ResolverOptions): Promise { } async function resolveCssId(id: string, base: string): Promise { - return (await resolveId(cssResolver, id, base)) || id + // If the ID matches `tailwindcss` exactly we tell the CSS resolver to + // ignore relative file paths. This ensures that Tailwind CSS itself is + // found even when a stylesheet named `tailwindcss.css` exists. + // + // If someone needs to import that stylesheet it must be done by: + // - relative path: `@import "./tailwindcss"` + // - adding an extension: `@import "tailwindcss.css"` + // + // Ideally this code would only be in place if the _importer_ is + // `tailwindcss.css` but that data is not available. Only the base + // path is so we enable it all the time. + // + // https://github.com/tailwindlabs/tailwindcss-intellisense/issues/1427 + let resolver = id === 'tailwindcss' ? absoluteCssResolver : cssResolver + + return (await resolveId(resolver, id, base)) || id } // Takes a path which may or may not be complete and returns the aliased path From 03e798631caaf8833fe0ef5ee736588c3a486769 Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Mon, 15 Dec 2025 23:54:10 -0500 Subject: [PATCH 2/2] 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 69d2e6ffb..9a23f7cac 100644 --- a/packages/vscode-tailwindcss/CHANGELOG.md +++ b/packages/vscode-tailwindcss/CHANGELOG.md @@ -5,6 +5,7 @@ - Add a source to all emitted diagnostics ([#1491](https://github.com/tailwindlabs/tailwindcss-intellisense/pull/1491)) - Improve performance in large files ([#1507](https://github.com/tailwindlabs/tailwindcss-intellisense/pull/1507)) - Improve utility lookup performance when using v4 ([#1509](https://github.com/tailwindlabs/tailwindcss-intellisense/pull/1509)) +- Fix project initalization when stylesheet is named `tailwindcss.css` ([#1517](https://github.com/tailwindlabs/tailwindcss-intellisense/pull/1517)) ## 0.14.29