/**
 * Copyright 2018 The AMP HTML Authors. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS-IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

'use strict';

//------------------------------------------------------------------------------
// Rule Definition
//------------------------------------------------------------------------------

module.exports = {
  meta: {
    type: "suggestion",
    schema: [],
    messages: {
      unexpected: "Unexpected use of `module.exports` statement."
    }
  },

  create(context) {

    function isModuleExports(node) {
      return node.object.type === 'Identifier' && (/^(module.exports)$/).test(node.object.name)
    }

    return {
      MemberExpression(node) {
        if (isModuleExports(node)) {
            context.report({ node, messageId: "unexpected"});
        }
      }
    };
  }
};

/**
 * Copyright 2018 The AMP HTML Authors. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS-IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

'use strict';

//------------------------------------------------------------------------------
// Rule Definition
//------------------------------------------------------------------------------

module.exports = {
  meta: {
    type: "suggestion",
    schema: [],
    messages: {
      unexpected: "Unexpected use of `module.exports` statement."
    }
  },

  create(context) {
    return {
      "MemberExpression[object.name=module][property.name=exports]": function(node) {
        context.report({ node, messageId: "unexpected"});
      }      
    };
  }
};

Update no-module-exports eslint rule (#19581)