From ad0f2bea46edd7c022772d8804adcaf6f1fc2c03 Mon Sep 17 00:00:00 2001 From: Gavin Barron Date: Wed, 27 Mar 2019 09:09:05 -0700 Subject: [PATCH] fix(eslint-plugin): member-naming false flagging constructors (#376) Fixes #359 --- packages/eslint-plugin/docs/rules/member-naming.md | 4 +++- packages/eslint-plugin/src/rules/member-naming.ts | 3 +++ packages/eslint-plugin/tests/rules/member-naming.test.ts | 8 ++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/eslint-plugin/docs/rules/member-naming.md b/packages/eslint-plugin/docs/rules/member-naming.md index 04c9e882c10..0d66a9f466c 100644 --- a/packages/eslint-plugin/docs/rules/member-naming.md +++ b/packages/eslint-plugin/docs/rules/member-naming.md @@ -4,7 +4,9 @@ It can be helpful to enforce naming conventions for `private` (and sometimes `pr ## Rule Details -This rule allows you to enforce conventions for class property names by their visibility. By default, it enforces nothing. +This rule allows you to enforce conventions for class property and method names by their visibility. By default, it enforces nothing. + +> Note: constructors are explicitly ignored regardless of the the regular expression options provided ## Options diff --git a/packages/eslint-plugin/src/rules/member-naming.ts b/packages/eslint-plugin/src/rules/member-naming.ts index 2efdf6ea307..1e6fcdd226e 100644 --- a/packages/eslint-plugin/src/rules/member-naming.ts +++ b/packages/eslint-plugin/src/rules/member-naming.ts @@ -75,6 +75,9 @@ export default util.createRule({ const accessibility: Modifiers = node.accessibility || 'public'; const convention = conventions[accessibility]; + const method = node as TSESTree.MethodDefinition; + if (method.kind === 'constructor') return; + if (!convention || convention.test(name)) return; context.report({ diff --git a/packages/eslint-plugin/tests/rules/member-naming.test.ts b/packages/eslint-plugin/tests/rules/member-naming.test.ts index c826600714b..96ec4b104f3 100644 --- a/packages/eslint-plugin/tests/rules/member-naming.test.ts +++ b/packages/eslint-plugin/tests/rules/member-naming.test.ts @@ -11,6 +11,14 @@ ruleTester.run('member-naming', rule, { code: `class Class { _fooBar() {} }`, options: [{ public: '^_' }], }, + { + code: `class Class { private constructor(); _fooBar() {} }`, + options: [{ private: '^_' }], + }, + { + code: `class Class { constructor() {}; _fooBar() {} }`, + options: [{ public: '^_' }], + }, { code: `class Class { public _fooBar() {} }`, options: [{ public: '^_' }],