From 3e9d317cb967ba8b76ecb3710a9649bafb6d1e6d Mon Sep 17 00:00:00 2001 From: KingDarBoja Date: Sun, 9 Aug 2020 15:06:06 -0500 Subject: [PATCH] Add naming-convention merger --- src/rules/mergers.ts | 2 + src/rules/mergers/naming-convention.ts | 9 ++ .../mergers/tests/naming-convention.test.ts | 96 +++++++++++++++++++ 3 files changed, 107 insertions(+) create mode 100644 src/rules/mergers/naming-convention.ts create mode 100644 src/rules/mergers/tests/naming-convention.test.ts diff --git a/src/rules/mergers.ts b/src/rules/mergers.ts index a08bfed5c..667219a2e 100644 --- a/src/rules/mergers.ts +++ b/src/rules/mergers.ts @@ -1,6 +1,7 @@ import { mergeBanTypes } from "./mergers/ban-types"; import { mergeConsistentTypeAssertions } from "./mergers/consistent-type-assertions"; import { mergeIndent } from "./mergers/indent"; +import { mergeNamingConvention } from "./mergers/naming-convention"; import { mergeNoCaller } from "./mergers/no-caller"; import { mergeNoEval } from "./mergers/no-eval"; import { mergeNoMemberDelimiterStyle } from "./mergers/member-delimiter-style"; @@ -12,6 +13,7 @@ export const mergers = new Map([ ["@typescript-eslint/consistent-type-assertions", mergeConsistentTypeAssertions], ["@typescript-eslint/indent", mergeIndent], ["@typescript-eslint/member-delimiter-style", mergeNoMemberDelimiterStyle], + ["@typescript-eslint/naming-convention", mergeNamingConvention], ["@typescript-eslint/no-unnecessary-type-assertion", mergeNoUnnecessaryTypeAssertion], ["@typescript-eslint/triple-slash-reference", mergeTripleSlashReference], ["no-caller", mergeNoCaller], diff --git a/src/rules/mergers/naming-convention.ts b/src/rules/mergers/naming-convention.ts new file mode 100644 index 000000000..78b3614b5 --- /dev/null +++ b/src/rules/mergers/naming-convention.ts @@ -0,0 +1,9 @@ +import { RuleMerger } from "../merger"; + +export const mergeNamingConvention: RuleMerger = (existingOptions, newOptions) => { + if (existingOptions === undefined && newOptions === undefined) { + return []; + } + + return [...(existingOptions ?? []), ...(newOptions ?? [])]; +}; diff --git a/src/rules/mergers/tests/naming-convention.test.ts b/src/rules/mergers/tests/naming-convention.test.ts new file mode 100644 index 000000000..ea5d4cc89 --- /dev/null +++ b/src/rules/mergers/tests/naming-convention.test.ts @@ -0,0 +1,96 @@ +import { mergeNamingConvention } from "../naming-convention"; + +describe(mergeNamingConvention, () => { + test("neither options existing", () => { + const result = mergeNamingConvention(undefined, undefined); + + expect(result).toEqual([]); + }); + + test("original variable name existing", () => { + const result = mergeNamingConvention( + [ + { + selector: "variable", + format: ["camelCase", "UPPER_CASE"], + leadingUnderscore: "forbid", + trailingUnderscore: "forbid", + }, + ], + undefined, + ); + + expect(result).toEqual([ + { + selector: "variable", + format: ["camelCase", "UPPER_CASE"], + leadingUnderscore: "forbid", + trailingUnderscore: "forbid", + }, + ]); + }); + + test("original interface name existing", () => { + const result = mergeNamingConvention(undefined, [ + { + selector: "interface", + format: ["PascalCase"], + custom: { + regex: "^I[A-Z]", + match: false, + }, + }, + ]); + + expect(result).toEqual([ + { + selector: "interface", + format: ["PascalCase"], + custom: { + regex: "^I[A-Z]", + match: false, + }, + }, + ]); + }); + + test("both interface and variable name existing", () => { + const result = mergeNamingConvention( + [ + { + selector: "variable", + format: ["camelCase", "UPPER_CASE"], + leadingUnderscore: "forbid", + trailingUnderscore: "forbid", + }, + ], + [ + { + selector: "interface", + format: ["PascalCase"], + custom: { + regex: "^I[A-Z]", + match: false, + }, + }, + ], + ); + + expect(result).toEqual([ + { + selector: "variable", + format: ["camelCase", "UPPER_CASE"], + leadingUnderscore: "forbid", + trailingUnderscore: "forbid", + }, + { + selector: "interface", + format: ["PascalCase"], + custom: { + regex: "^I[A-Z]", + match: false, + }, + }, + ]); + }); +});