From 08733a740473d49004f73a011f6824658f891ba4 Mon Sep 17 00:00:00 2001 From: Daniel Puckowski Date: Sun, 22 Mar 2026 10:13:00 -0400 Subject: [PATCH] fix(issue#4316): color calc inside from expression * Fix color calc() inside from expression parsing issues. * Add tests for #4316. --- packages/less/lib/less/parser/parser.js | 4 ++-- packages/test-data/tests-unit/color-functions/modern.css | 6 ++++++ packages/test-data/tests-unit/color-functions/modern.less | 8 ++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/less/lib/less/parser/parser.js b/packages/less/lib/less/parser/parser.js index 6a439fb89..23aa54d6b 100644 --- a/packages/less/lib/less/parser/parser.js +++ b/packages/less/lib/less/parser/parser.js @@ -2283,10 +2283,10 @@ const Parser = function Parser(context, imports, fileInfo, currentIndex) { parserInput.save(); // hsl or rgb or lch operand - const match = parserInput.$re(/^[lchrgbs]\s+/); + const match = parserInput.$re(/^([lchrgbs])(?=\s|[,/*)]|$)/); if (match) { parserInput.forget(); - return new tree.Keyword(match[0]); + return new tree.Keyword(match[1]); } parserInput.restore(); diff --git a/packages/test-data/tests-unit/color-functions/modern.css b/packages/test-data/tests-unit/color-functions/modern.css index ed84e9002..bdf2626a4 100644 --- a/packages/test-data/tests-unit/color-functions/modern.css +++ b/packages/test-data/tests-unit/color-functions/modern.css @@ -34,3 +34,9 @@ .color-rgb-div { background: rgb(from #0000FF calc(r / 2) g b); } +.color-rgb-sub-right-operand { + background: rgb(from blue calc(100 - r) g b); +} +.color-rgb-add-left-operand { + background: rgb(from blue calc(r + 100) g b); +} diff --git a/packages/test-data/tests-unit/color-functions/modern.less b/packages/test-data/tests-unit/color-functions/modern.less index cf04e2c9b..23445d125 100644 --- a/packages/test-data/tests-unit/color-functions/modern.less +++ b/packages/test-data/tests-unit/color-functions/modern.less @@ -46,3 +46,11 @@ .color-rgb-div { background: rgb(from #0000FF calc(r / 2) g b); } + +.color-rgb-sub-right-operand { + background: rgb(from blue calc(100 - r) g b); +} + +.color-rgb-add-left-operand { + background: rgb(from blue calc(r + 100) g b); +}