diff --git a/lib/less/tree/ruleset.js b/lib/less/tree/ruleset.js index e6e582c4..9f7eb2a3 100644 --- a/lib/less/tree/ruleset.js +++ b/lib/less/tree/ruleset.js @@ -47,7 +47,15 @@ tree.Ruleset.prototype = { // Evaluate mixin calls. for (var i = 0; i < ruleset.rules.length; i++) { if (ruleset.rules[i] instanceof tree.mixin.Call) { - rules = ruleset.rules[i].eval(env); + rules = ruleset.rules[i].eval(env).filter(function(r) { + if ((r instanceof tree.Rule) && r.variable) { + // do not pollute the scope if the variable is + // already there. consider returning false here + // but we need a way to "return" variable from mixins + return !(ruleset.variable(r.name)); + } + return true; + }); ruleset.rules.splice.apply(ruleset.rules, [i, 1].concat(rules)); i += rules.length-1; ruleset.resetCache(); diff --git a/test/css/variables.css b/test/css/variables.css index 27006ecb..31e25894 100644 --- a/test/css/variables.css +++ b/test/css/variables.css @@ -26,7 +26,7 @@ filter: alpha(opacity=42); } .testPollution { - a: 'pollution'; + a: 'no-pollution'; } .units { width: 1px; diff --git a/test/less/variables.less b/test/less/variables.less index b53b8603..0974864a 100644 --- a/test/less/variables.less +++ b/test/less/variables.less @@ -56,11 +56,11 @@ filter: alpha(opacity=@var); } -// test current behaviour .polluteMixin() { @a: 'pollution'; } .testPollution { + @a: 'no-pollution'; a: @a; .polluteMixin(); a: @a;