var t = require("../../types");
var _ = require("lodash");
var addDisplayName = function (id, call) {
if (!call || !t.isCallExpression(call)) return;
var callee = call.callee;
if (!t.isMemberExpression(callee)) return;
// not React
var obj = callee.object;
if (!t.isIdentifier(obj, { name: "React" })) return;
// not createClass
var prop = callee.property;
Iif (!t.isIdentifier(prop, { name: "createClass" })) return;
// no arguments
var args = call.arguments;
Iif (args.length !== 1) return;
// not an object
var first = args[0];
Iif (!t.isObjectExpression(first)) return;
var props = first.properties;
var safe = true;
_.each(props, function (prop) {
if (t.isIdentifier(prop.key, { name: "displayName" })) {
return safe = false;
}
});
if (safe) {
props.unshift(t.property("init", t.identifier("displayName"), t.literal(id)));
}
};
exports.AssignmentExpression =
exports.Property =
exports.VariableDeclarator = function (node) {
var left, right;
if (t.isAssignmentExpression(node)) {
left = node.left;
right = node.right;
} else if (t.isProperty(node)) {
left = node.key;
right = node.value;
} else Eif (t.isVariableDeclarator(node)) {
left = node.id;
right = node.init;
}
if (t.isMemberExpression(left)) {
left = left.property;
}
if (t.isIdentifier(left)) {
addDisplayName(left.name, right);
}
};
|