Skip to content

Commit 883af9b

Browse files
committedSep 22, 2023
feat: Update eslint config and dependencies, added new rules for "no-loops", "validate-jsx-nesting", "ssr-friendly", "deprecation", and "no-only-tests"
BREAKING-CHANGE: Added new rules for "no-loops", "validate-jsx-nesting", "ssr-friendly", "deprecation", and "no-only-tests" Signed-off-by: prisis <d.bannert@anolilab.de>
1 parent 031e3b4 commit 883af9b

File tree

10 files changed

+168
-52
lines changed

10 files changed

+168
-52
lines changed
 

‎packages/eslint-config/package.json

+13-1
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,11 @@
128128
"dependencies": {
129129
"@anolilab/package-json-utils": "3.0.5",
130130
"@babel/eslint-parser": "^7.22.15",
131+
"eslint-plugin-no-only-tests": "^3.1.0",
131132
"@babel/plugin-syntax-import-assertions": "^7.22.5",
132133
"@html-eslint/eslint-plugin": "^0.19.1",
133134
"@html-eslint/parser": "^0.19.1",
135+
"@eslint/js": "^8.49.0",
134136
"@rushstack/eslint-patch": "^1.4.0",
135137
"@rushstack/eslint-plugin-security": "^0.7.0",
136138
"@typescript-eslint/eslint-plugin": ">=6.7.2",
@@ -172,6 +174,7 @@
172174
"devDependencies": {
173175
"@anolilab/semantic-release-preset": "7.0.0",
174176
"@arthurgeron/eslint-plugin-react-usememo": "^2.0.1",
177+
"eslint-plugin-ssr-friendly": "^1.2.0",
175178
"@testing-library/dom": "^9.3.3",
176179
"@total-typescript/ts-reset": "^0.5.1",
177180
"@types/confusing-browser-globals": "^1.0.1",
@@ -185,10 +188,12 @@
185188
"eslint-plugin-etc": "^2.0.3",
186189
"eslint-plugin-jest": "^27.4.0",
187190
"eslint-plugin-jest-async": "^1.0.3",
191+
"eslint-plugin-deprecation": "^2.0.0",
188192
"eslint-plugin-jest-dom": "^5.1.0",
189193
"eslint-plugin-jest-formatting": "^3.1.0",
190194
"eslint-plugin-jsdoc": "^46.8.2",
191195
"eslint-plugin-jsx-a11y": "^6.7.1",
196+
"eslint-plugin-validate-jsx-nesting": "^1.0.1",
192197
"eslint-plugin-no-unsanitized": "^4.0.2",
193198
"eslint-plugin-prefer-object-spread": "^1.2.1",
194199
"eslint-plugin-react": "^7.33.2",
@@ -211,10 +216,12 @@
211216
"vitest": "^0.34.5"
212217
},
213218
"peerDependencies": {
214-
"eslint": "^8.15.0"
219+
"eslint": "^8.15.0",
220+
"@babel/core": "^7.22.20"
215221
},
216222
"optionalDependencies": {
217223
"@arthurgeron/eslint-plugin-react-usememo": "^2.0.1",
224+
"eslint-plugin-ssr-friendly": "^1.2.0",
218225
"@tanstack/eslint-plugin-query": "^4.34.1",
219226
"eslint-plugin-array-func": "^4.0.0",
220227
"eslint-plugin-ava": "^14.0.0",
@@ -227,6 +234,7 @@
227234
"eslint-plugin-jest-formatting": "^3.1.0",
228235
"eslint-plugin-jsdoc": "^46.8.2",
229236
"eslint-plugin-jsx-a11y": "^6.7.1",
237+
"eslint-plugin-validate-jsx-nesting": "^1.0.1",
230238
"eslint-plugin-n": "^16.1.0",
231239
"eslint-plugin-no-unsanitized": "^4.0.2",
232240
"eslint-plugin-playwright": "^0.16.0",
@@ -258,6 +266,7 @@
258266
"src/config/plugins/babel.ts",
259267
"src/config/plugins/compat.ts",
260268
"src/config/plugins/cypress.ts",
269+
"src/config/plugins/deprecation.ts",
261270
"src/config/plugins/es.ts",
262271
"src/config/plugins/eslint-comments.ts",
263272
"src/config/plugins/etc.ts",
@@ -275,6 +284,7 @@
275284
"src/config/plugins/mdx.ts",
276285
"src/config/plugins/no-extend-native.ts",
277286
"src/config/plugins/no-loops.ts",
287+
"src/config/plugins/no-only-tests.ts",
278288
"src/config/plugins/no-secrets.ts",
279289
"src/config/plugins/no-unsanitized.ts",
280290
"src/config/plugins/node.ts",
@@ -289,6 +299,7 @@
289299
"src/config/plugins/security.ts",
290300
"src/config/plugins/simple-import-sort.ts",
291301
"src/config/plugins/sonarjs.ts",
302+
"src/config/plugins/ssr-friendly.ts",
292303
"src/config/plugins/storybook.ts",
293304
"src/config/plugins/tailwindcss.ts",
294305
"src/config/plugins/tanstack-query.ts",
@@ -298,6 +309,7 @@
298309
"src/config/plugins/tsdoc.ts",
299310
"src/config/plugins/typescript.ts",
300311
"src/config/plugins/unicorn.ts",
312+
"src/config/plugins/validate-jsx-nesting.ts",
301313
"src/config/plugins/vitest.ts",
302314
"src/config/plugins/yml.ts",
303315
"src/config/plugins/you-dont-need-lodash-underscore.ts",

‎packages/eslint-config/src/config.ts

+28-3
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export const internalPluginConfig = [
2525
"toml",
2626
"yml",
2727
"html",
28+
"no-loops",
2829

2930
// custom rules
3031
"antfu",
@@ -369,22 +370,35 @@ const pluginConfig: PackageRules = [
369370
configName: "react",
370371
dependencies: ["react", "react-dom", "eslint-plugin-react"],
371372
},
373+
{
374+
configName: "validate-jsx-nesting",
375+
dependencies: ["eslint-plugin-validate-jsx-nesting"],
376+
oneOfDependency: ["react", "react-dom", "preact", "preact/compat"],
377+
},
378+
{
379+
configName: "ssr-friendly",
380+
dependencies: ["eslint-plugin-ssr-friendly"],
381+
oneOfDependency: ["react", "react-dom", "preact", "preact/compat"],
382+
},
372383
{
373384
configName: "react-redux",
374385
dependencies: ["eslint-plugin-react-redux"],
375386
oneOfDependency: ["@reduxjs/toolkit", "redux"],
376387
},
377388
{
378389
configName: "jsx-a11y",
379-
dependencies: ["react", "react-dom", "eslint-plugin-jsx-a11y"],
390+
dependencies: ["eslint-plugin-jsx-a11y"],
391+
oneOfDependency: ["react", "react-dom", "preact", "preact/compat"],
380392
},
381393
{
382394
configName: "react-hooks",
383-
dependencies: ["react", "react-dom", "eslint-plugin-react-hooks"],
395+
dependencies: ["eslint-plugin-react-hooks"],
396+
oneOfDependency: ["react", "react-dom", "preact", "preact/compat"],
384397
},
385398
{
386399
configName: "react-usememo",
387-
dependencies: ["react", "react-dom", "@arthurgeron/eslint-plugin-react-usememo"],
400+
dependencies: ["@arthurgeron/eslint-plugin-react-usememo"],
401+
oneOfDependency: ["react", "react-dom", "preact", "preact/compat"],
388402
},
389403
{
390404
configName: "you-dont-need-momentjs",
@@ -397,6 +411,7 @@ const pluginConfig: PackageRules = [
397411
{
398412
configName: "tailwindcss",
399413
dependencies: ["eslint-plugin-tailwindcss"],
414+
oneOfDependency: ["tailwindcss", "@tailwindcss/typography", "@tailwindcss/forms", "@tailwindcss/aspect-ratio", "@tailwindcss/line-clamp"],
400415
},
401416
{
402417
configName: "cypress",
@@ -435,6 +450,16 @@ const pluginConfig: PackageRules = [
435450
dependencies: ["typescript"],
436451
files: ["tsconfig.json", "tsconfig.eslint.json"],
437452
},
453+
{
454+
configName: "deprecation",
455+
dependencies: ["typescript"],
456+
files: ["tsconfig.json", "tsconfig.eslint.json"],
457+
},
458+
{
459+
configName: "no-only-tests",
460+
dependencies: [],
461+
oneOfDependency: ["jest", "mocha", "jasmine", "tape", "ava", "qunit", "cypress"],
462+
},
438463
{
439464
configName: "etc",
440465
dependencies: ["typescript", "eslint-plugin-etc"],
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import type { Linter } from "eslint";
2+
3+
import { createConfig } from "../../utils/create-config";
4+
5+
// @see https://github.com/francoismassart/eslint-plugin-tailwindcss,
6+
const config: Linter.Config = createConfig("typescript", {
7+
plugins: ["deprecation"],
8+
extends: ["plugin:deprecation/recommended"],
9+
});
10+
11+
export default config;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import type { Linter } from "eslint";
2+
3+
import { createConfig } from "../../utils/create-config";
4+
import isInEditor from "../../utils/is-in-editor";
5+
6+
// @see https://github.com/francoismassart/eslint-plugin-tailwindcss,
7+
const config: Linter.Config = createConfig("tests", {
8+
plugins: ["no-only-tests"],
9+
rules: {
10+
"no-only-tests/no-only-tests": isInEditor ? "off" : "error",
11+
},
12+
});
13+
14+
export default config;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import type { Linter } from "eslint";
2+
3+
import { createConfig } from "../../utils/create-config";
4+
5+
// @see https://github.com/francoismassart/eslint-plugin-tailwindcss,
6+
const config: Linter.Config = createConfig("jsx_and_tsx", {
7+
plugins: ["ssr-friendly"],
8+
extends: ["plugin:ssr-friendly/recommended"],
9+
});
10+
11+
export default config;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import type { Linter } from "eslint";
2+
3+
import { createConfig } from "../../utils/create-config";
4+
5+
// @see https://github.com/francoismassart/eslint-plugin-tailwindcss,
6+
const config: Linter.Config = createConfig("jsx_and_tsx", {
7+
plugins: ["validate-jsx-nesting"],
8+
rules: {
9+
"validate-jsx-nesting/no-invalid-jsx-nesting": "error",
10+
},
11+
});
12+
13+
export default config;

‎packages/eslint-config/src/define-config.ts

-1
This file was deleted.

‎packages/eslint-config/src/postinstall/write-eslint-rc.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ const configFile = ".eslintrc";
1313

1414
// eslint-disable-next-line sonarjs/cognitive-complexity
1515
const writeEslintRc = async (): Promise<void> => {
16-
// eslint-disable-next-line no-restricted-syntax
16+
// eslint-disable-next-line no-restricted-syntax,no-loops/no-loops
1717
for (const filename of [configFile, `${configFile}.js`, `${configFile}.cjs`, `${configFile}.json`, `${configFile}.yaml`, `${configFile}.yml`]) {
1818
// eslint-disable-next-line security/detect-non-literal-fs-filename
1919
if (existsSync(join(projectPath, filename))) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
const isInEditor = (process.env["VSCODE_PID"] || process.env["JETBRAINS_IDE"]) && !process.env["CI"];
2+
3+
export default isInEditor;

‎pnpm-lock.yaml

+74-46
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)
Please sign in to comment.