From b419fd8a3cac4598c67962568a0d4cf35f29f1a5 Mon Sep 17 00:00:00 2001 From: auvred Date: Thu, 3 Oct 2024 11:59:32 +0300 Subject: [PATCH 1/2] fix(typescript-eslint): propagate `name` field to extended configs in `config` helper --- .../typescript-eslint/src/config-helper.ts | 1 + .../typescript-eslint/tests/configs.test.ts | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/packages/typescript-eslint/src/config-helper.ts b/packages/typescript-eslint/src/config-helper.ts index 847047f37098..5722001477f8 100644 --- a/packages/typescript-eslint/src/config-helper.ts +++ b/packages/typescript-eslint/src/config-helper.ts @@ -94,6 +94,7 @@ export function config( const extension = { ...(config.files && { files: config.files }), ...(config.ignores && { ignores: config.ignores }), + ...(config.name && { name: config.name }), }; return [ diff --git a/packages/typescript-eslint/tests/configs.test.ts b/packages/typescript-eslint/tests/configs.test.ts index 61f4f2a92dc9..0b3afa672d78 100644 --- a/packages/typescript-eslint/tests/configs.test.ts +++ b/packages/typescript-eslint/tests/configs.test.ts @@ -367,4 +367,35 @@ describe('config helper', () => { }, ]); }); + + it('flattens extended configs with config name', () => { + expect( + plugin.config({ + extends: [{ rules: { rule1: 'error' } }, { rules: { rule2: 'error' } }], + files: ['common-file'], + ignores: ['common-ignored'], + name: 'my-config', + rules: { rule: 'error' }, + }), + ).toEqual([ + { + files: ['common-file'], + ignores: ['common-ignored'], + name: 'my-config', + rules: { rule1: 'error' }, + }, + { + files: ['common-file'], + ignores: ['common-ignored'], + name: 'my-config', + rules: { rule2: 'error' }, + }, + { + files: ['common-file'], + ignores: ['common-ignored'], + name: 'my-config', + rules: { rule: 'error' }, + }, + ]); + }); }); From 97f2dbf16f5194218ddfdd7e1592e40dc66c62eb Mon Sep 17 00:00:00 2001 From: auvred Date: Sun, 13 Oct 2024 12:42:14 +0300 Subject: [PATCH 2/2] merge base and extension names --- .../typescript-eslint/src/config-helper.ts | 19 +++--- .../typescript-eslint/tests/configs.test.ts | 65 +++++++++++++++++++ 2 files changed, 74 insertions(+), 10 deletions(-) diff --git a/packages/typescript-eslint/src/config-helper.ts b/packages/typescript-eslint/src/config-helper.ts index 5722001477f8..77085838c76a 100644 --- a/packages/typescript-eslint/src/config-helper.ts +++ b/packages/typescript-eslint/src/config-helper.ts @@ -91,17 +91,16 @@ export function config( return config; } - const extension = { - ...(config.files && { files: config.files }), - ...(config.ignores && { ignores: config.ignores }), - ...(config.name && { name: config.name }), - }; - return [ - ...extendsArr.map(conf => ({ - ...conf, - ...extension, - })), + ...extendsArr.map(extension => { + const name = [config.name, extension.name].filter(Boolean).join('__'); + return { + ...extension, + ...(config.files && { files: config.files }), + ...(config.ignores && { ignores: config.ignores }), + ...(name && { name }), + }; + }), config, ]; }); diff --git a/packages/typescript-eslint/tests/configs.test.ts b/packages/typescript-eslint/tests/configs.test.ts index 0b3afa672d78..63bf079e1b79 100644 --- a/packages/typescript-eslint/tests/configs.test.ts +++ b/packages/typescript-eslint/tests/configs.test.ts @@ -398,4 +398,69 @@ describe('config helper', () => { }, ]); }); + + it('flattens extended configs with names if base config is unnamed', () => { + expect( + plugin.config({ + extends: [ + { name: 'extension-1', rules: { rule1: 'error' } }, + { rules: { rule2: 'error' } }, + ], + files: ['common-file'], + ignores: ['common-ignored'], + rules: { rule: 'error' }, + }), + ).toEqual([ + { + files: ['common-file'], + ignores: ['common-ignored'], + name: 'extension-1', + rules: { rule1: 'error' }, + }, + { + files: ['common-file'], + ignores: ['common-ignored'], + rules: { rule2: 'error' }, + }, + { + files: ['common-file'], + ignores: ['common-ignored'], + rules: { rule: 'error' }, + }, + ]); + }); + + it('merges config items names', () => { + expect( + plugin.config({ + extends: [ + { name: 'extension-1', rules: { rule1: 'error' } }, + { rules: { rule2: 'error' } }, + ], + files: ['common-file'], + ignores: ['common-ignored'], + name: 'my-config', + rules: { rule: 'error' }, + }), + ).toEqual([ + { + files: ['common-file'], + ignores: ['common-ignored'], + name: 'my-config__extension-1', + rules: { rule1: 'error' }, + }, + { + files: ['common-file'], + ignores: ['common-ignored'], + name: 'my-config', + rules: { rule2: 'error' }, + }, + { + files: ['common-file'], + ignores: ['common-ignored'], + name: 'my-config', + rules: { rule: 'error' }, + }, + ]); + }); });