From f2e4ef742f94a925c5f3387e0624271a2ed8b6f2 Mon Sep 17 00:00:00 2001 From: Susisu Date: Tue, 15 Dec 2020 18:16:15 +0900 Subject: [PATCH 1/3] test(eslint-plugin): property and method selectors should have higher precedence than other meta selctors --- .../tests/rules/naming-convention.test.ts | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/packages/eslint-plugin/tests/rules/naming-convention.test.ts b/packages/eslint-plugin/tests/rules/naming-convention.test.ts index 2a1f1c177cd6..93173074ae94 100644 --- a/packages/eslint-plugin/tests/rules/naming-convention.test.ts +++ b/packages/eslint-plugin/tests/rules/naming-convention.test.ts @@ -1453,6 +1453,31 @@ ruleTester.run('naming-convention', rule, { }, ], }, + { + code: ` + const obj = { + Foo: 42, + Bar() { + return 42; + }, + }; + `, + parserOptions, + options: [ + { + selector: 'memberLike', + format: ['camelCase'], + }, + { + selector: 'property', + format: ['PascalCase'], + }, + { + selector: 'method', + format: ['PascalCase'], + }, + ], + }, ], invalid: [ { From 5fd2fcbd1a90ab3686b81d5432b01b8547de86f0 Mon Sep 17 00:00:00 2001 From: Susisu Date: Tue, 15 Dec 2020 18:30:17 +0900 Subject: [PATCH 2/3] fix(eslint-plugin): fix precedence of method and property meta selectors --- .../src/rules/naming-convention-utils/shared.ts | 14 +++++++++++++- .../src/rules/naming-convention-utils/validator.ts | 14 +++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/packages/eslint-plugin/src/rules/naming-convention-utils/shared.ts b/packages/eslint-plugin/src/rules/naming-convention-utils/shared.ts index 71a6a4b99b7b..927fe83f9ef0 100644 --- a/packages/eslint-plugin/src/rules/naming-convention-utils/shared.ts +++ b/packages/eslint-plugin/src/rules/naming-convention-utils/shared.ts @@ -17,4 +17,16 @@ function isMetaSelector( return selector in MetaSelectors; } -export { selectorTypeToMessageString, isMetaSelector }; +function isMethodOrPropertySelector( + selector: IndividualAndMetaSelectorsString | Selectors | MetaSelectors, +): boolean { + return ( + selector === MetaSelectors.method || selector === MetaSelectors.property + ); +} + +export { + selectorTypeToMessageString, + isMetaSelector, + isMethodOrPropertySelector, +}; diff --git a/packages/eslint-plugin/src/rules/naming-convention-utils/validator.ts b/packages/eslint-plugin/src/rules/naming-convention-utils/validator.ts index 8945c726368e..b1e106bd06dd 100644 --- a/packages/eslint-plugin/src/rules/naming-convention-utils/validator.ts +++ b/packages/eslint-plugin/src/rules/naming-convention-utils/validator.ts @@ -13,7 +13,11 @@ import { UnderscoreOptions, } from './enums'; import { PredefinedFormatToCheckFunction } from './format'; -import { isMetaSelector, selectorTypeToMessageString } from './shared'; +import { + isMetaSelector, + isMethodOrPropertySelector, + selectorTypeToMessageString, +} from './shared'; import type { Context, NormalizedSelector } from './types'; import * as util from '../../util'; @@ -49,6 +53,14 @@ function createValidator( return -1; } + // for backward compatibility, method and property have higher precedence than other meta selectors + if (isMethodOrPropertySelector(a.selector)) { + return -1; + } + if (isMethodOrPropertySelector(b.selector)) { + return 1; + } + // both aren't meta selectors // sort descending - the meta selectors are "least important" return b.selector - a.selector; From 77c36ce03928a0898dab3c4818cf4681bbb76830 Mon Sep 17 00:00:00 2001 From: Susisu Date: Mon, 21 Dec 2020 19:53:36 +0900 Subject: [PATCH 3/3] fix(eslint-plugin): make sorting order consistent --- .../src/rules/naming-convention-utils/validator.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/eslint-plugin/src/rules/naming-convention-utils/validator.ts b/packages/eslint-plugin/src/rules/naming-convention-utils/validator.ts index b1e106bd06dd..a683933d61b4 100644 --- a/packages/eslint-plugin/src/rules/naming-convention-utils/validator.ts +++ b/packages/eslint-plugin/src/rules/naming-convention-utils/validator.ts @@ -53,11 +53,14 @@ function createValidator( return -1; } + const aIsMethodOrProperty = isMethodOrPropertySelector(a.selector); + const bIsMethodOrProperty = isMethodOrPropertySelector(b.selector); + // for backward compatibility, method and property have higher precedence than other meta selectors - if (isMethodOrPropertySelector(a.selector)) { + if (aIsMethodOrProperty && !bIsMethodOrProperty) { return -1; } - if (isMethodOrPropertySelector(b.selector)) { + if (!aIsMethodOrProperty && bIsMethodOrProperty) { return 1; }