From 9bec86ba1ea7e3dc879948ef152bf45b8c520e15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Tammerg=C3=A5rd?= Date: Wed, 18 Oct 2023 23:15:34 +0200 Subject: [PATCH 01/16] feat: support flat config system --- package.json | 1 + recommended.js | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 recommended.js diff --git a/package.json b/package.json index 92d63e9f..254500b2 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "files": [ "eslint-plugin-prettier.d.ts", "eslint-plugin-prettier.js", + "recommended.js", "worker.js" ], "keywords": [ diff --git a/recommended.js b/recommended.js new file mode 100644 index 00000000..28142c87 --- /dev/null +++ b/recommended.js @@ -0,0 +1,17 @@ +'use strict'; + +const prettier = require('./eslint-plugin-prettier'); +// eslint-disable-next-line n/no-unpublished-require +const prettierConfig = require('eslint-config-prettier'); + +module.exports = { + prettierConfig, + plugins: { + prettier, + }, + rules: { + 'prettier/prettier': 'error', + 'arrow-body-style': 'off', + 'prefer-arrow-callback': 'off', + }, +}; From ee4be928ba97963620b98e8761cd41da7341f896 Mon Sep 17 00:00:00 2001 From: JounQin Date: Tue, 24 Oct 2023 17:18:48 +0800 Subject: [PATCH 02/16] Create kind-apples-itch.md --- .changeset/kind-apples-itch.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/kind-apples-itch.md diff --git a/.changeset/kind-apples-itch.md b/.changeset/kind-apples-itch.md new file mode 100644 index 00000000..d70c7f8a --- /dev/null +++ b/.changeset/kind-apples-itch.md @@ -0,0 +1,5 @@ +--- +"eslint-plugin-prettier": minor +--- + +feat: support ESLint flat config system From b65e1c595aea1e86a0b2ea66f0912913a2a9614e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Tammerg=C3=A5rd?= Date: Tue, 24 Oct 2023 12:05:22 +0200 Subject: [PATCH 03/16] fix: add eslint-config-prettier as peer dependency --- package.json | 2 +- recommended.js | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 254500b2..47fea91b 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "peerDependencies": { "@types/eslint": ">=8.0.0", "eslint": ">=8.0.0", - "eslint-config-prettier": "*", + "eslint-config-prettier": ">=9.0.0", "prettier": ">=3.0.0" }, "peerDependenciesMeta": { diff --git a/recommended.js b/recommended.js index 28142c87..fda6e2f3 100644 --- a/recommended.js +++ b/recommended.js @@ -1,7 +1,6 @@ 'use strict'; const prettier = require('./eslint-plugin-prettier'); -// eslint-disable-next-line n/no-unpublished-require const prettierConfig = require('eslint-config-prettier'); module.exports = { From 713bca092fcd18e3a54767949a70a72b060b29df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Tammerg=C3=A5rd?= Date: Tue, 24 Oct 2023 14:15:23 +0200 Subject: [PATCH 04/16] fix: align recommended config with docs --- recommended.js | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/recommended.js b/recommended.js index fda6e2f3..bd24baac 100644 --- a/recommended.js +++ b/recommended.js @@ -3,14 +3,23 @@ const prettier = require('./eslint-plugin-prettier'); const prettierConfig = require('eslint-config-prettier'); -module.exports = { - prettierConfig, - plugins: { - prettier, - }, +const plugin = { + configs: {}, rules: { - 'prettier/prettier': 'error', - 'arrow-body-style': 'off', - 'prefer-arrow-callback': 'off', + ...prettier.rules, }, }; + +Object.assign(plugin.configs, { + recommended: { + plugins: { + prettier: plugin, + }, + rules: { + ...prettierConfig.rules, + ...prettier.configs.recommended.rules, + }, + }, +}); + +module.exports = plugin; From 6904c98bb8b601619e0622fdf8de342af5718e37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Tammerg=C3=A5rd?= Date: Thu, 26 Oct 2023 08:18:16 +0200 Subject: [PATCH 05/16] fix: remove eslint-config-prettier as peer dependency --- package.json | 4 ---- recommended.js | 2 -- 2 files changed, 6 deletions(-) diff --git a/package.json b/package.json index 47fea91b..21e5ea37 100644 --- a/package.json +++ b/package.json @@ -39,15 +39,11 @@ "peerDependencies": { "@types/eslint": ">=8.0.0", "eslint": ">=8.0.0", - "eslint-config-prettier": ">=9.0.0", "prettier": ">=3.0.0" }, "peerDependenciesMeta": { "@types/eslint": { "optional": true - }, - "eslint-config-prettier": { - "optional": true } }, "dependencies": { diff --git a/recommended.js b/recommended.js index bd24baac..20bc09b9 100644 --- a/recommended.js +++ b/recommended.js @@ -1,7 +1,6 @@ 'use strict'; const prettier = require('./eslint-plugin-prettier'); -const prettierConfig = require('eslint-config-prettier'); const plugin = { configs: {}, @@ -16,7 +15,6 @@ Object.assign(plugin.configs, { prettier: plugin, }, rules: { - ...prettierConfig.rules, ...prettier.configs.recommended.rules, }, }, From c9810e8e50ad8928a29212f33c46dd218a50fdd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Tammerg=C3=A5rd?= Date: Thu, 26 Oct 2023 08:38:54 +0200 Subject: [PATCH 06/16] chore: add meta information --- recommended.js | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/recommended.js b/recommended.js index 20bc09b9..0f359f94 100644 --- a/recommended.js +++ b/recommended.js @@ -3,21 +3,25 @@ const prettier = require('./eslint-plugin-prettier'); const plugin = { - configs: {}, + meta: { + name: 'eslint-plugin-prettier', + version: '5.0.1', + }, + configs: { + recommended: { + plugins: { + prettier, + }, + rules: { + 'prettier/prettier': 'error', + 'arrow-body-style': 'off', + 'prefer-arrow-callback': 'off', + }, + }, + }, rules: { ...prettier.rules, }, }; -Object.assign(plugin.configs, { - recommended: { - plugins: { - prettier: plugin, - }, - rules: { - ...prettier.configs.recommended.rules, - }, - }, -}); - module.exports = plugin; From a58e92cf421c47db329701bc4167df66c2df1487 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Tammerg=C3=A5rd?= Date: Thu, 26 Oct 2023 08:49:56 +0200 Subject: [PATCH 07/16] chore: type check with @ts-check --- recommended.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/recommended.js b/recommended.js index 0f359f94..540eacc5 100644 --- a/recommended.js +++ b/recommended.js @@ -1,7 +1,15 @@ +// @ts-check 'use strict'; +/** + * @typedef {import('eslint').ESLint.Plugin} Plugin + */ + const prettier = require('./eslint-plugin-prettier'); +/** + * @type {Plugin} + */ const plugin = { meta: { name: 'eslint-plugin-prettier', From 313aa733ebfac338cccf9892901f3d32ab1d983a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Tammerg=C3=A5rd?= Date: Thu, 26 Oct 2023 09:01:00 +0200 Subject: [PATCH 08/16] chore: rename from recommended to flat --- recommended.js => flat.js | 0 package.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename recommended.js => flat.js (100%) diff --git a/recommended.js b/flat.js similarity index 100% rename from recommended.js rename to flat.js diff --git a/package.json b/package.json index 21e5ea37..054231a8 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "files": [ "eslint-plugin-prettier.d.ts", "eslint-plugin-prettier.js", - "recommended.js", + "flat.js", "worker.js" ], "keywords": [ From 4f3d200bdd040cdd2c06bcb13587f6dcda6752da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Tammerg=C3=A5rd?= Date: Thu, 26 Oct 2023 09:03:02 +0200 Subject: [PATCH 09/16] chore: append changelog --- .changeset/kind-apples-itch.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/.changeset/kind-apples-itch.md b/.changeset/kind-apples-itch.md index d70c7f8a..4ccd4a74 100644 --- a/.changeset/kind-apples-itch.md +++ b/.changeset/kind-apples-itch.md @@ -1,5 +1,21 @@ --- -"eslint-plugin-prettier": minor +'eslint-plugin-prettier': minor --- feat: support ESLint flat config system + +`eslint-plugin-prettier` can be used in the flat config format like this with CJS: + +```js +const prettier = require('eslint-plugin-prettier/flat'); + +module.exports = [prettier.configs.recommended]; +``` + +Or with ESM: + +```js +import prettier from 'eslint-plugin-prettier/flat'; + +export default [prettier.configs.recommended]; +``` From 1ac30c5cc71fedcbe38aacb097dc92f0f196681f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Tammerg=C3=A5rd?= Date: Thu, 26 Oct 2023 11:16:07 +0200 Subject: [PATCH 10/16] chore: read name and version from package.json --- eslint-plugin-prettier.js | 5 +++++ flat.js | 9 ++------- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/eslint-plugin-prettier.js b/eslint-plugin-prettier.js index b6d0a46e..b64357fb 100644 --- a/eslint-plugin-prettier.js +++ b/eslint-plugin-prettier.js @@ -23,6 +23,7 @@ const { showInvisibles, generateDifferences, } = require('prettier-linter-helpers'); +const { name, version } = require('./package.json'); // ------------------------------------------------------------------------------ // Constants @@ -80,6 +81,10 @@ function reportDifference(context, difference) { * @type {Plugin} */ const eslintPluginPrettier = { + meta: { + name, + version, + }, configs: { recommended: { extends: ['prettier'], diff --git a/flat.js b/flat.js index 540eacc5..ef4a8630 100644 --- a/flat.js +++ b/flat.js @@ -11,10 +11,7 @@ const prettier = require('./eslint-plugin-prettier'); * @type {Plugin} */ const plugin = { - meta: { - name: 'eslint-plugin-prettier', - version: '5.0.1', - }, + meta: prettier.meta, configs: { recommended: { plugins: { @@ -27,9 +24,7 @@ const plugin = { }, }, }, - rules: { - ...prettier.rules, - }, + rules: prettier.rules, }; module.exports = plugin; From 923e913c03974a02182d8f033da801ed4cd85c16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Tammerg=C3=A5rd?= Date: Thu, 26 Oct 2023 16:40:04 +0200 Subject: [PATCH 11/16] chore: add eslint-config-prettier as peer dependency --- package.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/package.json b/package.json index 054231a8..e4a60d55 100644 --- a/package.json +++ b/package.json @@ -39,11 +39,15 @@ "peerDependencies": { "@types/eslint": ">=8.0.0", "eslint": ">=8.0.0", + "eslint-config-prettier": "*", "prettier": ">=3.0.0" }, "peerDependenciesMeta": { "@types/eslint": { "optional": true + }, + "eslint-config-prettier": { + "optional": true } }, "dependencies": { From 1d5bdd8048ad33a4d95a7a9e04fbc72746ea81f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Tammerg=C3=A5rd?= Date: Sun, 29 Oct 2023 09:06:07 +0100 Subject: [PATCH 12/16] chore: move flat config to the same config file as the eslintrc one --- eslint-plugin-prettier.js | 22 +++++++++++++++++++++- flat.js | 30 ------------------------------ package.json | 1 - 3 files changed, 21 insertions(+), 32 deletions(-) delete mode 100644 flat.js diff --git a/eslint-plugin-prettier.js b/eslint-plugin-prettier.js index b64357fb..78251c05 100644 --- a/eslint-plugin-prettier.js +++ b/eslint-plugin-prettier.js @@ -244,4 +244,24 @@ const eslintPluginPrettier = { }, }; -module.exports = eslintPluginPrettier; +/** + * @type {Plugin} + */ +const eslintPluginPrettierWithFlatConfig = { + ...eslintPluginPrettier, + configs: { + ...eslintPluginPrettier.configs, + 'recommended-flat': { + plugins: { + prettier: eslintPluginPrettier, + }, + rules: { + 'prettier/prettier': 'error', + 'arrow-body-style': 'off', + 'prefer-arrow-callback': 'off', + }, + }, + }, +}; + +module.exports = eslintPluginPrettierWithFlatConfig; diff --git a/flat.js b/flat.js deleted file mode 100644 index ef4a8630..00000000 --- a/flat.js +++ /dev/null @@ -1,30 +0,0 @@ -// @ts-check -'use strict'; - -/** - * @typedef {import('eslint').ESLint.Plugin} Plugin - */ - -const prettier = require('./eslint-plugin-prettier'); - -/** - * @type {Plugin} - */ -const plugin = { - meta: prettier.meta, - configs: { - recommended: { - plugins: { - prettier, - }, - rules: { - 'prettier/prettier': 'error', - 'arrow-body-style': 'off', - 'prefer-arrow-callback': 'off', - }, - }, - }, - rules: prettier.rules, -}; - -module.exports = plugin; diff --git a/package.json b/package.json index e4a60d55..92d63e9f 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,6 @@ "files": [ "eslint-plugin-prettier.d.ts", "eslint-plugin-prettier.js", - "flat.js", "worker.js" ], "keywords": [ From 419e32b7c13466d036fd35b1e42617afb5be4220 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Tammerg=C3=A5rd?= Date: Sun, 29 Oct 2023 09:07:04 +0100 Subject: [PATCH 13/16] chore: update changeset --- .changeset/kind-apples-itch.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.changeset/kind-apples-itch.md b/.changeset/kind-apples-itch.md index 4ccd4a74..1c5398dd 100644 --- a/.changeset/kind-apples-itch.md +++ b/.changeset/kind-apples-itch.md @@ -7,15 +7,15 @@ feat: support ESLint flat config system `eslint-plugin-prettier` can be used in the flat config format like this with CJS: ```js -const prettier = require('eslint-plugin-prettier/flat'); +const prettier = require('eslint-plugin-prettier'); -module.exports = [prettier.configs.recommended]; +module.exports = [prettier.configs['recommended-flat']]; ``` Or with ESM: ```js -import prettier from 'eslint-plugin-prettier/flat'; +import prettier from 'eslint-plugin-prettier'; -export default [prettier.configs.recommended]; +export default [prettier.configs["recommended-flat"]; ``` From 95388daf9d72ab6d55af0039c37e04ed086c5b84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Tammerg=C3=A5rd?= Date: Fri, 3 Nov 2023 14:39:46 +0100 Subject: [PATCH 14/16] fix: avoid Object.assign --- eslint-plugin-prettier.js | 63 +++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 35 deletions(-) diff --git a/eslint-plugin-prettier.js b/eslint-plugin-prettier.js index 78251c05..841ee86d 100644 --- a/eslint-plugin-prettier.js +++ b/eslint-plugin-prettier.js @@ -77,25 +77,12 @@ function reportDifference(context, difference) { // Module Definition // ------------------------------------------------------------------------------ -/** - * @type {Plugin} - */ +// Type hint configs key as non-nullable to avoid type-checking errors in when +// assigning to eslintPluginPrettier.config below +/** @type {Plugin & {configs: NonNullable}} */ const eslintPluginPrettier = { - meta: { - name, - version, - }, - configs: { - recommended: { - extends: ['prettier'], - plugins: ['prettier'], - rules: { - 'prettier/prettier': 'error', - 'arrow-body-style': 'off', - 'prefer-arrow-callback': 'off', - }, - }, - }, + meta: { name, version }, + configs: {}, rules: { prettier: { meta: { @@ -244,24 +231,30 @@ const eslintPluginPrettier = { }, }; -/** - * @type {Plugin} - */ -const eslintPluginPrettierWithFlatConfig = { - ...eslintPluginPrettier, - configs: { - ...eslintPluginPrettier.configs, - 'recommended-flat': { - plugins: { - prettier: eslintPluginPrettier, - }, - rules: { - 'prettier/prettier': 'error', - 'arrow-body-style': 'off', - 'prefer-arrow-callback': 'off', - }, +// Assign configs after initial plugin configuration, as flat configs +// require referencing the original plugin that contains the rules. +eslintPluginPrettier.configs = { + recommended: { + extends: 'prettier', + plugins: ['prettier'], + rules: { + 'prettier/prettier': 'error', + 'arrow-body-style': 'off', + 'prefer-arrow-callback': 'off', + }, + }, + ['recommended-flat']: { + // In the flat config, don't extend from the eslint-config-prettier ruleset. + // The consumer should deal with extending from eslint-config-prettier themselves. + plugins: { + prettier: eslintPluginPrettier, + }, + rules: { + 'prettier/prettier': 'error', + 'arrow-body-style': 'off', + 'prefer-arrow-callback': 'off', }, }, }; -module.exports = eslintPluginPrettierWithFlatConfig; +module.exports = eslintPluginPrettier; From 90d3a0b4f95a4d2430cca335ed355f30faa736ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Tammerg=C3=A5rd?= <44197016+filiptammergard@users.noreply.github.com> Date: Fri, 3 Nov 2023 17:23:23 +0100 Subject: [PATCH 15/16] Update eslint-plugin-prettier.js Co-authored-by: JounQin --- eslint-plugin-prettier.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/eslint-plugin-prettier.js b/eslint-plugin-prettier.js index 841ee86d..e68002a0 100644 --- a/eslint-plugin-prettier.js +++ b/eslint-plugin-prettier.js @@ -77,9 +77,12 @@ function reportDifference(context, difference) { // Module Definition // ------------------------------------------------------------------------------ -// Type hint configs key as non-nullable to avoid type-checking errors in when -// assigning to eslintPluginPrettier.config below -/** @type {Plugin & {configs: NonNullable}} */ +/** + * Type hint `configs` key as non-nullable to avoid type-checking errors in when + * assigning to `eslintPluginPrettier.configs` below + * + * @type {Plugin & {configs: NonNullable}} + */ const eslintPluginPrettier = { meta: { name, version }, configs: {}, From 9c45c5d0719708c988543a98f1e8a0716575e1bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Tammerg=C3=A5rd?= Date: Mon, 6 Nov 2023 08:35:19 +0100 Subject: [PATCH 16/16] fix: fix changeset --- .changeset/kind-apples-itch.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/kind-apples-itch.md b/.changeset/kind-apples-itch.md index 1c5398dd..3b51ed5b 100644 --- a/.changeset/kind-apples-itch.md +++ b/.changeset/kind-apples-itch.md @@ -17,5 +17,5 @@ Or with ESM: ```js import prettier from 'eslint-plugin-prettier'; -export default [prettier.configs["recommended-flat"]; +export default [prettier.configs['recommended-flat']]; ```