From 39b583c6e10e330553acb778cff5ebff8b518f9d Mon Sep 17 00:00:00 2001 From: rhysd Date: Tue, 5 Mar 2019 16:41:00 +0900 Subject: [PATCH 1/4] feat(eslint-plugin): make explicit-member-accessibility fixable --- .../rules/explicit-member-accessibility.ts | 7 ++++++ .../explicit-member-accessibility.test.ts | 24 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts index afae022c262..69bb216127a 100644 --- a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts +++ b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts @@ -12,6 +12,7 @@ export default util.createRule({ category: 'Best Practices', recommended: 'error', }, + fixable: 'code', messages: { missingAccessibility: 'Missing accessibility modifier on {{type}} {{name}}.', @@ -38,6 +39,9 @@ export default util.createRule({ type: 'method definition', name: util.getNameFromPropertyName(methodDefinition.key), }, + fix(fixer) { + return [fixer.insertTextBefore(methodDefinition, 'public ')]; + }, }); } } @@ -60,6 +64,9 @@ export default util.createRule({ type: 'class property', name: util.getNameFromPropertyName(classProperty.key), }, + fix(fixer) { + return [fixer.insertTextBefore(classProperty, '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 e630450689c..1f38fd0fe4b 100644 --- a/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts +++ b/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts @@ -62,6 +62,14 @@ class Test { column: 3, }, ], + output: ` +class Test { + public x: number + public getX () { + return this.x + } +} + `, }, { filename: 'test.ts', @@ -84,6 +92,14 @@ class Test { column: 3, }, ], + output: ` +class Test { + private x: number + public getX () { + return this.x + } +} + `, }, { filename: 'test.ts', @@ -115,6 +131,14 @@ class Test { column: 3, }, ], + output: ` +class Test { + public x?: number + public getX? () { + return this.x + } +} + `, }, ], }); From a70aae96b3971f2bab37068d637c516c8cbc51ff Mon Sep 17 00:00:00 2001 From: rhysd Date: Tue, 5 Mar 2019 17:03:21 +0900 Subject: [PATCH 2/4] test(eslint-plugin): add test cases for explicit-member-accessibility where `readonly` is specified. --- .../explicit-member-accessibility.test.ts | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) 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 1f38fd0fe4b..32980e8d751 100644 --- a/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts +++ b/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts @@ -36,6 +36,19 @@ class Test { getX () { return 1; } +} + `, + }, + { + filename: 'test.ts', + code: ` +class Test { + protected readonly name: string + private readonly x: number + public readonly b: boolean + public getX () { + return this.x + } } `, }, @@ -137,6 +150,36 @@ class Test { public getX? () { return this.x } +} + `, + }, + { + filename: 'test.ts', + code: ` +class Test { + readonly x: number + public getX () { + return this.x + } +} + `, + errors: [ + { + messageId: 'missingAccessibility', + data: { + type: 'class property', + name: 'x', + }, + line: 3, + column: 3, + }, + ], + output: ` +class Test { + public readonly x: number + public getX () { + return this.x + } } `, }, From 4f07f32d456f116a039f49cc02a2b18e6e3f4b52 Mon Sep 17 00:00:00 2001 From: rhysd Date: Tue, 5 Mar 2019 17:26:37 +0900 Subject: [PATCH 3/4] docs(eslint-plugin): add fixable mark to explicit-member-accessibility --- packages/eslint-plugin/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/eslint-plugin/README.md b/packages/eslint-plugin/README.md index 10268b00635..1b6c8314181 100644 --- a/packages/eslint-plugin/README.md +++ b/packages/eslint-plugin/README.md @@ -117,7 +117,7 @@ Then you should add `airbnb` (or `airbnb-base`) to your `extends` section of `.e | [`@typescript-eslint/camelcase`](./docs/rules/camelcase.md) | Enforce camelCase naming convention | :heavy_check_mark: | | | [`@typescript-eslint/class-name-casing`](./docs/rules/class-name-casing.md) | Require PascalCased class and interface names (`class-name` from TSLint) | :heavy_check_mark: | | | [`@typescript-eslint/explicit-function-return-type`](./docs/rules/explicit-function-return-type.md) | Require explicit return types on functions and class methods | :heavy_check_mark: | | -| [`@typescript-eslint/explicit-member-accessibility`](./docs/rules/explicit-member-accessibility.md) | Require explicit accessibility modifiers on class properties and methods (`member-access` from TSLint) | :heavy_check_mark: | | +| [`@typescript-eslint/explicit-member-accessibility`](./docs/rules/explicit-member-accessibility.md) | Require explicit accessibility modifiers on class properties and methods (`member-access` from TSLint) | :heavy_check_mark: | :wrench: | | [`@typescript-eslint/generic-type-naming`](./docs/rules/generic-type-naming.md) | Enforces naming of generic type variables | | | | [`@typescript-eslint/indent`](./docs/rules/indent.md) | Enforce consistent indentation (`indent` from TSLint) | :heavy_check_mark: | :wrench: | | [`@typescript-eslint/interface-name-prefix`](./docs/rules/interface-name-prefix.md) | Require that interface names be prefixed with `I` (`interface-name` from TSLint) | :heavy_check_mark: | | From 040ba8181eb68437959fd5b1d3c5fbf79171b9dc Mon Sep 17 00:00:00 2001 From: rhysd Date: Wed, 6 Mar 2019 22:25:38 +0900 Subject: [PATCH 4/4] fix(eslint-plugin): prefer returning single fix --- .../eslint-plugin/src/rules/explicit-member-accessibility.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts index 69bb216127a..dc55ae3b620 100644 --- a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts +++ b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts @@ -40,7 +40,7 @@ export default util.createRule({ name: util.getNameFromPropertyName(methodDefinition.key), }, fix(fixer) { - return [fixer.insertTextBefore(methodDefinition, 'public ')]; + return fixer.insertTextBefore(methodDefinition, 'public '); }, }); } @@ -65,7 +65,7 @@ export default util.createRule({ name: util.getNameFromPropertyName(classProperty.key), }, fix(fixer) { - return [fixer.insertTextBefore(classProperty, 'public ')]; + return fixer.insertTextBefore(classProperty, 'public '); }, }); }