From 87338edd6c63b02c810dac6f44932f0a7859bfab Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Fri, 22 Mar 2024 18:13:43 +0100 Subject: [PATCH] drop separate nesting detection entirely --- src/lib/detectNesting.js | 30 -------- src/processTailwindFeatures.js | 3 - tests/detect-nesting.test.js | 128 --------------------------------- 3 files changed, 161 deletions(-) delete mode 100644 src/lib/detectNesting.js delete mode 100644 tests/detect-nesting.test.js diff --git a/src/lib/detectNesting.js b/src/lib/detectNesting.js deleted file mode 100644 index abbb94cee45d..000000000000 --- a/src/lib/detectNesting.js +++ /dev/null @@ -1,30 +0,0 @@ -function isRoot(node) { - return node.type === 'root' -} - -function isAtLayer(node) { - return node.type === 'atrule' && node.name === 'layer' -} - -export default function (_context) { - return (root, result) => { - let found = false - - root.walkRules((rule) => { - if (found) return false - - rule.walkRules((nestedRule) => { - found = true - nestedRule.warn( - result, - [ - 'Nested CSS was detected, but CSS nesting has not been configured correctly.', - 'Please enable a CSS nesting plugin *before* Tailwind in your configuration.', - 'See how here: https://tailwindcss.com/docs/using-with-preprocessors#nesting', - ].join('\n') - ) - return false - }) - }) - } -} diff --git a/src/processTailwindFeatures.js b/src/processTailwindFeatures.js index fa363b003bf2..2ab36229dfc5 100644 --- a/src/processTailwindFeatures.js +++ b/src/processTailwindFeatures.js @@ -7,7 +7,6 @@ import resolveDefaultsAtRules from './lib/resolveDefaultsAtRules' import collapseAdjacentRules from './lib/collapseAdjacentRules' import collapseDuplicateDeclarations from './lib/collapseDuplicateDeclarations' import partitionApplyAtRules from './lib/partitionApplyAtRules' -import detectNesting from './lib/detectNesting' import { createContext } from './lib/setupContextUtils' import { issueFlagNotices } from './featureFlags' @@ -15,8 +14,6 @@ export default function processTailwindFeatures(setupContext) { return async function (root, result) { let { tailwindDirectives, applyDirectives } = normalizeTailwindDirectives(root) - detectNesting()(root, result) - // Partition apply rules that are found in the css // itself. partitionApplyAtRules()(root, result) diff --git a/tests/detect-nesting.test.js b/tests/detect-nesting.test.js deleted file mode 100644 index 08eeacf98464..000000000000 --- a/tests/detect-nesting.test.js +++ /dev/null @@ -1,128 +0,0 @@ -import { run, html, css } from './util/run' - -it('should warn when we detect nested css', () => { - let config = { - content: [{ raw: html`
` }], - } - - let input = css` - @tailwind utilities; - - .nested { - .example { - } - } - ` - - return run(input, config).then((result) => { - expect(result.messages).toHaveLength(1) - expect(result.messages).toMatchObject([ - { - type: 'warning', - text: [ - 'Nested CSS was detected, but CSS nesting has not been configured correctly.', - 'Please enable a CSS nesting plugin *before* Tailwind in your configuration.', - 'See how here: https://tailwindcss.com/docs/using-with-preprocessors#nesting', - ].join('\n'), - }, - ]) - }) -}) - -it('should not warn when we detect nested css inside css @layer rules', () => { - let config = { - content: [{ raw: html`
` }], - } - - let input = css` - @layer tw-base, tw-components, tw-utilities; - @layer tw-utilities { - @tailwind utilities; - } - ` - - return run(input, config).then((result) => { - expect(result.css).toMatchFormattedCss(css` - @layer tw-base, tw-components, tw-utilities; - @layer tw-utilities { - .underline { - text-decoration-line: underline; - } - } - `) - expect(result.messages).toHaveLength(0) - }) -}) - -it('should warn when we detect namespaced @tailwind at rules', () => { - let config = { - content: [{ raw: html`
` }], - } - - let input = css` - .namespace { - @tailwind utilities; - } - ` - - return run(input, config).then((result) => { - expect(result.messages).toHaveLength(1) - expect(result.messages).toMatchObject([ - { - type: 'warning', - text: [ - 'Nested @tailwind rules were detected, but are not supported.', - "Consider using a prefix to scope Tailwind's classes: https://tailwindcss.com/docs/configuration#prefix", - 'Alternatively, use the important selector strategy: https://tailwindcss.com/docs/configuration#selector-strategy', - ].join('\n'), - }, - ]) - }) -}) - -it('should not warn when nesting a single rule inside a media query', () => { - let config = { - content: [{ raw: html`
` }], - } - - let input = css` - @tailwind utilities; - - @media (min-width: 768px) { - .nested { - } - } - ` - - return run(input, config).then((result) => { - expect(result.messages).toHaveLength(0) - expect(result.messages).toEqual([]) - }) -}) - -it('should only warn for the first detected nesting ', () => { - let config = { - content: [{ raw: html`
` }], - } - - let input = css` - @tailwind utilities; - - .nested { - .example { - } - - .other { - } - } - - .other { - .example { - } - } - ` - - return run(input, config).then((result) => { - expect(result.messages).toHaveLength(1) - }) -})