From 9be5ffb72e2a542f2d8bea8f654c6fd5f3c32d85 Mon Sep 17 00:00:00 2001 From: Michal Zgliczynski Date: Mon, 18 Mar 2024 11:31:55 +0100 Subject: [PATCH 1/2] Make no-unused-collection not trigger if writing to elements of said collection --- src/rules/no-unused-collection.ts | 2 +- tests/rules/no-unused-collection.test.ts | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/rules/no-unused-collection.ts b/src/rules/no-unused-collection.ts index fd00cb72..3a1e5e7b 100644 --- a/src/rules/no-unused-collection.ts +++ b/src/rules/no-unused-collection.ts @@ -186,7 +186,7 @@ function isElementWrite(statement: TSESTree.ExpressionStatement, ref: TSESLint.S function isMemberExpressionReference(lhs: TSESTree.Node, ref: TSESLint.Scope.Reference): boolean { return ( lhs.type === 'MemberExpression' && - (isReferenceTo(ref, lhs.object) || isMemberExpressionReference(lhs.object, ref)) + (isReferenceTo(ref, lhs.object)) ); } diff --git a/tests/rules/no-unused-collection.test.ts b/tests/rules/no-unused-collection.test.ts index 6fc358e0..cd90085a 100644 --- a/tests/rules/no-unused-collection.test.ts +++ b/tests/rules/no-unused-collection.test.ts @@ -34,7 +34,7 @@ function invalidTest(code: string) { }; } -ruleTester.run('Primitive return types should be used.', rule, { +ruleTester.run('Collection contents should be used', rule, { valid: [ { code: ` @@ -169,6 +169,13 @@ ruleTester.run('Primitive return types should be used.', rule, { { code: `export const collection = new Map()`, }, + { + code: ` + const a = {foo: false}; + const xs = [a]; + xs[0].foo = true; + `, + }, ], invalid: [ { @@ -197,11 +204,6 @@ ruleTester.run('Primitive return types should be used.', rule, { arrayConstructor[1] = 42; } `), - invalidTest(`function nok2_1() { - let arrayConstructor = new Array(); // Noncompliant - arrayConstructor[1][2] = 42; - } - `), invalidTest(`function nok3() { let arrayWithoutNew = Array(); // Noncompliant arrayWithoutNew[1] = 42; From f3c5aecd3531642c819c51e3b5834b68dc0ae9f4 Mon Sep 17 00:00:00 2001 From: Michal Zgliczynski Date: Mon, 18 Mar 2024 15:45:19 +0100 Subject: [PATCH 2/2] format --- src/rules/no-unused-collection.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/rules/no-unused-collection.ts b/src/rules/no-unused-collection.ts index 3a1e5e7b..949d83fe 100644 --- a/src/rules/no-unused-collection.ts +++ b/src/rules/no-unused-collection.ts @@ -184,10 +184,7 @@ function isElementWrite(statement: TSESTree.ExpressionStatement, ref: TSESLint.S } function isMemberExpressionReference(lhs: TSESTree.Node, ref: TSESLint.Scope.Reference): boolean { - return ( - lhs.type === 'MemberExpression' && - (isReferenceTo(ref, lhs.object)) - ); + return lhs.type === 'MemberExpression' && isReferenceTo(ref, lhs.object); } function isIdentifier(node: TSESTree.Node, ...values: string[]): node is TSESTree.Identifier {