From 8d68d0c0a72b03d15792f55ed3028bc089959bbd Mon Sep 17 00:00:00 2001 From: Dunqing Date: Wed, 24 Dec 2025 16:00:13 +0800 Subject: [PATCH 1/3] Improve `canCollapseWhitespaceIn` handling for `tailwindPreserveWhitespace: true` --- src/index.ts | 17 ++++++++++++----- src/sorting.ts | 4 ---- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/index.ts b/src/index.ts index 6d29d2ba..ea95632c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -108,7 +108,7 @@ function transformDynamicAngularAttribute(attr: any, env: TransformerEnv) { StringLiteral(node, path) { if (!node.value) return - let collapseWhitespace = canCollapseWhitespaceIn(path) + let collapseWhitespace = canCollapseWhitespaceIn(path, env) changes.push({ start: node.start + 1, @@ -124,7 +124,7 @@ function transformDynamicAngularAttribute(attr: any, env: TransformerEnv) { TemplateLiteral(node, path) { if (!node.quasis.length) return - let collapseWhitespace = canCollapseWhitespaceIn(path) + let collapseWhitespace = canCollapseWhitespaceIn(path, env) for (let i = 0; i < node.quasis.length; i++) { let quasi = node.quasis[i] @@ -604,7 +604,14 @@ function isSortableExpression( return false } -function canCollapseWhitespaceIn(path: Path) { +function canCollapseWhitespaceIn( + path: Path, + env: TransformerEnv, +): false | { start: boolean; end: boolean } { + if (env.options.tailwindPreserveWhitespace) { + return false + } + let start = true let end = true @@ -656,7 +663,7 @@ function transformJavaScript(ast: import('@babel/types').Node, { env }: Transfor function sortInside(ast: import('@babel/types').Node) { visit(ast, (node, path) => { - let collapseWhitespace = canCollapseWhitespaceIn(path) + let collapseWhitespace = canCollapseWhitespaceIn(path, env) if (isStringLiteral(node)) { sortStringLiteral(node, { env, collapseWhitespace }) @@ -712,7 +719,7 @@ function transformJavaScript(ast: import('@babel/types').Node, { env }: Transfor return } - let collapseWhitespace = canCollapseWhitespaceIn(path) + let collapseWhitespace = canCollapseWhitespaceIn(path, env) sortTemplateLiteral(node.quasi, { env, diff --git a/src/sorting.ts b/src/sorting.ts index f11ad33c..5df04dc9 100644 --- a/src/sorting.ts +++ b/src/sorting.ts @@ -42,10 +42,6 @@ export function sortClasses( return classStr } - if (env.options.tailwindPreserveWhitespace) { - collapseWhitespace = false - } - // This class list is purely whitespace // Collapse it to a single space if the option is enabled if (/^[\t\r\f\n ]+$/.test(classStr) && collapseWhitespace) { From c8691d8e6eaaa5e227c609f3d29ce0f8d6883239 Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Wed, 24 Dec 2025 11:45:53 -0500 Subject: [PATCH 2/3] Fix type error --- src/index.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/index.ts b/src/index.ts index ea95632c..c0c0d22c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -143,10 +143,12 @@ function transformDynamicAngularAttribute(attr: any, env: TransformerEnv) { // And does not end with a space ignoreLast: i < node.expressions.length && !/\s$/.test(quasi.value.raw), - collapseWhitespace: { - start: collapseWhitespace.start && i === 0, - end: collapseWhitespace.end && i >= node.expressions.length, - }, + collapseWhitespace: collapseWhitespace + ? { + start: collapseWhitespace.start && i === 0, + end: collapseWhitespace.end && i >= node.expressions.length, + } + : false, }), }) } From 1e0a3d6b43cb01f7608619eea1929d3c4c70c80b Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Wed, 24 Dec 2025 11:49:15 -0500 Subject: [PATCH 3/3] Bring back check in `sortClasses` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The CSS tests fail and removing this means we’ll need to do this check in 9 separate places so centralizing it is simpler. Though some of those places don’t appear to be tested right now meaning we’re missing some necessary test coverage. --- src/sorting.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/sorting.ts b/src/sorting.ts index 5df04dc9..f11ad33c 100644 --- a/src/sorting.ts +++ b/src/sorting.ts @@ -42,6 +42,10 @@ export function sortClasses( return classStr } + if (env.options.tailwindPreserveWhitespace) { + collapseWhitespace = false + } + // This class list is purely whitespace // Collapse it to a single space if the option is enabled if (/^[\t\r\f\n ]+$/.test(classStr) && collapseWhitespace) {