add types.appendToMemberExpression and types.prependToMemberExpression helpers

This commit is contained in:
Sebastian McKenzie
2015-01-02 16:46:58 +11:00
parent 6e8c73f65f
commit ba48b66458
4 changed files with 27 additions and 12 deletions

View File

@@ -276,9 +276,7 @@ Class.prototype.replaceInstanceSuperReferences = function (methodNode) {
if (callee.object.name !== "super") return;
// super.test(); -> ClassName.prototype.MethodName.call(this);
callee.object = t.memberExpression(callee.object, callee.property, callee.computed);
callee.computed = false;
callee.property = t.identifier("call");
t.appendToMemberExpression(callee, t.identifier("call"));
node.arguments.unshift(t.thisExpression());
}
}

View File

@@ -87,9 +87,7 @@ exports.CallExpression = function (node, parent, file, scope) {
callee.object = t.assignmentExpression("=", temp, callee.object);
}
callee.object = t.memberExpression(callee.object, callee.property, callee.computed);
callee.computed = false;
callee.property = t.identifier("apply");
t.appendToMemberExpression(callee, t.identifier("apply"));
} else {
node.callee = t.memberExpression(node.callee, t.identifier("apply"));
}

View File

@@ -30,7 +30,7 @@ exports.ast = {
if (!node.computed && coreHas(obj) && _.has(core[obj.name], prop.name)) {
this.stop();
return t.memberExpression(t.memberExpression(file._coreId, node.object), node.property, node.computed);
return t.prependToMemberExpression(node, file._coreId);
}
} else if (t.isIdentifier(node) && !t.isMemberExpression(parent) && t.isReferenced(node, parent) && coreHas(node)) {
// new Promise -> new _core.Promise

View File

@@ -118,6 +118,20 @@ t.shallowEqual = function (actual, expected) {
//
t.appendToMemberExpression = function (member, append, computed) {
member.object = t.memberExpression(member.object, member.property, member.computed);
member.property = append;
member.computed = !!computed;
return member;
};
t.prependToMemberExpression = function (member, append) {
member.object = t.memberExpression(append, member.object);
return member;
};
//
t.isDynamic = function (node) {
if (t.isExpressionStatement(node)) {
return t.isDynamic(node.expression);
@@ -130,7 +144,6 @@ t.isDynamic = function (node) {
}
};
// todo: https://github.com/eventualbuddha/ast-util/blob/9bf91c5ce8/lib/index.js#L454-L507
t.isReferenced = function (node, parent) {
// we're a property key and we aren't computed so we aren't referenced
if (t.isProperty(parent) && parent.key === node && !parent.computed) return false;
@@ -152,6 +165,12 @@ t.isReferenced = function (node, parent) {
return false;
};
t.isValidIdentifier = function (name) {
return _.isString(name) && esutils.keyword.isIdentifierName(name) && !esutils.keyword.isKeywordES6(name, true);
};
//
t.toIdentifier = function (name) {
if (t.isIdentifier(name)) return name.name;
@@ -172,10 +191,6 @@ t.toIdentifier = function (name) {
return name || '_';
};
t.isValidIdentifier = function (name) {
return _.isString(name) && esutils.keyword.isIdentifierName(name) && !esutils.keyword.isKeywordES6(name, true);
};
t.ensureBlock = function (node, key) {
key = key || "body";
node[key] = t.toBlock(node[key], node);
@@ -234,6 +249,8 @@ t.toBlock = function (node, parent) {
return t.blockStatement(node);
};
//
t.getUid = function (parent, file, scope) {
var node = parent;
@@ -327,6 +344,8 @@ t.getIds.arrays = {
ObjectPattern: ["properties"]
};
//
t.isLet = function (node) {
return t.isVariableDeclaration(node) && (node.kind !== "var" || node._let);
};