diff --git a/packages/tailwindcss-intellisense/src/class-names/environment.js b/packages/tailwindcss-intellisense/src/class-names/environment.js index da905be..2eb5dbd 100644 --- a/packages/tailwindcss-intellisense/src/class-names/environment.js +++ b/packages/tailwindcss-intellisense/src/class-names/environment.js @@ -4,8 +4,19 @@ import findUp from 'find-up' import resolveFrom from 'resolve-from' import importFrom from 'import-from' -export function withUserEnvironment(base, cb) { - const pnpPath = findUp.sync('.pnp.js', { cwd: base }) +export function withUserEnvironment(base, root, cb) { + const pnpPath = findUp.sync( + (dir) => { + const pnpFile = path.join(dir, '.pnp.js') + if (findUp.sync.exists(pnpFile)) { + return pnpFile + } + if (dir === root) { + return findUp.stop + } + }, + { cwd: base } + ) if (pnpPath) { return withPnpEnvironment(pnpPath, cb) } diff --git a/packages/tailwindcss-intellisense/src/class-names/getPlugins.js b/packages/tailwindcss-intellisense/src/class-names/getPlugins.js index ee27469..fd0497a 100644 --- a/packages/tailwindcss-intellisense/src/class-names/getPlugins.js +++ b/packages/tailwindcss-intellisense/src/class-names/getPlugins.js @@ -4,8 +4,8 @@ import pkgUp from 'pkg-up' import { isObject } from './isObject' import { withUserEnvironment } from './environment' -export async function getBuiltInPlugins({ cwd, resolvedConfig }) { - return withUserEnvironment(cwd, ({ require, resolve }) => { +export async function getBuiltInPlugins({ base, root, resolvedConfig }) { + return withUserEnvironment(base, root, ({ require, resolve }) => { const tailwindBase = path.dirname(resolve('tailwindcss/package.json')) try { return require('./lib/corePlugins.js', tailwindBase).default({ diff --git a/packages/tailwindcss-intellisense/src/class-names/getUtilityConfigMap.js b/packages/tailwindcss-intellisense/src/class-names/getUtilityConfigMap.js index d7aaf1f..38803b9 100644 --- a/packages/tailwindcss-intellisense/src/class-names/getUtilityConfigMap.js +++ b/packages/tailwindcss-intellisense/src/class-names/getUtilityConfigMap.js @@ -19,12 +19,13 @@ const proxyHandler = (base = []) => ({ }) export async function getUtilityConfigMap({ - cwd, + base, + root, resolvedConfig, postcss, browserslist, }) { - const builtInPlugins = await getBuiltInPlugins({ cwd, resolvedConfig }) + const builtInPlugins = await getBuiltInPlugins({ base, root, resolvedConfig }) const userPlugins = Array.isArray(resolvedConfig.plugins) ? resolvedConfig.plugins : [] diff --git a/packages/tailwindcss-intellisense/src/class-names/index.js b/packages/tailwindcss-intellisense/src/class-names/index.js index 0ab940e..98d3dc0 100644 --- a/packages/tailwindcss-intellisense/src/class-names/index.js +++ b/packages/tailwindcss-intellisense/src/class-names/index.js @@ -52,7 +52,7 @@ export default async function getClassNames( version, featureFlags = { future: [], experimental: [] }, tailwindBase, - } = loadMeta(configDir) + } = loadMeta(configDir, cwd) console.log(`Found tailwindcss v${version}: ${tailwindBase}`) @@ -90,6 +90,7 @@ export default async function getClassNames( postcss, } = await withPackages( configDir, + cwd, async ({ postcss, tailwindcss, @@ -131,7 +132,11 @@ export default async function getClassNames( delete config.purge } - const resolvedConfig = resolveConfig({ cwd: configDir, config }) + const resolvedConfig = resolveConfig({ + base: configDir, + root: cwd, + config, + }) let browserslist = [] if ( @@ -180,7 +185,8 @@ export default async function getClassNames( plugins: getPlugins(config), variants: getVariants({ config, version, postcss, browserslist }), utilityConfigMap: await getUtilityConfigMap({ - cwd: configDir, + base: configDir, + root: cwd, resolvedConfig, postcss, browserslist, @@ -235,8 +241,8 @@ export default async function getClassNames( return result } -function loadMeta(configDir) { - return withUserEnvironment(configDir, ({ require, resolve }) => { +function loadMeta(configDir, root) { + return withUserEnvironment(configDir, root, ({ require, resolve }) => { const tailwindBase = path.dirname(resolve('tailwindcss/package.json')) const version = require('tailwindcss/package.json').version let featureFlags @@ -249,31 +255,35 @@ function loadMeta(configDir) { }) } -function withPackages(configDir, cb) { - return withUserEnvironment(configDir, async ({ isPnP, require, resolve }) => { - const tailwindBase = path.dirname(resolve('tailwindcss/package.json')) - const postcss = require('postcss', tailwindBase) - const tailwindcss = require('tailwindcss') +function withPackages(configDir, root, cb) { + return withUserEnvironment( + configDir, + root, + async ({ isPnP, require, resolve }) => { + const tailwindBase = path.dirname(resolve('tailwindcss/package.json')) + const postcss = require('postcss', tailwindBase) + const tailwindcss = require('tailwindcss') - let browserslistCommand - let browserslistArgs = [] - try { - const browserslistBin = resolve( - path.join( - 'browserslist', - require('browserslist/package.json', tailwindBase).bin.browserslist - ), - tailwindBase - ) - if (isPnP) { - browserslistCommand = 'yarn' - browserslistArgs = ['node', browserslistBin] - } else { - browserslistCommand = process.execPath - browserslistArgs = [browserslistBin] - } - } catch (_) {} + let browserslistCommand + let browserslistArgs = [] + try { + const browserslistBin = resolve( + path.join( + 'browserslist', + require('browserslist/package.json', tailwindBase).bin.browserslist + ), + tailwindBase + ) + if (isPnP) { + browserslistCommand = 'yarn' + browserslistArgs = ['node', browserslistBin] + } else { + browserslistCommand = process.execPath + browserslistArgs = [browserslistBin] + } + } catch (_) {} - return cb({ postcss, tailwindcss, browserslistCommand, browserslistArgs }) - }) + return cb({ postcss, tailwindcss, browserslistCommand, browserslistArgs }) + } + ) } diff --git a/packages/tailwindcss-intellisense/src/class-names/resolveConfig.js b/packages/tailwindcss-intellisense/src/class-names/resolveConfig.js index f36d11c..2b72625 100644 --- a/packages/tailwindcss-intellisense/src/class-names/resolveConfig.js +++ b/packages/tailwindcss-intellisense/src/class-names/resolveConfig.js @@ -2,7 +2,7 @@ import * as path from 'path' import decache from './decache' import { withUserEnvironment } from './environment' -export default function resolveConfig({ cwd, config }) { +export default function resolveConfig({ base, root, config }) { if (typeof config === 'string') { if (!cwd) { cwd = path.dirname(config) @@ -11,7 +11,7 @@ export default function resolveConfig({ cwd, config }) { config = __non_webpack_require__(config) } - return withUserEnvironment(cwd, ({ require, resolve }) => { + return withUserEnvironment(base, root, ({ require, resolve }) => { let resolveConfigFn = (config) => config const tailwindBase = path.dirname(resolve('tailwindcss/package.json')) try {