From b75ea8aee998aa3629bceba125628025f6107a6e Mon Sep 17 00:00:00 2001 From: Dhruv Sringari Date: Sat, 15 Feb 2025 11:34:53 -0500 Subject: [PATCH] Fix bug with variable composition --- source/rules/prefer-composition.ts | 27 +++++++++++++++++++++++---- tests/rules/prefer-composition.ts | 10 +++++----- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/source/rules/prefer-composition.ts b/source/rules/prefer-composition.ts index 90a2962..2f72285 100644 --- a/source/rules/prefer-composition.ts +++ b/source/rules/prefer-composition.ts @@ -12,7 +12,7 @@ import { isCallExpression, isIdentifier, isMemberExpression, - isVariableDeclarator, + isVariableDeclarator } from "eslint-etc"; import { ruleCreator } from "../utils"; @@ -141,6 +141,18 @@ const rule = ruleCreator({ return entry; } + function getArgumentName(callExpression: es.CallExpression) { + const { arguments: args } = callExpression; + if (args.length === 0) { + return undefined; + } + const [arg] = args; + if (isIdentifier(arg)) { + return arg.name; + } + return undefined; + } + function getMethodCalleeName(callExpression: es.CallExpression) { const { callee } = callExpression; if (isMemberExpression(callee)) { @@ -227,7 +239,7 @@ const rule = ruleCreator({ const { name } = identifier; const { addCallExpressions, subscriptions } = entry; const addCallExpression = addCallExpressions.find( - (callExpression) => getMethodCalleeName(callExpression) === name + (callExpression) => getArgumentName(callExpression) === name ); if (!addCallExpression) { return false; @@ -236,8 +248,15 @@ const rule = ruleCreator({ if (!object || !couldBeSubscription(object)) { return false; } - subscriptions.add(name); - return true; + if (isMemberExpression(object) && isIdentifier(object.property)) { + subscriptions.add(object.property.name); + return true; + } + if (isIdentifier(object)) { + subscriptions.add(object.name); + return true; + } + return false; } return { diff --git a/tests/rules/prefer-composition.ts b/tests/rules/prefer-composition.ts index 7084a8e..f3da21c 100644 --- a/tests/rules/prefer-composition.ts +++ b/tests/rules/prefer-composition.ts @@ -5,8 +5,8 @@ import { stripIndent } from "common-tags"; import { fromFixture } from "eslint-etc"; -import rule = require("../../source/rules/prefer-composition"); import { ruleTester } from "../utils"; +import rule = require("../../source/rules/prefer-composition"); ruleTester({ types: true }).run("prefer-composition", rule, { valid: [ @@ -46,10 +46,10 @@ ruleTester({ types: true }).run("prefer-composition", rule, { value: string; private subscription = new Subscription(); ngOnInit() { - let subscription = of("foo").subscribe(value => this.value = value); - this.subscription.add(subscription);1 - subscription = of("bar").subscribe(value => this.value = value); - this.subscription.add(subscription); + let foo = of("foo").subscribe(value => this.value = value); + this.subscription.add(foo); + foo = of("bar").subscribe(value => this.value = value); + this.subscription.add(foo); } ngOnDestroy() { this.subscription.unsubscribe();