text: /**
   * @fileoverview Rule to disallow use of Object.prototype builtins on objects
   * @author Andrew Levine
   */
  "use strict";
  
  //------------------------------------------------------------------------------
  // Rule Definition
  //------------------------------------------------------------------------------
  
  module.exports = {
      meta: {
          docs: {
              description: "disallow calling some `Object.prototype` methods directly on objects",
              category: "Possible Errors",
              recommended: false,
              url: "https://eslint.org/docs/rules/no-prototype-builtins"
          },
  
          schema: []
      },
  
      create(context) {
          const DISALLOWED_PROPS = [
              "hasOwnProperty",
              "isPrototypeOf",
              "propertyIsEnumerable"
          ];
  
          /**
           * Reports if a disallowed property is used in a CallExpression
           * @param {ASTNode} node The CallExpression node.
           * @returns {void}
           */
          function disallowBuiltIns(node) {
              if (node.callee.type !== "MemberExpression" || node.callee.computed) {
                  return;
              }
              const propName = node.callee.property.name;
  
              if (DISALLOWED_PROPS.indexOf(propName) > -1) {
                  context.report({
                      message: "Do not access Object.prototype method '{{prop}}' from target object.",
                      loc: node.callee.property.loc.start,
                      data: { prop: propName },
                      node
                  });
              }
          }
  
          return {
              CallExpression: disallowBuiltIns
          };
      }
  };
  