From 97f455d8b418bef9b3cbfc7165b45c8165c29b66 Mon Sep 17 00:00:00 2001 From: James Browning Date: Thu, 25 Jan 2024 23:35:06 +1300 Subject: [PATCH 1/4] Disable checking accessors for prefer-readonly --- packages/eslint-plugin/src/rules/prefer-readonly.ts | 1 + .../eslint-plugin/tests/rules/prefer-readonly.test.ts | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/packages/eslint-plugin/src/rules/prefer-readonly.ts b/packages/eslint-plugin/src/rules/prefer-readonly.ts index ea4ff0e1bc4c..eaf376a4b2dc 100644 --- a/packages/eslint-plugin/src/rules/prefer-readonly.ts +++ b/packages/eslint-plugin/src/rules/prefer-readonly.ts @@ -300,6 +300,7 @@ class ClassScope { node.name.kind === ts.SyntaxKind.PrivateIdentifier ) || tsutils.isModifierFlagSet(node, ts.ModifierFlags.Readonly) || + tsutils.isModifierFlagSet(node, ts.ModifierFlags.Accessor) || ts.isComputedPropertyName(node.name) ) { return; diff --git a/packages/eslint-plugin/tests/rules/prefer-readonly.test.ts b/packages/eslint-plugin/tests/rules/prefer-readonly.test.ts index 39262c6fbb4e..2a15bb7134b9 100644 --- a/packages/eslint-plugin/tests/rules/prefer-readonly.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-readonly.test.ts @@ -717,6 +717,15 @@ class Foo { } } `, + ` + class TestAccessors { + private static accessor staticAcc = 1; + static accessor #staticAcc = 1; + + private accessor acc = 3; + accessor #acc = 3; + } + `, ], invalid: [ { From 3a393f1a3f1086dd8f1e5b271e3a43fa5e61eefb Mon Sep 17 00:00:00 2001 From: James Browning Date: Sun, 28 Jan 2024 21:03:53 +1300 Subject: [PATCH 2/4] Granular accessor tests --- .../tests/rules/prefer-readonly.test.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/packages/eslint-plugin/tests/rules/prefer-readonly.test.ts b/packages/eslint-plugin/tests/rules/prefer-readonly.test.ts index 2a15bb7134b9..3b1c25e75f11 100644 --- a/packages/eslint-plugin/tests/rules/prefer-readonly.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-readonly.test.ts @@ -718,11 +718,22 @@ class Foo { } `, ` - class TestAccessors { + class TestStaticPrivateAccessor { private static accessor staticAcc = 1; + } + `, + ` + class TestStaticPrivateFieldAccessor { static accessor #staticAcc = 1; - + } + `, + ` + class TestPrivateAccessor { private accessor acc = 3; + } + `, + ` + class TestPrivateFieldAccessor { accessor #acc = 3; } `, From d2622ac33ef107bd1c6d98102b4e3782aa7f379e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josh=20Goldberg=20=E2=9C=A8?= Date: Mon, 29 Jan 2024 11:43:43 -0500 Subject: [PATCH 3/4] Update packages/eslint-plugin/src/rules/prefer-readonly.ts --- packages/eslint-plugin/src/rules/prefer-readonly.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/eslint-plugin/src/rules/prefer-readonly.ts b/packages/eslint-plugin/src/rules/prefer-readonly.ts index eaf376a4b2dc..247b25711453 100644 --- a/packages/eslint-plugin/src/rules/prefer-readonly.ts +++ b/packages/eslint-plugin/src/rules/prefer-readonly.ts @@ -299,8 +299,7 @@ class ClassScope { tsutils.isModifierFlagSet(node, ts.ModifierFlags.Private) || node.name.kind === ts.SyntaxKind.PrivateIdentifier ) || - tsutils.isModifierFlagSet(node, ts.ModifierFlags.Readonly) || - tsutils.isModifierFlagSet(node, ts.ModifierFlags.Accessor) || + tsutils.isModifierFlagSet(node, ts.ModifierFlags.Accessor | ts.ModifierFlags.Readonly) ts.isComputedPropertyName(node.name) ) { return; From 64267cd49823f1882f43d5a87fe729e564e910b6 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Mon, 29 Jan 2024 11:44:01 -0500 Subject: [PATCH 4/4] fix: formatting and || for isModifierFlagSet suggestion --- packages/eslint-plugin/src/rules/prefer-readonly.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/eslint-plugin/src/rules/prefer-readonly.ts b/packages/eslint-plugin/src/rules/prefer-readonly.ts index 247b25711453..faf8db39a55c 100644 --- a/packages/eslint-plugin/src/rules/prefer-readonly.ts +++ b/packages/eslint-plugin/src/rules/prefer-readonly.ts @@ -299,7 +299,10 @@ class ClassScope { tsutils.isModifierFlagSet(node, ts.ModifierFlags.Private) || node.name.kind === ts.SyntaxKind.PrivateIdentifier ) || - tsutils.isModifierFlagSet(node, ts.ModifierFlags.Accessor | ts.ModifierFlags.Readonly) + tsutils.isModifierFlagSet( + node, + ts.ModifierFlags.Accessor | ts.ModifierFlags.Readonly, + ) || ts.isComputedPropertyName(node.name) ) { return;