Skip to content

Commit 3dcb56e

Browse files
committed
refactor(plugins/eslint-plugin): refactor legacy config handling to use new toLegacyConfig utility
1 parent 997f122 commit 3dcb56e

File tree

5 files changed

+91
-27
lines changed

5 files changed

+91
-27
lines changed

packages/plugins/eslint-plugin/src/index.ts

+15-27
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { RulePreset } from "@eslint-react/shared";
1+
import { toLegacyConfig } from "@eslint-react/shared";
22
import reactDebug from "eslint-plugin-react-debug";
33
import reactDom from "eslint-plugin-react-dom";
44
import reactHooksExtra from "eslint-plugin-react-hooks-extra";
@@ -21,19 +21,7 @@ import * as recommendedTypeCheckedConfig from "./configs/recommended-type-checke
2121
import * as recommendedTypeScriptConfig from "./configs/recommended-typescript";
2222
import { padKeysLeft } from "./utils";
2323

24-
type Config = {
25-
name: string;
26-
rules: RulePreset;
27-
};
28-
29-
function makeLegacyConfig<A extends Config>(config: A) {
30-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
31-
const { name: drop, ...rest } = config;
32-
return {
33-
...rest,
34-
plugins: ["@eslint-react"],
35-
};
36-
}
24+
const toLegacy = toLegacyConfig(["@eslint-react"]);
3725

3826
export default {
3927
meta: {
@@ -54,23 +42,23 @@ export default {
5442
["recommended-type-checked"]: recommendedTypeCheckedConfig,
5543
["recommended-typescript"]: recommendedTypeScriptConfig,
5644
// Part: legacy presets
57-
["all-legacy"]: makeLegacyConfig(allConfig),
58-
["core-legacy"]: makeLegacyConfig(coreConfig),
59-
["debug-legacy"]: makeLegacyConfig(debugConfig),
60-
["disable-debug-legacy"]: makeLegacyConfig(disableDebugConfig),
61-
["disable-dom-legacy"]: makeLegacyConfig(disableDomConfig),
62-
["disable-type-checked-legacy"]: makeLegacyConfig(disableTypeCheckedConfig),
63-
["disable-web-api-legacy"]: makeLegacyConfig(disableWebApiConfig),
64-
["dom-legacy"]: makeLegacyConfig(domConfig),
65-
["off-legacy"]: makeLegacyConfig(offConfig),
66-
["recommended-legacy"]: makeLegacyConfig(recommendedConfig),
67-
["recommended-type-checked-legacy"]: makeLegacyConfig(recommendedTypeCheckedConfig),
68-
["recommended-typescript-legacy"]: makeLegacyConfig(recommendedTypeScriptConfig),
45+
["all-legacy"]: toLegacy(allConfig),
46+
["core-legacy"]: toLegacy(coreConfig),
47+
["debug-legacy"]: toLegacy(debugConfig),
48+
["disable-debug-legacy"]: toLegacy(disableDebugConfig),
49+
["disable-dom-legacy"]: toLegacy(disableDomConfig),
50+
["disable-type-checked-legacy"]: toLegacy(disableTypeCheckedConfig),
51+
["disable-web-api-legacy"]: toLegacy(disableWebApiConfig),
52+
["dom-legacy"]: toLegacy(domConfig),
53+
["off-legacy"]: toLegacy(offConfig),
54+
["recommended-legacy"]: toLegacy(recommendedConfig),
55+
["recommended-type-checked-legacy"]: toLegacy(recommendedTypeCheckedConfig),
56+
["recommended-typescript-legacy"]: toLegacy(recommendedTypeScriptConfig),
6957
// Part: deprecated presets
7058
/** @deprecated Use `disable-dom` instead */
7159
["off-dom"]: disableDomConfig,
7260
/** @deprecated Use `disable-dom-legacy` instead */
73-
["off-dom-legacy"]: makeLegacyConfig(disableDomConfig),
61+
["off-dom-legacy"]: toLegacy(disableDomConfig),
7462
},
7563
rules: {
7664
...react.rules,

packages/shared/docs/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,4 @@
4848
- [getSettingsFromContext](functions/getSettingsFromContext.md)
4949
- [isInEditorEnv](functions/isInEditorEnv.md)
5050
- [isInGitHooksOrLintStaged](functions/isInGitHooksOrLintStaged.md)
51+
- [toLegacyConfig](functions/toLegacyConfig.md)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
[**@eslint-react/shared**](../README.md)
2+
3+
***
4+
5+
[@eslint-react/shared](../README.md) / toLegacyConfig
6+
7+
# Function: toLegacyConfig()
8+
9+
## Call Signature
10+
11+
> **toLegacyConfig**(`config`, `plugins`): `LegacyConfigLike`
12+
13+
### Parameters
14+
15+
#### config
16+
17+
`FlatConfigLike`
18+
19+
#### plugins
20+
21+
`string`[]
22+
23+
### Returns
24+
25+
`LegacyConfigLike`
26+
27+
## Call Signature
28+
29+
> **toLegacyConfig**(`plugins`): (`config`) => `LegacyConfigLike`
30+
31+
### Parameters
32+
33+
#### plugins
34+
35+
`string`[]
36+
37+
### Returns
38+
39+
`Function`
40+
41+
#### Parameters
42+
43+
##### config
44+
45+
`FlatConfigLike`
46+
47+
#### Returns
48+
49+
`LegacyConfigLike`

packages/shared/src/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ export * from "./get-id";
55
export * from "./get-react-version";
66
export * from "./schemas";
77
export * from "./settings";
8+
export * from "./to-legacy-config";
89
export type * from "./types";
+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { dual } from "@eslint-react/eff";
2+
3+
import type { RulePreset } from "./types";
4+
5+
type FlatConfigLike = {
6+
name: string;
7+
rules: RulePreset;
8+
};
9+
10+
type LegacyConfigLike = {
11+
plugins: string[];
12+
rules: RulePreset;
13+
};
14+
15+
export const toLegacyConfig: {
16+
(config: FlatConfigLike, plugins: string[]): LegacyConfigLike;
17+
(plugins: string[]): (config: FlatConfigLike) => LegacyConfigLike;
18+
} = dual(2, (config: FlatConfigLike, plugins: string[]) => {
19+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
20+
const { name: drop, ...rest } = config;
21+
return {
22+
...rest,
23+
plugins,
24+
};
25+
});

0 commit comments

Comments
 (0)