From 9b93547648ef3ad22327dd2d03e8007bed84488e Mon Sep 17 00:00:00 2001 From: Oliver Pike Date: Thu, 11 May 2023 14:33:18 -0700 Subject: [PATCH 1/4] Fixes less#3675 - LESS detects @apply as variable (ISSUE) --- packages/less/src/less/tree/expression.js | 13 +++++++++++-- packages/less/src/less/tree/variable.js | 3 +-- .../test/browser/css/atrule-passthrough/test.css | 5 +++++ .../less/test/browser/generator/runner.config.js | 12 ++++++++++-- .../test/browser/less/atrule-passthrough/test.less | 5 +++++ .../browser/runner-atrule-passthrough-options.js | 4 ++++ .../test/browser/runner-atrule-passthrough-spec.js | 3 +++ 7 files changed, 39 insertions(+), 6 deletions(-) create mode 100644 packages/less/test/browser/css/atrule-passthrough/test.css create mode 100644 packages/less/test/browser/less/atrule-passthrough/test.less create mode 100644 packages/less/test/browser/runner-atrule-passthrough-options.js create mode 100644 packages/less/test/browser/runner-atrule-passthrough-spec.js diff --git a/packages/less/src/less/tree/expression.js b/packages/less/src/less/tree/expression.js index 957505b872..4b3ddd8e83 100644 --- a/packages/less/src/less/tree/expression.js +++ b/packages/less/src/less/tree/expression.js @@ -38,14 +38,23 @@ Expression.prototype = Object.assign(new Node(), { if (this.value[0].parens && !this.value[0].parensInOp && !context.inCalc) { doubleParen = true; } - returnValue = this.value[0].eval(context); + try { + returnValue = this.value[0].eval(context); + } catch (e) { + // Pass through at-rules to the css file. + if (e.type === 'PassThrough') { + returnValue = this; + } else { + throw e; + } + } } else { returnValue = this; } if (inParenthesis) { context.outOfParenthesis(); } - if (this.parens && this.parensInOp && !mathOn && !doubleParen + if (this.parens && this.parensInOp && !mathOn && !doubleParen && (!(returnValue instanceof Dimension))) { returnValue = new Paren(returnValue); } diff --git a/packages/less/src/less/tree/variable.js b/packages/less/src/less/tree/variable.js index a81e3ecef0..460356f5c5 100644 --- a/packages/less/src/less/tree/variable.js +++ b/packages/less/src/less/tree/variable.js @@ -46,8 +46,7 @@ Variable.prototype = Object.assign(new Node(), { this.evaluating = false; return variable; } else { - throw { type: 'Name', - message: `variable ${name} is undefined`, + throw { type: 'PassThrough', filename: this.fileInfo().filename, index: this.getIndex() }; } diff --git a/packages/less/test/browser/css/atrule-passthrough/test.css b/packages/less/test/browser/css/atrule-passthrough/test.css new file mode 100644 index 0000000000..9dd26b8607 --- /dev/null +++ b/packages/less/test/browser/css/atrule-passthrough/test.css @@ -0,0 +1,5 @@ +.test { + --iron-autogrow-textarea: { + @apply --app-font-monospace; + } +} diff --git a/packages/less/test/browser/generator/runner.config.js b/packages/less/test/browser/generator/runner.config.js index 8dc30ed58c..d1c1723ae7 100644 --- a/packages/less/test/browser/generator/runner.config.js +++ b/packages/less/test/browser/generator/runner.config.js @@ -138,6 +138,14 @@ module.exports = { outfile: 'tmp/browser/test-runner-global-vars.html' } }, + atrulePassthrough: { + src: ['test/browser/less/atrule-passthrough/*.less'], + options: { + helpers: 'test/browser/runner-atrule-passthrough-options.js', + specs: 'test/browser/runner-atrule-passthrough-spec.js', + outfile: 'tmp/browser/test-runner-atrule-passthrough.html' + } + }, postProcessorPlugin: { src: [`${lessFolder}/postProcessorPlugin/*.less`], options: { @@ -182,5 +190,5 @@ module.exports = { specs: 'test/browser/runner-filemanagerPlugin.js', outfile: 'tmp/browser/test-runner-filemanager-plugin.html' } - } -} \ No newline at end of file + }, +} diff --git a/packages/less/test/browser/less/atrule-passthrough/test.less b/packages/less/test/browser/less/atrule-passthrough/test.less new file mode 100644 index 0000000000..9dd26b8607 --- /dev/null +++ b/packages/less/test/browser/less/atrule-passthrough/test.less @@ -0,0 +1,5 @@ +.test { + --iron-autogrow-textarea: { + @apply --app-font-monospace; + } +} diff --git a/packages/less/test/browser/runner-atrule-passthrough-options.js b/packages/less/test/browser/runner-atrule-passthrough-options.js new file mode 100644 index 0000000000..85b1d5a001 --- /dev/null +++ b/packages/less/test/browser/runner-atrule-passthrough-options.js @@ -0,0 +1,4 @@ +var less = { + logLevel: 4, + errorReporting: 'console' +}; diff --git a/packages/less/test/browser/runner-atrule-passthrough-spec.js b/packages/less/test/browser/runner-atrule-passthrough-spec.js new file mode 100644 index 0000000000..73584512d3 --- /dev/null +++ b/packages/less/test/browser/runner-atrule-passthrough-spec.js @@ -0,0 +1,3 @@ +describe('less.js atrule passthrough', function () { + testLessEqualsInDocument(); +}); From 00e7de3f84eb05d571c08020c9e31230ded7e7bc Mon Sep 17 00:00:00 2001 From: Oliver Pike Date: Fri, 12 May 2023 05:49:19 -0700 Subject: [PATCH 2/4] Fixes less#3675 - LESS detects @apply as variable (ISSUE) --- packages/less/src/less/tree/quoted.js | 10 +++++++++- packages/less/src/less/tree/variable.js | 3 ++- packages/test-data/css/_main/atrule-passthrough.css | 5 +++++ packages/test-data/less/_main/atrule-passthrough.less | 5 +++++ 4 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 packages/test-data/css/_main/atrule-passthrough.css create mode 100644 packages/test-data/less/_main/atrule-passthrough.less diff --git a/packages/less/src/less/tree/quoted.js b/packages/less/src/less/tree/quoted.js index cb0d56b12f..c6dbfd738e 100644 --- a/packages/less/src/less/tree/quoted.js +++ b/packages/less/src/less/tree/quoted.js @@ -34,7 +34,15 @@ Quoted.prototype = Object.assign(new Node(), { const that = this; let value = this.value; const variableReplacement = function (_, name) { - const v = new Variable(`@${name}`, that.getIndex(), that.fileInfo()).eval(context, true); + let v; + try { + v = new Variable(`@${name}`, that.getIndex(), that.fileInfo()).eval(context, true); + } catch (e) { + if (e.type !== 'Name') { + throw e; + } + return `@${name}`; + } return (v instanceof Quoted) ? v.value : v.toCSS(); }; const propertyReplacement = function (_, name) { diff --git a/packages/less/src/less/tree/variable.js b/packages/less/src/less/tree/variable.js index 460356f5c5..a81e3ecef0 100644 --- a/packages/less/src/less/tree/variable.js +++ b/packages/less/src/less/tree/variable.js @@ -46,7 +46,8 @@ Variable.prototype = Object.assign(new Node(), { this.evaluating = false; return variable; } else { - throw { type: 'PassThrough', + throw { type: 'Name', + message: `variable ${name} is undefined`, filename: this.fileInfo().filename, index: this.getIndex() }; } diff --git a/packages/test-data/css/_main/atrule-passthrough.css b/packages/test-data/css/_main/atrule-passthrough.css new file mode 100644 index 0000000000..db0bdd0dd9 --- /dev/null +++ b/packages/test-data/css/_main/atrule-passthrough.css @@ -0,0 +1,5 @@ +.test { + --iron-autogrow-textarea: { + @apply --app-font-monospace; + }; +} diff --git a/packages/test-data/less/_main/atrule-passthrough.less b/packages/test-data/less/_main/atrule-passthrough.less new file mode 100644 index 0000000000..9dd26b8607 --- /dev/null +++ b/packages/test-data/less/_main/atrule-passthrough.less @@ -0,0 +1,5 @@ +.test { + --iron-autogrow-textarea: { + @apply --app-font-monospace; + } +} From 7cf515abac3fdac9f3be8adfad62734b01ccc60a Mon Sep 17 00:00:00 2001 From: Oliver Pike Date: Fri, 12 May 2023 06:08:20 -0700 Subject: [PATCH 3/4] Fixes less#3675 - LESS detects @apply as variable (ISSUE) --- packages/less/test/browser/generator/runner.config.js | 8 -------- packages/test-data/less/_main/atrule-passthrough.less | 2 +- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/packages/less/test/browser/generator/runner.config.js b/packages/less/test/browser/generator/runner.config.js index d1c1723ae7..8e63cde3e3 100644 --- a/packages/less/test/browser/generator/runner.config.js +++ b/packages/less/test/browser/generator/runner.config.js @@ -138,14 +138,6 @@ module.exports = { outfile: 'tmp/browser/test-runner-global-vars.html' } }, - atrulePassthrough: { - src: ['test/browser/less/atrule-passthrough/*.less'], - options: { - helpers: 'test/browser/runner-atrule-passthrough-options.js', - specs: 'test/browser/runner-atrule-passthrough-spec.js', - outfile: 'tmp/browser/test-runner-atrule-passthrough.html' - } - }, postProcessorPlugin: { src: [`${lessFolder}/postProcessorPlugin/*.less`], options: { diff --git a/packages/test-data/less/_main/atrule-passthrough.less b/packages/test-data/less/_main/atrule-passthrough.less index 9dd26b8607..25bea9210d 100644 --- a/packages/test-data/less/_main/atrule-passthrough.less +++ b/packages/test-data/less/_main/atrule-passthrough.less @@ -1,5 +1,5 @@ .test { - --iron-autogrow-textarea: { + --iron-autogrow-textarea: { @apply --app-font-monospace; } } From 004abf3f1d3064fcaeb758bfe037ec471668a4d2 Mon Sep 17 00:00:00 2001 From: Oliver Pike Date: Fri, 12 May 2023 06:21:12 -0700 Subject: [PATCH 4/4] Fixes less#3675 - LESS detects @apply as variable (ISSUE) --- packages/less/src/less/tree/expression.js | 11 +---------- .../less/test/browser/css/atrule-passthrough/test.css | 5 ----- packages/less/test/browser/generator/runner.config.js | 2 +- .../test/browser/less/atrule-passthrough/test.less | 5 ----- .../test/browser/runner-atrule-passthrough-options.js | 4 ---- .../test/browser/runner-atrule-passthrough-spec.js | 3 --- 6 files changed, 2 insertions(+), 28 deletions(-) delete mode 100644 packages/less/test/browser/css/atrule-passthrough/test.css delete mode 100644 packages/less/test/browser/less/atrule-passthrough/test.less delete mode 100644 packages/less/test/browser/runner-atrule-passthrough-options.js delete mode 100644 packages/less/test/browser/runner-atrule-passthrough-spec.js diff --git a/packages/less/src/less/tree/expression.js b/packages/less/src/less/tree/expression.js index 4b3ddd8e83..121492f9cc 100644 --- a/packages/less/src/less/tree/expression.js +++ b/packages/less/src/less/tree/expression.js @@ -38,16 +38,7 @@ Expression.prototype = Object.assign(new Node(), { if (this.value[0].parens && !this.value[0].parensInOp && !context.inCalc) { doubleParen = true; } - try { - returnValue = this.value[0].eval(context); - } catch (e) { - // Pass through at-rules to the css file. - if (e.type === 'PassThrough') { - returnValue = this; - } else { - throw e; - } - } + returnValue = this.value[0].eval(context); } else { returnValue = this; } diff --git a/packages/less/test/browser/css/atrule-passthrough/test.css b/packages/less/test/browser/css/atrule-passthrough/test.css deleted file mode 100644 index 9dd26b8607..0000000000 --- a/packages/less/test/browser/css/atrule-passthrough/test.css +++ /dev/null @@ -1,5 +0,0 @@ -.test { - --iron-autogrow-textarea: { - @apply --app-font-monospace; - } -} diff --git a/packages/less/test/browser/generator/runner.config.js b/packages/less/test/browser/generator/runner.config.js index 8e63cde3e3..f78d87e21e 100644 --- a/packages/less/test/browser/generator/runner.config.js +++ b/packages/less/test/browser/generator/runner.config.js @@ -182,5 +182,5 @@ module.exports = { specs: 'test/browser/runner-filemanagerPlugin.js', outfile: 'tmp/browser/test-runner-filemanager-plugin.html' } - }, + } } diff --git a/packages/less/test/browser/less/atrule-passthrough/test.less b/packages/less/test/browser/less/atrule-passthrough/test.less deleted file mode 100644 index 9dd26b8607..0000000000 --- a/packages/less/test/browser/less/atrule-passthrough/test.less +++ /dev/null @@ -1,5 +0,0 @@ -.test { - --iron-autogrow-textarea: { - @apply --app-font-monospace; - } -} diff --git a/packages/less/test/browser/runner-atrule-passthrough-options.js b/packages/less/test/browser/runner-atrule-passthrough-options.js deleted file mode 100644 index 85b1d5a001..0000000000 --- a/packages/less/test/browser/runner-atrule-passthrough-options.js +++ /dev/null @@ -1,4 +0,0 @@ -var less = { - logLevel: 4, - errorReporting: 'console' -}; diff --git a/packages/less/test/browser/runner-atrule-passthrough-spec.js b/packages/less/test/browser/runner-atrule-passthrough-spec.js deleted file mode 100644 index 73584512d3..0000000000 --- a/packages/less/test/browser/runner-atrule-passthrough-spec.js +++ /dev/null @@ -1,3 +0,0 @@ -describe('less.js atrule passthrough', function () { - testLessEqualsInDocument(); -});