From df7fe80eb4bd7e266cca20d81c0ad6b49f3e25bb Mon Sep 17 00:00:00 2001 From: Ronen Amiel Date: Tue, 4 Feb 2025 21:14:49 +0200 Subject: [PATCH 1/3] handle accessor property with explicit-member-accessibility --- .../rules/explicit-member-accessibility.ts | 8 +- .../src/util/getMemberHeadLoc.ts | 2 + .../explicit-member-accessibility.test.ts | 94 +++++++++++++++++++ 3 files changed, 103 insertions(+), 1 deletion(-) diff --git a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts index cf1a0492e95c..d3e734c72b7c 100644 --- a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts +++ b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts @@ -196,8 +196,10 @@ export default createRule({ */ function findPublicKeyword( node: + | TSESTree.AccessorProperty | TSESTree.MethodDefinition | TSESTree.PropertyDefinition + | TSESTree.TSAbstractAccessorProperty | TSESTree.TSAbstractMethodDefinition | TSESTree.TSAbstractPropertyDefinition | TSESTree.TSParameterProperty, @@ -238,8 +240,10 @@ export default createRule({ */ function getMissingAccessibilitySuggestions( node: + | TSESTree.AccessorProperty | TSESTree.MethodDefinition | TSESTree.PropertyDefinition + | TSESTree.TSAbstractAccessorProperty | TSESTree.TSAbstractMethodDefinition | TSESTree.TSAbstractPropertyDefinition | TSESTree.TSParameterProperty, @@ -284,7 +288,9 @@ export default createRule({ */ function checkPropertyAccessibilityModifier( propertyDefinition: + | TSESTree.AccessorProperty | TSESTree.PropertyDefinition + | TSESTree.TSAbstractAccessorProperty | TSESTree.TSAbstractPropertyDefinition, ): void { if (propertyDefinition.key.type === AST_NODE_TYPES.PrivateIdentifier) { @@ -389,7 +395,7 @@ export default createRule({ return { 'MethodDefinition, TSAbstractMethodDefinition': checkMethodAccessibilityModifier, - 'PropertyDefinition, TSAbstractPropertyDefinition': + 'PropertyDefinition, TSAbstractPropertyDefinition, AccessorProperty, TSAbstractAccessorProperty': checkPropertyAccessibilityModifier, TSParameterProperty: checkParameterPropertyAccessibilityModifier, }; diff --git a/packages/eslint-plugin/src/util/getMemberHeadLoc.ts b/packages/eslint-plugin/src/util/getMemberHeadLoc.ts index d28058d45691..9949068539fe 100644 --- a/packages/eslint-plugin/src/util/getMemberHeadLoc.ts +++ b/packages/eslint-plugin/src/util/getMemberHeadLoc.ts @@ -30,8 +30,10 @@ import { export function getMemberHeadLoc( sourceCode: Readonly, node: + | TSESTree.AccessorProperty | TSESTree.MethodDefinition | TSESTree.PropertyDefinition + | TSESTree.TSAbstractAccessorProperty | TSESTree.TSAbstractMethodDefinition | TSESTree.TSAbstractPropertyDefinition, ): TSESTree.SourceLocation { diff --git a/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts b/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts index 133ce5671e21..8f67814d4ca8 100644 --- a/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts +++ b/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts @@ -1919,6 +1919,100 @@ abstract class SomeClass { }, { code: ` +class SomeClass { + accessor foo = 1; +} + `, + errors: [ + { + column: 3, + endColumn: 15, + endLine: 3, + line: 3, + messageId: 'missingAccessibility', + suggestions: [ + { + data: { type: 'public' }, + messageId: 'addExplicitAccessibility', + output: ` +class SomeClass { + public accessor foo = 1; +} + `, + }, + { + data: { type: 'private' }, + messageId: 'addExplicitAccessibility', + output: ` +class SomeClass { + private accessor foo = 1; +} + `, + }, + { + data: { type: 'protected' }, + messageId: 'addExplicitAccessibility', + output: ` +class SomeClass { + protected accessor foo = 1; +} + `, + }, + ], + }, + ], + options: [{ accessibility: 'explicit' }], + output: null, + }, + { + code: ` +abstract class SomeClass { + abstract accessor foo: string; +} + `, + errors: [ + { + column: 3, + endColumn: 24, + endLine: 3, + line: 3, + messageId: 'missingAccessibility', + suggestions: [ + { + data: { type: 'public' }, + messageId: 'addExplicitAccessibility', + output: ` +abstract class SomeClass { + public abstract accessor foo: string; +} + `, + }, + { + data: { type: 'private' }, + messageId: 'addExplicitAccessibility', + output: ` +abstract class SomeClass { + private abstract accessor foo: string; +} + `, + }, + { + data: { type: 'protected' }, + messageId: 'addExplicitAccessibility', + output: ` +abstract class SomeClass { + protected abstract accessor foo: string; +} + `, + }, + ], + }, + ], + options: [{ accessibility: 'explicit' }], + output: null, + }, + { + code: ` class DecoratedClass { constructor(@foo @bar() readonly arg: string) {} @foo @bar() x: string; From da894b43f73b7113748bd2327eb9a1d1b4bf32c9 Mon Sep 17 00:00:00 2001 From: Ronen Amiel Date: Thu, 6 Feb 2025 17:41:34 +0200 Subject: [PATCH 2/3] add valid tests --- .../rules/explicit-member-accessibility.test.ts | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts b/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts index 8f67814d4ca8..500f4676b554 100644 --- a/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts +++ b/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts @@ -308,7 +308,6 @@ class Test { `, options: [{ accessibility: 'no-public' }], }, - // private members { code: ` class Test { @@ -318,6 +317,20 @@ class Test { `, options: [{ accessibility: 'explicit' }], }, + { + code: ` +class Test { + private accessor foo = 1; +} + `, + }, + { + code: ` +abstract class Test { + private abstract accessor foo: number; +} + `, + }, ], invalid: [ { From 488caeed16e53c7f257807097596c6bf5f684919 Mon Sep 17 00:00:00 2001 From: Ronen Amiel Date: Thu, 6 Feb 2025 17:43:51 +0200 Subject: [PATCH 3/3] remove unnecessary output: null --- .../tests/rules/explicit-member-accessibility.test.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts b/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts index 500f4676b554..6aa2bf795749 100644 --- a/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts +++ b/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts @@ -1975,7 +1975,6 @@ class SomeClass { }, ], options: [{ accessibility: 'explicit' }], - output: null, }, { code: ` @@ -2022,7 +2021,6 @@ abstract class SomeClass { }, ], options: [{ accessibility: 'explicit' }], - output: null, }, { code: ` pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy