From 154122025a75d44c7505d54a7a6bb4b03be2316d Mon Sep 17 00:00:00 2001 From: Daniel Puckowski Date: Sat, 14 Mar 2026 17:02:34 -0400 Subject: [PATCH] fix(issue#4356): parenthesis in media query * Fix issue #4356 issue with parenthesis in media query. * Add tests for issue #4356. --- packages/less/lib/less/parser/parser.js | 14 +++++++++++++- packages/test-data/tests-unit/media/media.css | 5 +++++ packages/test-data/tests-unit/media/media.less | 6 ++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/packages/less/lib/less/parser/parser.js b/packages/less/lib/less/parser/parser.js index fb6b3603b..72014aab2 100644 --- a/packages/less/lib/less/parser/parser.js +++ b/packages/less/lib/less/parser/parser.js @@ -1891,6 +1891,7 @@ const Parser = function Parser(context, imports, fileInfo, currentIndex) { spacing = true; } } else if (parserInput.$char('(')) { + let closed = false; p = this.property(); parserInput.save(); if (!p && syntaxOptions.queryInParens && parserInput.$re(/^[0-9a-z-]*\s*([<>]=|<=|>=|[<>]|=)/)) { @@ -1904,9 +1905,20 @@ const Parser = function Parser(context, imports, fileInfo, currentIndex) { } } else { parserInput.restore(); + parserInput.save(); e = this.value(); + if (e && parserInput.$char(')')) { + closed = true; + parserInput.forget(); + } else { + parserInput.restore(); + e = this.mediaFeature(syntaxOptions); + } + } + if (!closed && parserInput.$char(')')) { + closed = true; } - if (parserInput.$char(')')) { + if (closed) { if (p && !e) { nodes.push(new (tree.Paren)(new (tree.QueryInParens)(p.op, p.lvalue, p.rvalue, rangeP ? rangeP.op : null, rangeP ? rangeP.rvalue : null, p._index))); e = p; diff --git a/packages/test-data/tests-unit/media/media.css b/packages/test-data/tests-unit/media/media.css index eb9912364..70ed03b48 100644 --- a/packages/test-data/tests-unit/media/media.css +++ b/packages/test-data/tests-unit/media/media.css @@ -274,3 +274,8 @@ color: red; } } +@media ((color) and (hover)), all { + body { + background: green; + } +} diff --git a/packages/test-data/tests-unit/media/media.less b/packages/test-data/tests-unit/media/media.less index 3b55c761c..a67b58ffd 100644 --- a/packages/test-data/tests-unit/media/media.less +++ b/packages/test-data/tests-unit/media/media.less @@ -302,3 +302,9 @@ color: red; } } + +@media ((color) and (hover)), all { + body { + background: green; + } +}