From 618badcd39736f566d6b9591cfa475f994b74fb0 Mon Sep 17 00:00:00 2001 From: Sergey Shuliak Date: Sat, 19 Oct 2019 02:10:40 +0300 Subject: [PATCH] fix(eslint-plugin): fix unbound metod triggering on class method bind fix #700 --- packages/eslint-plugin/src/rules/unbound-method.ts | 12 ++++++++++++ .../eslint-plugin/tests/rules/unbound-method.test.ts | 10 ++++++++++ 2 files changed, 22 insertions(+) diff --git a/packages/eslint-plugin/src/rules/unbound-method.ts b/packages/eslint-plugin/src/rules/unbound-method.ts index 46bbe779c66c..8e27874271cc 100644 --- a/packages/eslint-plugin/src/rules/unbound-method.ts +++ b/packages/eslint-plugin/src/rules/unbound-method.ts @@ -111,6 +111,9 @@ function isSafeUse(node: TSESTree.Node): boolean { case AST_NODE_TYPES.CallExpression: return parent.callee === node; + case AST_NODE_TYPES.AssignmentExpression: + return isBindCalled(parent.right); + case AST_NODE_TYPES.ConditionalExpression: return parent.test === node; @@ -134,3 +137,12 @@ function isSafeUse(node: TSESTree.Node): boolean { return false; } + +function isBindCalled(parent: TSESTree.Expression): boolean { + return ( + parent.type === AST_NODE_TYPES.CallExpression && + parent.callee.type === AST_NODE_TYPES.MemberExpression && + parent.callee.property.type === AST_NODE_TYPES.Identifier && + parent.callee.property.name === 'bind' + ); +} diff --git a/packages/eslint-plugin/tests/rules/unbound-method.test.ts b/packages/eslint-plugin/tests/rules/unbound-method.test.ts index 520b28fc1d1d..352b9ee9a283 100644 --- a/packages/eslint-plugin/tests/rules/unbound-method.test.ts +++ b/packages/eslint-plugin/tests/rules/unbound-method.test.ts @@ -143,6 +143,16 @@ class CommunicationError { class CommunicationError {} const x = CommunicationError.prototype; `, + // https://github.com/typescript-eslint/typescript-eslint/issues/700 + ` +class ContainsBoundMethod { + constructor() { + this.handleSomething = this.handleSomething.bind(this); + } + + handleSomething(): void {} +} + `, ], invalid: [ {