From 8f44968c625ac0edc54105b29db613a463439c8a Mon Sep 17 00:00:00 2001 From: lonyele Date: Thu, 22 Aug 2019 17:15:13 +0900 Subject: [PATCH 1/7] feat: add support of "exceptMethods" --- .../src/rules/explicit-member-accessibility.ts | 18 ++++++++++++++---- .../explicit-member-accessibility.test.ts | 15 +++++++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts index a1d61d56ded..e92c54f7873 100644 --- a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts +++ b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts @@ -18,6 +18,7 @@ interface Config { properties?: AccessibilityLevel; parameterProperties?: AccessibilityLevel; }; + exceptMethods?: string[]; } type Options = [Config]; @@ -57,8 +58,15 @@ export default util.createRule({ properties: accessibilityLevel, parameterProperties: accessibilityLevel, }, + additionalProperties: false, }, + exceptMethods: { + type: 'array', + items: { + type: 'string', + }, + }, }, additionalProperties: false, }, @@ -74,7 +82,7 @@ export default util.createRule({ const methodCheck = overrides.methods || baseCheck; const propCheck = overrides.properties || baseCheck; const paramPropCheck = overrides.parameterProperties || baseCheck; - + const exceptMethods = option.exceptMethods || []; /** * Generates the report for rule violations */ @@ -116,14 +124,16 @@ export default util.createRule({ nodeType = `${methodDefinition.kind} property accessor`; break; } - if (check === 'off') { - return; - } const methodName = util.getNameFromClassMember( methodDefinition, sourceCode, ); + + if (check === 'off' || exceptMethods.includes(methodName)) { + return; + } + if ( check === 'no-public' && methodDefinition.accessibility === 'public' 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 051cfb30642..1e20a5b2136 100644 --- a/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts +++ b/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts @@ -258,6 +258,21 @@ class Test { }, ], }, + { + filename: 'test.ts', + code: ` +class Test { + getX () { + return this.x + } +} + `, + options: [ + { + exceptMethods: ['getX'], + }, + ], + }, ], invalid: [ { From 874382c30d0e3912c91bd1562fb4327f931c75b9 Mon Sep 17 00:00:00 2001 From: lonyele Date: Thu, 22 Aug 2019 17:35:26 +0900 Subject: [PATCH 2/7] docs: add exceptMethods on md --- .../rules/explicit-member-accessibility.md | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/packages/eslint-plugin/docs/rules/explicit-member-accessibility.md b/packages/eslint-plugin/docs/rules/explicit-member-accessibility.md index 96295809138..702a41beba1 100644 --- a/packages/eslint-plugin/docs/rules/explicit-member-accessibility.md +++ b/packages/eslint-plugin/docs/rules/explicit-member-accessibility.md @@ -20,6 +20,7 @@ type AccessibilityLevel = type Options = { accessibility?: AccessibilityLevel; + exceptMethods?: string[]; overrides?: { accessors?: AccessibilityLevel; constructors?: AccessibilityLevel; @@ -310,6 +311,25 @@ class Animal { } ``` +### Except specific methods + +If you want to ignore some specific methods, you can do it by specifing method names. +e.g. `[ { exceptMethods: ['specificMethod', 'whateverMethod'] } ]` + +```ts +class Animal { + get specificMethod() { + console.log('No error because you specified this method on option'); + } + get whateverMethod() { + console.log('No error because you specified this method on option'); + } + public get otherMethod() { + console.log('This method comply with this rule'); + } +} +``` + ## When Not To Use It If you think defaulting to public is a good default, then you should consider using the `no-public` setting. If you want to mix implicit and explicit public members then disable this rule. From 6ca1cbb3532b0808b3079a2f331c9e11cff57e88 Mon Sep 17 00:00:00 2001 From: lonyele Date: Fri, 6 Sep 2019 18:58:57 +0900 Subject: [PATCH 3/7] chore: clean up code style after rebase --- .../eslint-plugin/src/rules/explicit-member-accessibility.ts | 2 +- 1 file changed, 1 insertion(+), 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 e92c54f7873..68b25c0faca 100644 --- a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts +++ b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts @@ -11,6 +11,7 @@ type AccessibilityLevel = interface Config { accessibility?: AccessibilityLevel; + exceptMethods?: string[]; overrides?: { accessors?: AccessibilityLevel; constructors?: AccessibilityLevel; @@ -18,7 +19,6 @@ interface Config { properties?: AccessibilityLevel; parameterProperties?: AccessibilityLevel; }; - exceptMethods?: string[]; } type Options = [Config]; From f564f0def5001ca0bee5f7d070abd5357ef8ae08 Mon Sep 17 00:00:00 2001 From: lonyele Date: Sun, 8 Sep 2019 21:43:04 +0900 Subject: [PATCH 4/7] docs: clarify docs --- .../eslint-plugin/docs/rules/explicit-member-accessibility.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/eslint-plugin/docs/rules/explicit-member-accessibility.md b/packages/eslint-plugin/docs/rules/explicit-member-accessibility.md index 702a41beba1..a185c90d9db 100644 --- a/packages/eslint-plugin/docs/rules/explicit-member-accessibility.md +++ b/packages/eslint-plugin/docs/rules/explicit-member-accessibility.md @@ -313,7 +313,7 @@ class Animal { ### Except specific methods -If you want to ignore some specific methods, you can do it by specifing method names. +If you want to ignore some specific methods, you can do it by specifing method names. Note that this option does not care for the context, and will ignore every method with these names, which could lead to it missing some cases. You should use this sparingly. e.g. `[ { exceptMethods: ['specificMethod', 'whateverMethod'] } ]` ```ts From 1fc0c21ab502be7ed19c48624f822d74aee4e9f3 Mon Sep 17 00:00:00 2001 From: lonyele Date: Sun, 8 Sep 2019 21:43:43 +0900 Subject: [PATCH 5/7] feat: change exceptMethods to ignoredMethodNames --- .../src/rules/explicit-member-accessibility.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts index 68b25c0faca..864c630da17 100644 --- a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts +++ b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts @@ -11,7 +11,7 @@ type AccessibilityLevel = interface Config { accessibility?: AccessibilityLevel; - exceptMethods?: string[]; + ignoredMethodNames?: string[]; overrides?: { accessors?: AccessibilityLevel; constructors?: AccessibilityLevel; @@ -61,7 +61,7 @@ export default util.createRule({ additionalProperties: false, }, - exceptMethods: { + ignoredMethodNames: { type: 'array', items: { type: 'string', @@ -82,7 +82,7 @@ export default util.createRule({ const methodCheck = overrides.methods || baseCheck; const propCheck = overrides.properties || baseCheck; const paramPropCheck = overrides.parameterProperties || baseCheck; - const exceptMethods = option.exceptMethods || []; + const ignoredMethodNames = new Set(option.ignoredMethodNames || []); /** * Generates the report for rule violations */ @@ -130,7 +130,7 @@ export default util.createRule({ sourceCode, ); - if (check === 'off' || exceptMethods.includes(methodName)) { + if (check === 'off' || ignoredMethodNames.has(methodName)) { return; } From 2dbe4f37e363a4a61c30c1a48e710a63ce3a8599 Mon Sep 17 00:00:00 2001 From: lonyele Date: Sun, 8 Sep 2019 21:44:32 +0900 Subject: [PATCH 6/7] test: add more tests for sanity check --- .../explicit-member-accessibility.test.ts | 47 ++++++++++++++++++- 1 file changed, 46 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 1e20a5b2136..7eb6bcd076b 100644 --- a/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts +++ b/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts @@ -261,6 +261,51 @@ class Test { { filename: 'test.ts', code: ` +class Test { + public getX () { + return this.x + } +} + `, + options: [ + { + ignoredMethodNames: ['getX'], + }, + ], + }, + { + filename: 'test.ts', + code: ` +class Test { + public static getX () { + return this.x + } +} + `, + options: [ + { + ignoredMethodNames: ['getX'], + }, + ], + }, + { + filename: 'test.ts', + code: ` +class Test { + get getX () { + return this.x + } +} + `, + options: [ + { + ignoredMethodNames: ['getX'], + }, + ], + }, + { + filename: 'test.ts', + code: ` class Test { getX () { return this.x @@ -269,7 +314,7 @@ class Test { `, options: [ { - exceptMethods: ['getX'], + ignoredMethodNames: ['getX'], }, ], }, From 3108f3792d8c875d236eb9a8d7d1e9e217a85882 Mon Sep 17 00:00:00 2001 From: lonyele Date: Sun, 8 Sep 2019 21:59:32 +0900 Subject: [PATCH 7/7] docs: fix applying feedback --- .../eslint-plugin/docs/rules/explicit-member-accessibility.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/eslint-plugin/docs/rules/explicit-member-accessibility.md b/packages/eslint-plugin/docs/rules/explicit-member-accessibility.md index a185c90d9db..a8625778391 100644 --- a/packages/eslint-plugin/docs/rules/explicit-member-accessibility.md +++ b/packages/eslint-plugin/docs/rules/explicit-member-accessibility.md @@ -20,7 +20,7 @@ type AccessibilityLevel = type Options = { accessibility?: AccessibilityLevel; - exceptMethods?: string[]; + ignoredMethodNames?: string[]; overrides?: { accessors?: AccessibilityLevel; constructors?: AccessibilityLevel; @@ -314,7 +314,7 @@ class Animal { ### Except specific methods If you want to ignore some specific methods, you can do it by specifing method names. Note that this option does not care for the context, and will ignore every method with these names, which could lead to it missing some cases. You should use this sparingly. -e.g. `[ { exceptMethods: ['specificMethod', 'whateverMethod'] } ]` +e.g. `[ { ignoredMethodNames: ['specificMethod', 'whateverMethod'] } ]` ```ts class Animal {