@ethang/eslint-config 21.4.0 → 21.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/eslint.config.js +2 -26
  2. package/package.json +1 -1
  3. package/build.ts +0 -34
  4. package/dist/eslint.config.js +0 -2
  5. package/dist/package.json +0 -68
  6. package/src/README.md +0 -100
  7. package/src/build/create-config-file.ts +0 -57
  8. package/src/build/create-config.ts +0 -96
  9. package/src/build/get-react-version.ts +0 -19
  10. package/src/build/list-utilities.ts +0 -124
  11. package/src/build/rule-list.ts +0 -284
  12. package/src/build/update-readme.ts +0 -195
  13. package/src/build/update-rules.ts +0 -124
  14. package/src/config.angular.js +0 -107
  15. package/src/config.astro.js +0 -68
  16. package/src/config.react.js +0 -117
  17. package/src/config.solid.js +0 -34
  18. package/src/constants.js +0 -16
  19. package/src/eslint.config.js +0 -1051
  20. package/src/setup/a11y.ts +0 -19
  21. package/src/setup/angular.ts +0 -40
  22. package/src/setup/astro.ts +0 -14
  23. package/src/setup/barrel.ts +0 -17
  24. package/src/setup/compat.ts +0 -13
  25. package/src/setup/cspell.ts +0 -83
  26. package/src/setup/css.ts +0 -12
  27. package/src/setup/depend.ts +0 -14
  28. package/src/setup/eslint.ts +0 -246
  29. package/src/setup/gen-rules.ts +0 -75
  30. package/src/setup/json.ts +0 -17
  31. package/src/setup/lodash.ts +0 -58
  32. package/src/setup/markdown.ts +0 -16
  33. package/src/setup/n.ts +0 -86
  34. package/src/setup/perfectionist.ts +0 -68
  35. package/src/setup/react.ts +0 -82
  36. package/src/setup/solid.ts +0 -21
  37. package/src/setup/sonar.ts +0 -39
  38. package/src/setup/tailwind.ts +0 -10
  39. package/src/setup/tanstack-query.ts +0 -9
  40. package/src/setup/tanstack-router.ts +0 -9
  41. package/src/setup/typescript-eslint.ts +0 -118
  42. package/src/setup/unicorn.ts +0 -38
  43. package/tsconfig.json +0 -5
  44. /package/{dist/README.md → README.md} +0 -0
  45. /package/{dist/chunk-WK3YS7OG.js → chunk-WK3YS7OG.js} +0 -0
  46. /package/{dist/chunk-WK3YS7OG.js.map → chunk-WK3YS7OG.js.map} +0 -0
  47. /package/{dist/config.angular.d.ts → config.angular.d.ts} +0 -0
  48. /package/{dist/config.angular.js → config.angular.js} +0 -0
  49. /package/{dist/config.angular.js.map → config.angular.js.map} +0 -0
  50. /package/{dist/config.astro.d.ts → config.astro.d.ts} +0 -0
  51. /package/{dist/config.astro.js → config.astro.js} +0 -0
  52. /package/{dist/config.astro.js.map → config.astro.js.map} +0 -0
  53. /package/{dist/config.react.d.ts → config.react.d.ts} +0 -0
  54. /package/{dist/config.react.js → config.react.js} +0 -0
  55. /package/{dist/config.react.js.map → config.react.js.map} +0 -0
  56. /package/{dist/config.solid.d.ts → config.solid.d.ts} +0 -0
  57. /package/{dist/config.solid.js → config.solid.js} +0 -0
  58. /package/{dist/config.solid.js.map → config.solid.js.map} +0 -0
  59. /package/{dist/constants.js → constants.js} +0 -0
  60. /package/{dist/constants.js.map → constants.js.map} +0 -0
  61. /package/{dist/eslint.config.d.ts → eslint.config.d.ts} +0 -0
  62. /package/{dist/eslint.config.js.map → eslint.config.js.map} +0 -0
