| "use strict"; |
| var __importDefault = (this && this.__importDefault) || function (mod) { |
| return (mod && mod.__esModule) ? mod : { "default": mod }; |
| }; |
| var _a; |
| Object.defineProperty(exports, "__esModule", { value: true }); |
| const experimental_utils_1 = require("@typescript-eslint/experimental-utils"); |
| const no_invalid_this_1 = __importDefault(require("eslint/lib/rules/no-invalid-this")); |
| const util_1 = require("../util"); |
| exports.default = util_1.createRule({ |
| name: 'no-invalid-this', |
| meta: { |
| type: 'suggestion', |
| docs: { |
| description: 'disallow `this` keywords outside of classes or class-like objects', |
| category: 'Best Practices', |
| recommended: false, |
| extendsBaseRule: true, |
| }, |
| messages: (_a = no_invalid_this_1.default.meta.messages) !== null && _a !== void 0 ? _a : { |
| unexpectedThis: "Unexpected 'this'.", |
| }, |
| schema: no_invalid_this_1.default.meta.schema, |
| }, |
| defaultOptions: [{ capIsConstructor: true }], |
| create(context) { |
| const rules = no_invalid_this_1.default.create(context); |
| const argList = []; |
| return Object.assign(Object.assign({}, rules), { FunctionDeclaration(node) { |
| argList.push(node.params.some(param => param.type === experimental_utils_1.AST_NODE_TYPES.Identifier && param.name === 'this')); |
| // baseRule's work |
| rules.FunctionDeclaration(node); |
| }, |
| 'FunctionDeclaration:exit'(node) { |
| argList.pop(); |
| // baseRule's work |
| rules['FunctionDeclaration:exit'](node); |
| }, |
| FunctionExpression(node) { |
| argList.push(node.params.some(param => param.type === experimental_utils_1.AST_NODE_TYPES.Identifier && param.name === 'this')); |
| // baseRule's work |
| rules.FunctionExpression(node); |
| }, |
| 'FunctionExpression:exit'(node) { |
| argList.pop(); |
| // baseRule's work |
| rules['FunctionExpression:exit'](node); |
| }, |
| ThisExpression(node) { |
| const lastFnArg = argList[argList.length - 1]; |
| if (lastFnArg) { |
| return; |
| } |
| // baseRule's work |
| rules.ThisExpression(node); |
| } }); |
| }, |
| }); |
| //# sourceMappingURL=no-invalid-this.js.map |