lib/rules/constructor-super.js
function isPossibleConstructor(node) {
    if (!node) {
        return false;
    }

    switch (node.type) {
        case "ClassExpression":
        case "FunctionExpression":
        case "ThisExpression":
        case "MemberExpression":
        case "CallExpression":
        case "NewExpression":
        case "YieldExpression":
        case "TaggedTemplateExpression":
        case "MetaProperty":
            return true;

        case "Identifier":
            return node.name !== "undefined";

        case "AssignmentExpression":
            return isPossibleConstructor(node.right);

        case "LogicalExpression":
            return (
                isPossibleConstructor(node.left) ||
                isPossibleConstructor(node.right)
            );

        case "ConditionalExpression":
            return (
                isPossibleConstructor(node.alternate) ||
                isPossibleConstructor(node.consequent)
            );

        case "SequenceExpression": {
            const lastExpression = node.expressions[node.expressions.length - 1];

            return isPossibleConstructor(lastExpression);
        }

        default:
            return false;
    }
}
function isPossibleConstructor(node) {
    if (!node) {
        return false;
    }

    switch (node.type) {
        case "ClassExpression":
        case "FunctionExpression":
        case "ThisExpression":
        case "MemberExpression":
        case "CallExpression":
        case "NewExpression":
        case "YieldExpression":
        case "TaggedTemplateExpression":
        case "MetaProperty":
            return true;

        case "Identifier":
            return node.name !== "undefined";

        case "AssignmentExpression":
            return isPossibleConstructor(node.right);

        case "LogicalExpression":
            return (
                isPossibleConstructor(node.left) ||
                isPossibleConstructor(node.right)
            );

        case "ConditionalExpression":
            return (
                isPossibleConstructor(node.alternate) ||
                isPossibleConstructor(node.consequent)
            );

        case "SequenceExpression": {
            const lastExpression = node.expressions[node.expressions.length - 1];

            return isPossibleConstructor(lastExpression);
        }

        default:
            return false;
    }
}
function isPossibleConstructor ( node ) { if ( ! node ) { return false ; } switch ( node . type ) { case "ClassExpression" : case "FunctionExpression" : case "ThisExpression" : case "MemberExpression" : case "CallExpression" : case "NewExpression" : case "YieldExpression" : case "TaggedTemplateExpression" : case "MetaProperty" : return true ; case "Identifier" : return node . name !== "undefined" ; case "AssignmentExpression" : return isPossibleConstructor ( node . right ) ; case "LogicalExpression" : return ( isPossibleConstructor ( node . left ) || isPossibleConstructor ( node . right ) ) ; case "ConditionalExpression" : return ( isPossibleConstructor ( node . alternate ) || isPossibleConstructor ( node . consequent ) ) ; case "SequenceExpression" : { const lastExpression = node . expressions [ node . expressions . length - 1 ] ; return isPossibleConstructor ( lastExpression ) ; } default : return false ; } }
Checks whether a given node can be a constructor or not.

@param {ASTNode} node - A node to check.
@returns {boolean} `true` if the node can be a constructor.
Checks whether a given node can be a constructor or not .