From 34e3ea61ce1693bad751f961799b2f7b89836ba9 Mon Sep 17 00:00:00 2001 From: jurcovicovam Date: Sun, 19 Jul 2015 14:07:21 +0200 Subject: [PATCH 1/2] Import inline located inside file imported by reference should not be present in output. Close #2620 --- lib/less/tree/import.js | 2 +- test/less/import/import-inline-invalid-css.less | 1 + test/less/import/import-reference.less | 5 ++++- 3 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 test/less/import/import-inline-invalid-css.less diff --git a/lib/less/tree/import.js b/lib/less/tree/import.js index 18e439285..b084eef34 100644 --- a/lib/less/tree/import.js +++ b/lib/less/tree/import.js @@ -127,7 +127,7 @@ Import.prototype.eval = function (context) { } } - if (this.options.inline) { + if (this.options.inline && !this.path.currentFileInfo.reference) { var contents = new Anonymous(this.root, 0, {filename: this.importedFilename}, true, true); return this.features ? new Media([contents], this.features.value) : [contents]; } else if (this.css) { diff --git a/test/less/import/import-inline-invalid-css.less b/test/less/import/import-inline-invalid-css.less new file mode 100644 index 000000000..274a76e3b --- /dev/null +++ b/test/less/import/import-inline-invalid-css.less @@ -0,0 +1 @@ +@import (inline) "invalid-css.less"; \ No newline at end of file diff --git a/test/less/import/import-reference.less b/test/less/import/import-reference.less index cadf09f65..77d06765f 100644 --- a/test/less/import/import-reference.less +++ b/test/less/import/import-reference.less @@ -86,4 +86,7 @@ } @rules1: {property: value;}; @rules2: {property: value;}; -} \ No newline at end of file +} + +@import (inline) "invalid-css.less"; +@import "import-inline-invalid-css.less"; \ No newline at end of file From 19dc9e78b9abebfcf7ac13561f205b68094f9012 Mon Sep 17 00:00:00 2001 From: jurcovicovam Date: Sat, 25 Jul 2015 16:03:06 +0200 Subject: [PATCH 2/2] Added `getIsReferenced` into anonymous node. The visibility of anonymous node type now works the same way as visibility of ruleset or directive. --- lib/less/tree/anonymous.js | 12 ++++++++++-- lib/less/tree/import.js | 4 ++-- lib/less/visitors/to-css-visitor.js | 9 +++++++++ test/css/import-reference.css | 4 ++++ test/less/import-reference.less | 2 ++ test/less/import/import-reference.less | 10 ++++++++-- 6 files changed, 35 insertions(+), 6 deletions(-) diff --git a/lib/less/tree/anonymous.js b/lib/less/tree/anonymous.js index b7d7f2b6a..2790e2f5e 100644 --- a/lib/less/tree/anonymous.js +++ b/lib/less/tree/anonymous.js @@ -1,16 +1,17 @@ var Node = require("./node"); -var Anonymous = function (value, index, currentFileInfo, mapLines, rulesetLike) { +var Anonymous = function (value, index, currentFileInfo, mapLines, rulesetLike, referenced) { this.value = value; this.index = index; this.mapLines = mapLines; this.currentFileInfo = currentFileInfo; this.rulesetLike = (typeof rulesetLike === 'undefined') ? false : rulesetLike; + this.isReferenced = referenced || false; }; Anonymous.prototype = new Node(); Anonymous.prototype.type = "Anonymous"; Anonymous.prototype.eval = function () { - return new Anonymous(this.value, this.index, this.currentFileInfo, this.mapLines, this.rulesetLike); + return new Anonymous(this.value, this.index, this.currentFileInfo, this.mapLines, this.rulesetLike, this.isReferenced); }; Anonymous.prototype.compare = function (other) { return other.toCSS && this.toCSS() === other.toCSS() ? 0 : undefined; @@ -21,4 +22,11 @@ Anonymous.prototype.isRulesetLike = function() { Anonymous.prototype.genCSS = function (context, output) { output.add(this.value, this.currentFileInfo, this.index, this.mapLines); }; +Anonymous.prototype.markReferenced = function () { + this.isReferenced = true; +}; +Anonymous.prototype.getIsReferenced = function () { + return !this.currentFileInfo || !this.currentFileInfo.reference || this.isReferenced; +}; + module.exports = Anonymous; diff --git a/lib/less/tree/import.js b/lib/less/tree/import.js index b084eef34..d604e6fd9 100644 --- a/lib/less/tree/import.js +++ b/lib/less/tree/import.js @@ -127,8 +127,8 @@ Import.prototype.eval = function (context) { } } - if (this.options.inline && !this.path.currentFileInfo.reference) { - var contents = new Anonymous(this.root, 0, {filename: this.importedFilename}, true, true); + if (this.options.inline) { + var contents = new Anonymous(this.root, 0, {filename: this.importedFilename, reference: this.path.currentFileInfo.reference}, true, true, false); return this.features ? new Media([contents], this.features.value) : [contents]; } else if (this.css) { var newImport = new Import(this.evalPath(context), features, this.options, this.index); diff --git a/lib/less/visitors/to-css-visitor.js b/lib/less/visitors/to-css-visitor.js index 2ba758656..5ad0a5864 100644 --- a/lib/less/visitors/to-css-visitor.js +++ b/lib/less/visitors/to-css-visitor.js @@ -294,6 +294,15 @@ ToCSSVisitor.prototype = { rule.value = toValue(spacedGroups); } }); + }, + + visitAnonymous: function(anonymousNode, visitArgs) { + if (!anonymousNode.getIsReferenced()) { + return ; + } + + anonymousNode.accept(this._visitor); + return anonymousNode; } }; diff --git a/test/css/import-reference.css b/test/css/import-reference.css index 7aa622c65..07005c737 100644 --- a/test/css/import-reference.css +++ b/test/css/import-reference.css @@ -91,3 +91,7 @@ div#id.class[a=1][b=2].class:not(1) { color: red; } } +div { + this isn't very valid CSS. +} +this isn't very valid CSS. diff --git a/test/less/import-reference.less b/test/less/import-reference.less index ec597553f..1ad02f415 100644 --- a/test/less/import-reference.less +++ b/test/less/import-reference.less @@ -22,3 +22,5 @@ } .mixin-with-nested-selectors(); .mixin-with-directives(some-name); + +.print-referenced-import-inline(); diff --git a/test/less/import/import-reference.less b/test/less/import/import-reference.less index 77d06765f..0d3d9db78 100644 --- a/test/less/import/import-reference.less +++ b/test/less/import/import-reference.less @@ -88,5 +88,11 @@ @rules2: {property: value;}; } -@import (inline) "invalid-css.less"; -@import "import-inline-invalid-css.less"; \ No newline at end of file +@import (inline, multiple) "invalid-css.less"; +@import "import-inline-invalid-css.less"; +.print-referenced-import-inline() { + div { + @import (inline, multiple) "invalid-css.less"; + } + @import (inline, multiple) "invalid-css.less"; +} \ No newline at end of file