From 33ef68cf91904d6e785389e140755f9e4320afd4 Mon Sep 17 00:00:00 2001 From: Daniel Puckowski Date: Mon, 1 Sep 2025 07:58:22 -0400 Subject: [PATCH] fix(issue#4354): unkown at-rule expression commas * Fix issue #4354 unknown at-rule expressions should not have commas in keyword list. --- packages/less/src/less/parser/parser.js | 2 +- packages/less/src/less/tree/atrule.js | 6 ++++-- packages/test-data/css/_main/tailwind.css | 3 +++ packages/test-data/less/_main/tailwind.less | 3 +++ 4 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 packages/test-data/css/_main/tailwind.css create mode 100644 packages/test-data/less/_main/tailwind.less diff --git a/packages/less/src/less/parser/parser.js b/packages/less/src/less/parser/parser.js index 76676f5fe..ebc913665 100644 --- a/packages/less/src/less/parser/parser.js +++ b/packages/less/src/less/parser/parser.js @@ -2217,7 +2217,7 @@ const Parser = function Parser(context, imports, fileInfo, currentIndex) { parserInput.forget(); return new(tree.AtRule)(name, value, rules, index + currentIndex, fileInfo, context.dumpLineNumbers ? getDebugInfo(index) : null, - isRooted + isRooted, undefined, hasUnknown ); } diff --git a/packages/less/src/less/tree/atrule.js b/packages/less/src/less/tree/atrule.js index df36a5d87..d6886ae58 100644 --- a/packages/less/src/less/tree/atrule.js +++ b/packages/less/src/less/tree/atrule.js @@ -12,7 +12,8 @@ const AtRule = function( currentFileInfo, debugInfo, isRooted, - visibilityInfo + visibilityInfo, + hasUnknown ) { let i; var selectors = (new Selector([], null, null, this._index, this._fileInfo)).createEmptySelectors(); @@ -62,6 +63,7 @@ const AtRule = function( this.isRooted = isRooted || false; this.copyVisibilityInfo(visibilityInfo); this.allowRoot = true; + this.hasUnknown = hasUnknown; } AtRule.prototype = Object.assign(new Node(), { @@ -135,7 +137,7 @@ AtRule.prototype = Object.assign(new Node(), { if (value) { value = value.eval(context); - if (value.value && this.keywordList(value.value)) { + if (!this.hasUnknown && value.value && this.keywordList(value.value)) { value = new Anonymous(value.value.map(keyword => keyword.value).join(', '), this.getIndex(), this.fileInfo()); } } diff --git a/packages/test-data/css/_main/tailwind.css b/packages/test-data/css/_main/tailwind.css new file mode 100644 index 000000000..499decb21 --- /dev/null +++ b/packages/test-data/css/_main/tailwind.css @@ -0,0 +1,3 @@ +.box { + @apply h-64 w-64; +} diff --git a/packages/test-data/less/_main/tailwind.less b/packages/test-data/less/_main/tailwind.less new file mode 100644 index 000000000..499decb21 --- /dev/null +++ b/packages/test-data/less/_main/tailwind.less @@ -0,0 +1,3 @@ +.box { + @apply h-64 w-64; +}