Add import visitor

This commit is contained in:
Luke Page
2013-02-21 18:16:04 +00:00
parent c56db94b7d
commit 39f669e83c
6 changed files with 26 additions and 4 deletions

View File

@@ -40,6 +40,7 @@ less:
${SRC}/tree.js\
${SRC}/env.js\
${SRC}/visitor.js\
${SRC}/import-visitor.js\
${SRC}/browser.js\
build/amd.js >> ${DIST}
@@echo "})(window);" >> ${DIST}
@@ -62,6 +63,7 @@ rhino:
${SRC}/parser.js\
${SRC}/env.js\
${SRC}/visitor.js\
${SRC}/import-visitor.js\
${SRC}/functions.js\
${SRC}/colors.js\
${SRC}/tree/*.js\

View File

@@ -0,0 +1,17 @@
(function (tree) {
tree.importVisitor = function(root) {
this._visitor = new tree.visitor(this);
this._visitor.visit(root);
};
tree.importVisitor.prototype = {
visitImport: function (importNode, visitArgs) {
return importNode;
},
visitRule: function (ruleNode, visitArgs) {
visitArgs.visitDeeper = false;
return ruleNode;
}
};
})(require('./tree'));

View File

@@ -214,5 +214,6 @@ require('./env');
require('./functions');
require('./colors');
require('./visitor.js');
require('./import-visitor.js');
for (var k in less) { exports[k] = less[k]; }

View File

@@ -467,6 +467,8 @@ less.Parser = function Parser(env) {
]
};
}
new tree.importVisitor(root);
finish = function (e) {
e = error || e || parser.imports.error;

View File

@@ -9,7 +9,7 @@ tree.Extend = function Extend(elements, option, index) {
tree.Extend.prototype = {
type: "Extend",
accept: function (visitor) {
this.selector = visitor.visit(this.ruleset);
this.selector = visitor.visit(this.selector);
},
eval: function (env, selectors) {
var selfSelectors = findSelfSelectors(selectors || env.selectors),

View File

@@ -20,15 +20,15 @@
visitArgs;
if (func) {
visitArgs = {visitDeeper: true};
node = func(node);
node = func(node, visitArgs);
}
if ((!visitArgs || visitArgs.visitDeeper) && node.accept) {
if ((!visitArgs || visitArgs.visitDeeper) && node && node.accept) {
node.accept(this);
}
return node;
},
visitArray: function(nodes) {
var i, newNodes;
var i, newNodes = [];
for(i = 0; i < nodes.length; i++) {
var evald = this.visit(nodes[i]);
if (evald instanceof Array) {