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; if (!t.isIdentifier(prop, { name: "createClass" })) return; // no arguments var args = call.arguments; if (args.length !== 1) return; // not an object var first = args[0]; if (!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 if (t.isVariableDeclarator(node)) { left = node.id; right = node.init; } if (t.isMemberExpression(left)) { left = left.property; } if (t.isIdentifier(left)) { addDisplayName(left.name, right); } };