diff --git a/src/lib/generateRules.js b/src/lib/generateRules.js index fc9a6bbd6ec1..ffb83cec0aa3 100644 --- a/src/lib/generateRules.js +++ b/src/lib/generateRules.js @@ -382,7 +382,11 @@ function* resolveMatchedPlugins(classCandidate, context) { const twConfigPrefix = context.tailwindConfig.prefix const twConfigPrefixLen = twConfigPrefix.length - if (candidatePrefix[twConfigPrefixLen] === '-') { + + const hasMatchingPrefix = candidatePrefix.startsWith(twConfigPrefix) + || candidatePrefix.startsWith(`-${twConfigPrefix}`) + + if (candidatePrefix[twConfigPrefixLen] === '-' && hasMatchingPrefix) { negative = true candidatePrefix = twConfigPrefix + candidatePrefix.slice(twConfigPrefixLen + 1) } diff --git a/tests/prefix.test.js b/tests/prefix.test.js index 9124fd5b64c0..a82b98624ace 100644 --- a/tests/prefix.test.js +++ b/tests/prefix.test.js @@ -358,3 +358,19 @@ it('prefix with negative values and variants in the safelist', async () => { } `) }) + +it('prefix does not detect and generate unnecessary classes', async () => { + let config = { + prefix: 'tw-_', + content: [{ raw: html`-aaa-filter aaaa-table aaaa-hidden` }], + corePlugins: { preflight: false }, + } + + let input = css` + @tailwind utilities; + ` + + const result = await run(input, config) + + expect(result.css).toMatchFormattedCss(css``) +})