From fe8e6a9f85dcdf561a8910dfa9bc36db4263caf6 Mon Sep 17 00:00:00 2001 From: armano2 Date: Sat, 14 May 2022 21:35:54 +0200 Subject: [PATCH 1/2] fix(eslint-plugin): [prefer-readonly] correct issue with anonymus functions #2590 --- packages/eslint-plugin/src/rules/prefer-readonly.ts | 8 ++++++-- .../tests/rules/prefer-readonly.test.ts | 13 +++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/packages/eslint-plugin/src/rules/prefer-readonly.ts b/packages/eslint-plugin/src/rules/prefer-readonly.ts index 19597264bbc..816a79371fb 100644 --- a/packages/eslint-plugin/src/rules/prefer-readonly.ts +++ b/packages/eslint-plugin/src/rules/prefer-readonly.ts @@ -270,8 +270,12 @@ class ClassScope { classNode: ts.ClassLikeDeclaration, private readonly onlyInlineLambdas?: boolean, ) { - this.checker = checker; - this.classType = checker.getTypeAtLocation(classNode); + const classType = checker.getTypeAtLocation(classNode); + if (tsutils.isIntersectionType(classType)) { + this.classType = classType.types[0]; + } else { + this.classType = classType; + } for (const member of classNode.members) { if (ts.isPropertyDeclaration(member)) { diff --git a/packages/eslint-plugin/tests/rules/prefer-readonly.test.ts b/packages/eslint-plugin/tests/rules/prefer-readonly.test.ts index c1602f01913..e0f1c73c74d 100644 --- a/packages/eslint-plugin/tests/rules/prefer-readonly.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-readonly.test.ts @@ -292,6 +292,19 @@ class Foo { }, { code: ` +function ClassWithName {}>(Base: TBase) { + return class extends Base { + private _name: string; + + public test(value: string) { + this._name = value; + } + }; +} + `, + }, + { + code: ` class Foo { private value: Record = {}; From e59b087a5ea6069099e9c01c9eb59d4ebccb6b86 Mon Sep 17 00:00:00 2001 From: armano2 Date: Sat, 14 May 2022 22:14:07 +0200 Subject: [PATCH 2/2] test(eslint-plugin): add missing invalid case --- .../tests/rules/prefer-readonly.test.ts | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/packages/eslint-plugin/tests/rules/prefer-readonly.test.ts b/packages/eslint-plugin/tests/rules/prefer-readonly.test.ts index e0f1c73c74d..91e8213da57 100644 --- a/packages/eslint-plugin/tests/rules/prefer-readonly.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-readonly.test.ts @@ -717,5 +717,30 @@ class Foo { } `, }, + { + code: ` +function ClassWithName {}>(Base: TBase) { + return class extends Base { + private _name: string; + }; +} + `, + output: ` +function ClassWithName {}>(Base: TBase) { + return class extends Base { + private readonly _name: string; + }; +} + `, + errors: [ + { + data: { + name: '_name', + }, + line: 4, + messageId: 'preferReadonly', + }, + ], + }, ], });