MCPcopy Create free account
hub / github.com/reactjs/react-rails / visitSuperCallExpression

Function visitSuperCallExpression

lib/assets/javascripts/JSXTransformer.js:14037–14079  ·  view source on GitHub ↗

* @param {function} traverse * @param {object} node * @param {array} path * @param {object} state

(traverse, node, path, state)

Source from the content-addressed store, hash-verified

14035 * @param {object} state
14036 */
14037function visitSuperCallExpression(traverse, node, path, state) {
14038 var superClassName = state.superClass.name;
14039
14040 if (node.callee.type === Syntax.Identifier) {
14041 if (_isConstructorMethod(state.methodNode)) {
14042 utils.append(superClassName + '.call(', state);
14043 } else {
14044 var protoProp = SUPER_PROTO_IDENT_PREFIX + superClassName;
14045 if (state.methodNode.key.type === Syntax.Identifier) {
14046 protoProp += '.' + state.methodNode.key.name;
14047 } else if (state.methodNode.key.type === Syntax.Literal) {
14048 protoProp += '[' + JSON.stringify(state.methodNode.key.value) + ']';
14049 }
14050 utils.append(protoProp + ".call(", state);
14051 }
14052 utils.move(node.callee.range[1], state);
14053 } else if (node.callee.type === Syntax.MemberExpression) {
14054 utils.append(SUPER_PROTO_IDENT_PREFIX + superClassName, state);
14055 utils.move(node.callee.object.range[1], state);
14056
14057 if (node.callee.computed) {
14058 // ["a" + "b"]
14059 utils.catchup(node.callee.property.range[1] + ']'.length, state);
14060 } else {
14061 // .ab
14062 utils.append('.' + node.callee.property.name, state);
14063 }
14064
14065 utils.append('.call(', state);
14066 utils.move(node.callee.range[1], state);
14067 }
14068
14069 utils.append('this', state);
14070 if (node.arguments.length > 0) {
14071 utils.append(',', state);
14072 utils.catchupWhiteSpace(node.arguments[0].range[0], state);
14073 traverse(node.arguments, path, state);
14074 }
14075
14076 utils.catchupWhiteSpace(node.range[1], state);
14077 utils.append(')', state);
14078 return false;
14079}
14080visitSuperCallExpression.test = function(node, path, state) {
14081 if (state.superClass && node.type === Syntax.CallExpression) {
14082 var callee = node.callee;

Callers

nothing calls this directly

Calls 2

_isConstructorMethodFunction · 0.85
traverseFunction · 0.85

Tested by

no test coverage detected