code: function JSXElement(node, parent, scope, file) {
      // filter
      var open = node.openingElement;
      if (hasRefOrSpread(open.attributes)) return;
  
      // init
      var isComponent = true;
      var props = t.objectExpression([]);
      var obj = t.objectExpression([]);
      var key = t.literal(null);
      var type = open.name;
  
      if (t.isJSXIdentifier(type) && react.isCompatTag(type.name)) {
        type = t.literal(type.name);
        isComponent = false;
      }
  
      function pushElemProp(key, value) {
        pushProp(obj.properties, t.identifier(key), value);
      }
  
      function pushProp(objProps, key, value) {
        objProps.push(t.property("init", key, value));
      }
  
      if (node.children.length) {
        var children = react.buildChildren(node);
        children = children.length === 1 ? children[0] : t.arrayExpression(children);
        pushProp(props.properties, t.identifier("children"), children);
      }
  
      // props
      for (var i = 0; i < open.attributes.length; i++) {
        var attr = open.attributes[i];
        if (isJSXAttributeOfName(attr, "key")) {
          key = attr.value;
        } else {
          pushProp(props.properties, attr.name, attr.value || t.identifier("true"));
        }
      }
  
      if (isComponent) {
        props = t.callExpression(file.addHelper("default-props"), [t.memberExpression(type, t.identifier("defaultProps")), props]);
      }
  
      // metadata
      pushElemProp("$$typeof", file.addHelper("typeof-react-element"));
      pushElemProp("type", type);
      pushElemProp("key", key);
      pushElemProp("ref", t.literal(null));
  
      pushElemProp("props", props);
      pushElemProp("_owner", t.literal(null));
  
      return obj;
    }
docs: [Please add a description.]