package/src/setup/a11y.ts DELETED
@@ -1,19 +0,0 @@
1
- import a11y from "eslint-plugin-jsx-a11y";
2
- import keys from "lodash/keys.js";
3
-
4
- import { genRules, getNonDeprecatedRules } from "./gen-rules.ts";
5
-
6
- const ruleNames = keys(getNonDeprecatedRules(a11y.rules ?? {}));
7
- const customRules = [
8
- {
9
- // throws false positives
10
- name: "control-has-associated-label",
11
- rule: "off",
12
- },
13
- {
14
- name: "media-has-caption",
15
- rule: "off",
16
- },
17
- ];
18
-
19
- export const a11yRules = genRules(ruleNames, customRules, "a11y");
@@ -1,40 +0,0 @@
1
- import angularTS from "@angular-eslint/eslint-plugin";
2
- import angularTemplate from "@angular-eslint/eslint-plugin-template";
3
- import keys from "lodash/keys.js";
4
-
5
- import { genRules, getNonDeprecatedRules } from "./gen-rules.js";
6
-
7
- // @ts-expect-error this is ok
8
- const tsRuleNames = keys(getNonDeprecatedRules(angularTS.rules));
9
- const templateRuleNames = keys(
10
- // @ts-expect-error this is ok
11
- getNonDeprecatedRules(angularTemplate.rules),
12
- );
13
-
14
- const customTsRules = [
15
- {
16
- name: "directive-selector",
17
- rule: ["error", { prefix: "app", style: "camelCase", type: "attribute" }],
18
- },
19
- {
20
- name: "component-selector",
21
- rule: ["error", { prefix: "app", style: "kebab-case", type: "element" }],
22
- },
23
- ];
24
-
25
- const customTemplateRules = [
26
- { name: "i18n", rule: "off" },
27
- { name: "no-call-expression", rule: "off" },
28
- { name: "prefer-ngsrc", rule: "warn" },
29
- ];
30
-
31
- export const angularTsRules = genRules(
32
- tsRuleNames,
33
- customTsRules,
34
- "@angular-eslint",
35
- );
36
- export const angularTemplateRules = genRules(
37
- templateRuleNames,
38
- customTemplateRules,
39
- "@angular-eslint/template",
40
- );
@@ -1,14 +0,0 @@
1
- import astro from "eslint-plugin-astro";
2
- import keys from "lodash/keys.js";
3
-
4
- import { genRules, getNonDeprecatedRules } from "./gen-rules.ts";
5
-
6
- const ruleNames = keys(getNonDeprecatedRules(astro.rules));
7
- const customRules = [
8
- {
9
- name: "no-set-html-directive",
10
- rule: "off",
11
- },
12
- ];
13
-
14
- export const astroRules = genRules(ruleNames, customRules, "astro");
@@ -1,17 +0,0 @@
1
- // @ts-expect-error no types
2
- import barrel from "eslint-plugin-barrel-files";
3
- import keys from "lodash/keys.js";
4
-
5
- import {
6
- type CustomRules,
7
- genRules,
8
- getNonDeprecatedRules,
9
- } from "./gen-rules.ts";
10
-
11
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-member-access
12
- const ruleNames = keys(getNonDeprecatedRules(barrel.rules));
13
- const customRules: CustomRules = [
14
- { name: "avoid-importing-barrel-files", rule: "off" },
15
- ];
16
-
17
- export const barrelRules = genRules(ruleNames, customRules, "barrel");
@@ -1,13 +0,0 @@
1
- import compat from "eslint-plugin-compat";
2
- import keys from "lodash/keys.js";
3
-
4
- import {
5
- type CustomRules,
6
- genRules,
7
- getNonDeprecatedRules,
8
- } from "./gen-rules.ts";
9
-
10
- const ruleNames = keys(getNonDeprecatedRules(compat.rules));
11
- const changedRules: CustomRules = [];
12
-
13
- export const compatRules = genRules(ruleNames, changedRules, "compat");
@@ -1,83 +0,0 @@
1
- import cspell from "@cspell/eslint-plugin";
2
- import keys from "lodash/keys.js";
3
-
4
- import {
5
- type CustomRules,
6
- genRules,
7
- getNonDeprecatedRules,
8
- } from "./gen-rules.js";
9
-
10
- const ruleNames = keys(getNonDeprecatedRules(cspell.rules));
11
-
12
- const customRules: CustomRules = [
13
- {
14
- name: "spellchecker",
15
- rule: [
16
- "error",
17
- {
18
- cspell: {
19
- words: [
20
- "typicode",
21
- "toolbelt",
22
- "taze",
23
- "ethang",
24
- "TSESTree",
25
- "Boop",
26
- "cldr",
27
- "astro",
28
- "laravel",
29
- "qwik",
30
- "sitecore",
31
- "uswds",
32
- "mediat",
33
- "Packt",
34
- "Academind",
35
- "Udemy",
36
- "Colte",
37
- "Bootcamp",
38
- "HTMX",
39
- "MERN",
40
- "Nuxt",
41
- "Credly",
42
- "Sterett",
43
- "Beyonder",
44
- "hotspot",
45
- "lqip",
46
- "Hawn",
47
- "nextui",
48
- "speculationrules",
49
- "zustand",
50
- "vinxi",
51
- "datasource",
52
- "turso",
53
- "supabase",
54
- "solidjs",
55
- "labelledby",
56
- "svix",
57
- "blockqoute",
58
- "cortexjs",
59
- "mathrm",
60
- "nums",
61
- "lifecycles",
62
- "krausest",
63
- "Signalis",
64
- "Plass",
65
- "Iteree",
66
- "Sonner",
67
- "cmdk",
68
- "ngsw",
69
- "dexie",
70
- "leetcode",
71
- "ngsrc",
72
- "sindresorhus",
73
- "rogan",
74
- "heroui",
75
- "millis",
76
- ],
77
- },
78
- },
79
- ],
80
- },
81
- ];
82
-
83
- export const cspellRules = genRules(ruleNames, customRules, "cspell");
package/src/setup/css.ts DELETED
@@ -1,12 +0,0 @@
1
- import css from "@eslint/css";
2
- import keys from "lodash/keys.js";
3
-
4
- import { genRules, getNonDeprecatedRules } from "./gen-rules.js";
5
-
6
- const ruleNames = keys(getNonDeprecatedRules(css.rules));
7
-
8
- export const cssRules = genRules(
9
- ruleNames,
10
- [{ name: "no-invalid-at-rules", rule: "off" }],
11
- "css",
12
- );
@@ -1,14 +0,0 @@
1
- import depend from "eslint-plugin-depend";
2
- import keys from "lodash/keys.js";
3
-
4
- import { genRules, getNonDeprecatedRules } from "./gen-rules.ts";
5
-
6
- const ruleNames = keys(getNonDeprecatedRules(depend.rules));
7
- const changedRules = [
8
- {
9
- name: "ban-dependencies",
10
- rule: ["error", { allowed: ["lodash", "fs-extra"] }],
11
- },
12
- ];
13
-
14
- export const dependRules = genRules(ruleNames, changedRules, "depend");
@@ -1,246 +0,0 @@
1
- import eslint from "@eslint/js";
2
- import keys from "lodash/keys.js";
3
-
4
- import { genRules } from "./gen-rules.ts";
5
-
6
- const ruleNames = keys(eslint.configs.all.rules);
7
- const customRules = [
8
- {
9
- name: "arrow-body-style",
10
- rule: "off",
11
- },
12
- {
13
- name: "camelcase",
14
- rule: "off",
15
- },
16
- {
17
- name: "capitalized-comments",
18
- rule: "off",
19
- },
20
- {
21
- name: "class-methods-use-this",
22
- rule: "off",
23
- },
24
- {
25
- name: "complexity",
26
- rule: "off",
27
- },
28
- {
29
- name: "consistent-return",
30
- rule: "off",
31
- },
32
- {
33
- name: "consistent-this",
34
- rule: "off",
35
- },
36
- {
37
- name: "curly",
38
- rule: "off",
39
- },
40
- {
41
- name: "default-case",
42
- rule: "off",
43
- },
44
- {
45
- name: "default-case-last",
46
- rule: "off",
47
- },
48
- {
49
- name: "default-param-last",
50
- rule: "off",
51
- },
52
- {
53
- name: "dot-notation",
54
- rule: "off",
55
- },
56
- {
57
- name: "func-names",
58
- rule: "off",
59
- },
60
- {
61
- name: "func-style",
62
- rule: ["error", "declaration", { allowArrowFunctions: true }],
63
- },
64
- {
65
- name: "id-denylist",
66
- rule: "off",
67
- },
68
- {
69
- name: "id-length",
70
- rule: "off",
71
- },
72
- {
73
- name: "id-match",
74
- rule: "off",
75
- },
76
- {
77
- name: "init-declarations",
78
- rule: "off",
79
- },
80
- {
81
- name: "max-lines",
82
- rule: "off",
83
- },
84
- {
85
- name: "max-lines-per-function",
86
- rule: "off",
87
- },
88
- {
89
- name: "max-params",
90
- rule: "off",
91
- },
92
- {
93
- name: "max-statements",
94
- rule: "off",
95
- },
96
- {
97
- name: "new-cap",
98
- rule: "off",
99
- },
100
- {
101
- name: "no-array-constructor",
102
- rule: "off",
103
- },
104
- {
105
- name: "no-dupe-class-members",
106
- rule: "off",
107
- },
108
- {
109
- name: "no-empty-function",
110
- rule: "off",
111
- },
112
- {
113
- name: "no-implicit-globals",
114
- rule: "off",
115
- },
116
- {
117
- name: "no-implied-eval",
118
- rule: "off",
119
- },
120
- {
121
- name: "no-inline-comments",
122
- rule: "off",
123
- },
124
- {
125
- name: "no-magic-numbers",
126
- rule: "off",
127
- },
128
- {
129
- name: "no-redeclare",
130
- rule: "off",
131
- },
132
- {
133
- name: "no-restricted-exports",
134
- rule: "off",
135
- },
136
- {
137
- name: "no-restricted-globals",
138
- rule: "off",
139
- },
140
- {
141
- name: "no-restricted-imports",
142
- rule: "off",
143
- },
144
- {
145
- name: "no-restricted-properties",
146
- rule: "off",
147
- },
148
- {
149
- name: "no-restricted-syntax",
150
- rule: "off",
151
- },
152
- {
153
- name: "no-shadow",
154
- rule: "off",
155
- },
156
- {
157
- name: "no-template-curly-in-string",
158
- rule: "off",
159
- },
160
- {
161
- name: "no-ternary",
162
- rule: "off",
163
- },
164
- {
165
- name: "no-throw-literal",
166
- rule: "off",
167
- },
168
- {
169
- name: "no-undef",
170
- rule: "off",
171
- },
172
- {
173
- name: "no-undefined",
174
- rule: "off",
175
- },
176
- {
177
- name: "no-underscore-dangle",
178
- rule: "off",
179
- },
180
- {
181
- name: "no-unexpected-multiline",
182
- rule: "off",
183
- },
184
- {
185
- name: "no-unsafe-optional-chaining",
186
- rule: ["error", { disallowArithmeticOperators: true }],
187
- },
188
- {
189
- name: "no-unused-expressions",
190
- rule: "off",
191
- },
192
- {
193
- name: "no-unused-vars",
194
- rule: "off",
195
- },
196
- {
197
- name: "no-use-before-define",
198
- rule: "off",
199
- },
200
- {
201
- name: "no-useless-assignment",
202
- rule: "off",
203
- },
204
- {
205
- name: "no-useless-constructor",
206
- rule: "off",
207
- },
208
- {
209
- name: "no-warning-comments",
210
- rule: "off",
211
- },
212
- {
213
- name: "one-var",
214
- rule: "off",
215
- },
216
- {
217
- name: "prefer-arrow-callback",
218
- rule: "off",
219
- },
220
- {
221
- name: "prefer-destructuring",
222
- rule: "off",
223
- },
224
- {
225
- name: "prefer-promise-reject-errors",
226
- rule: "off",
227
- },
228
- {
229
- name: "require-await",
230
- rule: "off",
231
- },
232
- {
233
- name: "sort-imports",
234
- rule: "off",
235
- },
236
- {
237
- name: "sort-keys",
238
- rule: "off",
239
- },
240
- {
241
- name: "yoda",
242
- rule: ["error", "always"],
243
- },
244
- ];
245
-
246
- export const eslintRules = genRules(ruleNames, customRules);
@@ -1,75 +0,0 @@
1
- import type { Rule } from "eslint";
2
-
3
- import includes from "lodash/includes.js";
4
- import isNil from "lodash/isNil.js";
5
-
6
- export type EsLintRules = Record<string, Rule.RuleModule>;
7
-
8
- export const getNonDeprecatedRules = (rules: EsLintRules) => {
9
- const filtered: EsLintRules = {};
10
-
11
- for (const [key, value] of Object.entries(rules)) {
12
- if (true !== value.meta?.deprecated) {
13
- filtered[key] = value;
14
- }
15
- }
16
-
17
- return filtered;
18
- };
19
-
20
- export type CustomRules = {
21
- name: string;
22
- rule: unknown;
23
- }[];
24
-
25
- const getRuleStrings = (
26
- ruleNames: string[],
27
- defaultOverride: string,
28
- prefix?: string,
29
- ) => {
30
- const rules: Record<string, unknown> = {};
31
-
32
- for (const rule of ruleNames) {
33
- if (prefix === undefined) {
34
- rules[rule] = isNil(defaultOverride) ? "error" : defaultOverride;
35
- } else {
36
- rules[`${prefix}/${rule}`] = isNil(defaultOverride)
37
- ? "error"
38
- : defaultOverride;
39
- }
40
- }
41
-
42
- return rules;
43
- };
44
-
45
- export const genRules = (
46
- ruleNames: string[],
47
- customRules?: CustomRules,
48
- prefix?: string,
49
- defaultOverride = "error",
50
- ) => {
51
- const rules = getRuleStrings(ruleNames, defaultOverride, prefix);
52
-
53
- if (!isNil(customRules)) {
54
- for (const rule of customRules) {
55
- if (includes(ruleNames, rule.name)) {
56
- // eslint-disable-next-line sonar/nested-control-flow
57
- if (prefix === undefined) {
58
- rules[rule.name] = rule.rule;
59
- } else {
60
- rules[`${prefix}/${rule.name}`] = rule.rule;
61
- }
62
- } else {
63
- throw new Error(
64
- `${rule.name} in ${prefix ?? "(unknown prefix)"} does not exist.`,
65
- );
66
- }
67
- }
68
- }
69
-
70
- return Object.fromEntries(
71
- Object.entries(rules).sort(([a], [b]) => {
72
- return a.localeCompare(b);
73
- }),
74
- );
75
- };
package/src/setup/json.ts DELETED
@@ -1,17 +0,0 @@
1
- import json from "@eslint/json";
2
- import keys from "lodash/keys.js";
3
-
4
- import {
5
- type CustomRules,
6
- type EsLintRules,
7
- genRules,
8
- getNonDeprecatedRules,
9
- } from "./gen-rules.ts";
10
-
11
- const ruleNames = keys(
12
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
13
- getNonDeprecatedRules(json.rules as unknown as EsLintRules),
14
- );
15
- const customRules: CustomRules = [];
16
-
17
- export const jsonRules = genRules(ruleNames, customRules, "json");
@@ -1,58 +0,0 @@
1
- // @ts-expect-error no types
2
- import lodash from "eslint-plugin-lodash";
3
- import keys from "lodash/keys.js";
4
-
5
- import {
6
- type EsLintRules,
7
- genRules,
8
- getNonDeprecatedRules,
9
- } from "./gen-rules.ts";
10
-
11
- const ruleNames = keys(
12
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion,@typescript-eslint/no-unsafe-member-access
13
- getNonDeprecatedRules(lodash.rules as unknown as EsLintRules),
14
- );
15
- const customRules = [
16
- {
17
- name: "chain-style",
18
- rule: [2, "as-needed"],
19
- },
20
- {
21
- name: "consistent-compose",
22
- rule: [2, "flow"],
23
- },
24
- {
25
- name: "identity-shorthand",
26
- rule: [2, "always"],
27
- },
28
- {
29
- name: "import-scope",
30
- rule: [2, "method"],
31
- },
32
- {
33
- name: "matches-prop-shorthand",
34
- rule: [2, "always"],
35
- },
36
- {
37
- name: "matches-shorthand",
38
- rule: [2, "always", 3],
39
- },
40
- {
41
- name: "path-style",
42
- rule: [2, "array"],
43
- },
44
- {
45
- name: "prefer-includes",
46
- rule: [2, { includeNative: true }],
47
- },
48
- {
49
- name: "prefer-some",
50
- rule: [2, { includeNative: true }],
51
- },
52
- {
53
- name: "prop-shorthand",
54
- rule: [2, "always"],
55
- },
56
- ];
57
-
58
- export const lodashRules = genRules(ruleNames, customRules, "lodash");
@@ -1,16 +0,0 @@
1
- import markdown from "@eslint/markdown";
2
- import isNil from "lodash/isNil.js";
3
- import keys from "lodash/keys.js";
4
-
5
- import {
6
- type CustomRules,
7
- genRules,
8
- getNonDeprecatedRules,
9
- } from "./gen-rules.ts";
10
-
11
- const ruleNames = keys(
12
- getNonDeprecatedRules(isNil(markdown.rules) ? {} : markdown.rules),
13
- );
14
- const customRules: CustomRules = [];
15
-
16
- export const markdownRules = genRules(ruleNames, customRules, "markdown");