diff --git a/packages/knip/fixtures/plugins/postcss-tailwindcss/node_modules/postcss/package.json b/packages/knip/fixtures/plugins/postcss-tailwindcss/node_modules/postcss/package.json new file mode 100644 index 000000000..516af40d0 --- /dev/null +++ b/packages/knip/fixtures/plugins/postcss-tailwindcss/node_modules/postcss/package.json @@ -0,0 +1,3 @@ +{ + "name": "postcss" +} diff --git a/packages/knip/fixtures/plugins/postcss-tailwindcss/node_modules/tailwindcss/package.json b/packages/knip/fixtures/plugins/postcss-tailwindcss/node_modules/tailwindcss/package.json new file mode 100644 index 000000000..05de10600 --- /dev/null +++ b/packages/knip/fixtures/plugins/postcss-tailwindcss/node_modules/tailwindcss/package.json @@ -0,0 +1,3 @@ +{ + "name": "tailwindcss" +} diff --git a/packages/knip/fixtures/plugins/postcss-tailwindcss/package.json b/packages/knip/fixtures/plugins/postcss-tailwindcss/package.json new file mode 100644 index 000000000..c9326911d --- /dev/null +++ b/packages/knip/fixtures/plugins/postcss-tailwindcss/package.json @@ -0,0 +1,6 @@ +{ + "name": "@fixtures/postcss-tailwindcss", + "devDependencies": { + "postcss": "*" + } +} diff --git a/packages/knip/fixtures/plugins/postcss-tailwindcss/postcss.config.js b/packages/knip/fixtures/plugins/postcss-tailwindcss/postcss.config.js new file mode 100644 index 000000000..ee5f90b30 --- /dev/null +++ b/packages/knip/fixtures/plugins/postcss-tailwindcss/postcss.config.js @@ -0,0 +1,5 @@ +module.exports = { + plugins: { + tailwindcss: {}, + }, +}; diff --git a/packages/knip/src/plugins/postcss/index.ts b/packages/knip/src/plugins/postcss/index.ts index 1177ab73c..73379d37b 100644 --- a/packages/knip/src/plugins/postcss/index.ts +++ b/packages/knip/src/plugins/postcss/index.ts @@ -18,13 +18,16 @@ const config = [ ]; const resolveConfig: ResolveConfig = config => { - return config.plugins + const plugins = config.plugins ? (Array.isArray(config.plugins) ? config.plugins : Object.keys(config.plugins)).flatMap(plugin => { if (typeof plugin === 'string') return plugin; if (Array.isArray(plugin) && typeof plugin[0] === 'string') return plugin[0]; return []; }) : []; + + // Because postcss is not included in peerDependencies of tailwindcss + return plugins.includes('tailwindcss') ? [...plugins, 'postcss'] : plugins; }; export default { diff --git a/packages/knip/test/plugins/postcss-tailwindcss.test.ts b/packages/knip/test/plugins/postcss-tailwindcss.test.ts new file mode 100644 index 000000000..b4b9476ce --- /dev/null +++ b/packages/knip/test/plugins/postcss-tailwindcss.test.ts @@ -0,0 +1,24 @@ +import { test } from 'bun:test'; +import assert from 'node:assert/strict'; +import { main } from '../../src/index.js'; +import { resolve } from '../../src/util/path.js'; +import baseArguments from '../helpers/baseArguments.js'; +import baseCounters from '../helpers/baseCounters.js'; + +const cwd = resolve('fixtures/plugins/postcss-tailwindcss'); + +test('Find dependencies with the PostCSS plugin (with tailwindcss)', async () => { + const { issues, counters } = await main({ + ...baseArguments, + cwd, + }); + + assert(issues.unlisted['postcss.config.js']['tailwindcss']); + + assert.deepEqual(counters, { + ...baseCounters, + unlisted: 1, + processed: 1, + total: 1, + }); +});