diff options
| author | xuatz <xzlow10@gmail.com> | 2025-06-22 20:29:30 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-06-22 12:29:30 +0100 |
| commit | d5e2973dce617f451e4eb07491b3a6874ea6ca47 (patch) | |
| tree | 9e134ac8c0b263cec755068082ca61c9646efd21 /tooling | |
| parent | 91a9d3c1aee04d77b2a2d022821f4a7a38e315f3 (diff) | |
| download | karakeep-d5e2973dce617f451e4eb07491b3a6874ea6ca47.tar.zst | |
chore: migrate away from eslint to oxlint (#1642)
* chore: migrate away from eslint to oxlint
* revert turbo task name lint
* it seems like we can remove the seemingly default globals
Diffstat (limited to 'tooling')
| -rw-r--r-- | tooling/eslint/base.js | 45 | ||||
| -rw-r--r-- | tooling/eslint/nextjs.js | 10 | ||||
| -rw-r--r-- | tooling/eslint/package.json | 42 | ||||
| -rw-r--r-- | tooling/eslint/react.js | 27 | ||||
| -rw-r--r-- | tooling/eslint/tsconfig.json | 8 | ||||
| -rw-r--r-- | tooling/oxlint/oxlint-base.json | 130 | ||||
| -rw-r--r-- | tooling/oxlint/oxlint-nextjs.json | 28 | ||||
| -rw-r--r-- | tooling/oxlint/oxlint-react.json | 62 | ||||
| -rw-r--r-- | tooling/tailwind/.oxlintrc.json | 20 | ||||
| -rw-r--r-- | tooling/tailwind/package.json | 14 |
10 files changed, 244 insertions, 142 deletions
diff --git a/tooling/eslint/base.js b/tooling/eslint/base.js deleted file mode 100644 index 4aa34798..00000000 --- a/tooling/eslint/base.js +++ /dev/null @@ -1,45 +0,0 @@ -/** @type {import("eslint").Linter.Config} */ -const config = { - extends: [ - "turbo", - "eslint:recommended", - "plugin:@typescript-eslint/recommended-type-checked", - "plugin:@typescript-eslint/stylistic-type-checked", - ], - env: { - es2022: true, - node: true, - }, - parser: "@typescript-eslint/parser", - parserOptions: { project: true }, - plugins: ["@typescript-eslint", "import"], - rules: { - "turbo/no-undeclared-env-vars": "off", - "@typescript-eslint/no-unused-vars": [ - "error", - { argsIgnorePattern: "^_", varsIgnorePattern: "^_" }, - ], - "@typescript-eslint/consistent-type-imports": "off", - "@typescript-eslint/no-misused-promises": [ - 2, - { checksVoidReturn: { attributes: false } }, - ], - "import/consistent-type-specifier-style": ["error", "prefer-top-level"], - "@typescript-eslint/no-floating-promises": "off", - "@typescript-eslint/unbound-method": "off", - "@typescript-eslint/restrict-template-expressions": "off", - "@typescript-eslint/prefer-optional-chain": "off", - }, - ignorePatterns: [ - "**/*.config.js", - "**/*.config.cjs", - "**/.eslintrc.cjs", - ".next", - "dist", - "build", - "pnpm-lock.yaml", - ], - reportUnusedDisableDirectives: true, -}; - -module.exports = config; diff --git a/tooling/eslint/nextjs.js b/tooling/eslint/nextjs.js deleted file mode 100644 index 169993e3..00000000 --- a/tooling/eslint/nextjs.js +++ /dev/null @@ -1,10 +0,0 @@ -/** @type {import('eslint').Linter.Config} */ -const config = { - extends: ["plugin:@next/next/core-web-vitals"], - rules: { - "@next/next/no-html-link-for-pages": "off", - "@typescript-eslint/require-await": "off", - }, -}; - -module.exports = config; diff --git a/tooling/eslint/package.json b/tooling/eslint/package.json deleted file mode 100644 index 102e6bdd..00000000 --- a/tooling/eslint/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "@karakeep/eslint-config", - "version": "0.2.0", - "private": true, - "license": "MIT", - "files": [ - "./base.js", - "./nextjs.js", - "./react.js" - ], - "scripts": { - "clean": "rm -rf .turbo node_modules", - "format": "prettier --check . --ignore-path ../../.gitignore", - "lint": "eslint .", - "typecheck": "tsc --noEmit" - }, - "dependencies": { - "@next/eslint-plugin-next": "^14.1.1", - "@typescript-eslint/eslint-plugin": "~8.30.0", - "@typescript-eslint/parser": "~8.30.0", - "eslint-config-turbo": "^2.0.9", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jsx-a11y": "^6.8.0", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.6.0" - }, - "devDependencies": { - "@karakeep/prettier-config": "workspace:^0.1.0", - "@karakeep/tsconfig": "workspace:^0.1.0", - "@types/eslint": "^8.56.5", - "eslint": "^8.57.0", - "prettier": "^3.4.2", - "typescript": "^5.7.3" - }, - "eslintConfig": { - "root": true, - "extends": [ - "./base.js" - ] - }, - "prettier": "@karakeep/prettier-config" -} diff --git a/tooling/eslint/react.js b/tooling/eslint/react.js deleted file mode 100644 index 38b735b9..00000000 --- a/tooling/eslint/react.js +++ /dev/null @@ -1,27 +0,0 @@ -/** @type {import('eslint').Linter.Config} */ -const config = { - extends: [ - "plugin:react/recommended", - "plugin:react-hooks/recommended", - "plugin:jsx-a11y/recommended", - ], - rules: { - "react/prop-types": "off", - "jsx-a11y/no-autofocus": "off", - "jsx-a11y/label-has-associated-control": "off", - "react-hooks/exhaustive-deps": "off", - }, - globals: { - React: "writable", - }, - settings: { - react: { - version: "detect", - }, - }, - env: { - browser: true, - }, -}; - -module.exports = config; diff --git a/tooling/eslint/tsconfig.json b/tooling/eslint/tsconfig.json deleted file mode 100644 index 25ea271f..00000000 --- a/tooling/eslint/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "@karakeep/tsconfig/base.json", - "compilerOptions": { - "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json" - }, - "include": ["."], - "exclude": ["node_modules"] -} diff --git a/tooling/oxlint/oxlint-base.json b/tooling/oxlint/oxlint-base.json new file mode 100644 index 00000000..557afe00 --- /dev/null +++ b/tooling/oxlint/oxlint-base.json @@ -0,0 +1,130 @@ +{ + "$schema": "../../node_modules/oxlint/configuration_schema.json", + "plugins": [ + "typescript", + "import" + ], + "rules": { + "for-direction": "error", + "no-async-promise-executor": "error", + "no-case-declarations": "error", + "no-class-assign": "error", + "no-compare-neg-zero": "error", + "no-cond-assign": "error", + "no-const-assign": "error", + "no-constant-binary-expression": "error", + "no-constant-condition": "error", + "no-control-regex": "error", + "no-debugger": "error", + "no-delete-var": "error", + "no-dupe-class-members": "error", + "no-dupe-else-if": "error", + "no-dupe-keys": "error", + "no-duplicate-case": "error", + "no-empty": "error", + "no-empty-character-class": "error", + "no-empty-pattern": "error", + "no-empty-static-block": "error", + "no-ex-assign": "error", + "no-extra-boolean-cast": "error", + "no-fallthrough": "error", + "no-func-assign": "error", + "no-global-assign": "error", + "no-import-assign": "error", + "no-invalid-regexp": "error", + "no-irregular-whitespace": "error", + "no-loss-of-precision": "error", + "no-new-native-nonconstructor": "error", + "no-nonoctal-decimal-escape": "error", + "no-obj-calls": "error", + "no-prototype-builtins": "error", + "no-redeclare": "error", + "no-regex-spaces": "error", + "no-self-assign": "error", + "no-setter-return": "error", + "no-shadow-restricted-names": "error", + "no-sparse-arrays": "error", + "no-this-before-super": "error", + "no-unexpected-multiline": "error", + "no-unsafe-finally": "error", + "no-unsafe-negation": "error", + "no-unsafe-optional-chaining": "error", + "no-unused-labels": "error", + "no-unused-private-class-members": "error", + "no-unused-vars": [ + "error", + { + "argsIgnorePattern": "^_", + "varsIgnorePattern": "^_" + } + ], + "no-useless-backreference": "error", + "no-useless-catch": "error", + "no-useless-escape": "error", + "no-with": "error", + "require-yield": "error", + "use-isnan": "error", + "valid-typeof": "error", + "@typescript-eslint/ban-ts-comment": "error", + "no-array-constructor": "error", + "@typescript-eslint/no-duplicate-enum-values": "error", + "@typescript-eslint/no-empty-object-type": "error", + "@typescript-eslint/no-explicit-any": "error", + "@typescript-eslint/no-extra-non-null-assertion": "error", + "@typescript-eslint/no-misused-new": "error", + "@typescript-eslint/no-namespace": "error", + "@typescript-eslint/no-non-null-asserted-optional-chain": "error", + "@typescript-eslint/no-require-imports": "error", + "@typescript-eslint/no-this-alias": "error", + "@typescript-eslint/no-unnecessary-type-constraint": "error", + "@typescript-eslint/no-unsafe-declaration-merging": "error", + "@typescript-eslint/no-unsafe-function-type": "error", + "no-unused-expressions": "error", + "@typescript-eslint/no-wrapper-object-types": "error", + "no-throw-literal": "off", + "@typescript-eslint/prefer-as-const": "error", + "@typescript-eslint/prefer-namespace-keyword": "error", + "prefer-promise-reject-errors": "off", + "require-await": "off", + "@typescript-eslint/triple-slash-reference": "error", + "@typescript-eslint/adjacent-overload-signatures": "error", + "@typescript-eslint/array-type": "error", + "@typescript-eslint/ban-tslint-comment": "error", + "@typescript-eslint/consistent-generic-constructors": "error", + "@typescript-eslint/consistent-indexed-object-style": "error", + "@typescript-eslint/consistent-type-definitions": "error", + "@typescript-eslint/no-confusing-non-null-assertion": "error", + "no-empty-function": "error", + "@typescript-eslint/no-inferrable-types": "error", + "@typescript-eslint/prefer-for-of": "error", + "@typescript-eslint/prefer-function-type": "error", + "@typescript-eslint/consistent-type-imports": "off", + "import/consistent-type-specifier-style": [ + "error", + "prefer-top-level" + ] + }, + "overrides": [ + { + "files": ["**/*"], + "rules": { + "no-class-assign": "off", + "no-const-assign": "off", + "no-dupe-class-members": "off", + "no-dupe-keys": "off", + "no-func-assign": "off", + "no-import-assign": "off", + "no-new-native-nonconstructor": "off", + "no-obj-calls": "off", + "no-redeclare": "off", + "no-setter-return": "off", + "no-this-before-super": "off", + "no-unsafe-negation": "off", + "no-var": "error", + "no-with": "off", + "prefer-rest-params": "error", + "prefer-spread": "error" + } + } + ] +} diff --git a/tooling/oxlint/oxlint-nextjs.json b/tooling/oxlint/oxlint-nextjs.json new file mode 100644 index 00000000..411197d3 --- /dev/null +++ b/tooling/oxlint/oxlint-nextjs.json @@ -0,0 +1,28 @@ +{ + "$schema": "../../node_modules/oxlint/configuration_schema.json", + "plugins": [ + "nextjs" + ], + "rules": { + "@next/next/google-font-display": "warn", + "@next/next/google-font-preconnect": "warn", + "@next/next/next-script-for-ga": "warn", + "@next/next/no-async-client-component": "warn", + "@next/next/no-before-interactive-script-outside-document": "warn", + "@next/next/no-css-tags": "warn", + "@next/next/no-head-element": "warn", + "@next/next/no-img-element": "warn", + "@next/next/no-page-custom-font": "warn", + "@next/next/no-styled-jsx-in-document": "warn", + "@next/next/no-sync-scripts": "error", + "@next/next/no-title-in-document-head": "warn", + "@next/next/no-typos": "warn", + "@next/next/no-unwanted-polyfillio": "warn", + "@next/next/inline-script-id": "error", + "@next/next/no-assign-module-variable": "error", + "@next/next/no-document-import-in-page": "error", + "@next/next/no-duplicate-head": "error", + "@next/next/no-head-import-in-document": "error", + "@next/next/no-script-component-in-head": "error" + } +} diff --git a/tooling/oxlint/oxlint-react.json b/tooling/oxlint/oxlint-react.json new file mode 100644 index 00000000..dd5c4c01 --- /dev/null +++ b/tooling/oxlint/oxlint-react.json @@ -0,0 +1,62 @@ +{ + "$schema": "../../node_modules/oxlint/configuration_schema.json", + "plugins": [ + "react", + "jsx-a11y" + ], + "rules": { + "react/prop-types": "off", + "react/jsx-key": "warn", + "react/jsx-no-comment-textnodes": "warn", + "react/jsx-no-duplicate-props": "warn", + "react/jsx-no-target-blank": "warn", + "react/jsx-no-undef": "warn", + "react/no-children-prop": "warn", + "react/no-danger-with-children": "warn", + "react/no-direct-mutation-state": "warn", + "react/no-find-dom-node": "warn", + "react/no-is-mounted": "warn", + "react/no-render-return-value": "warn", + "react/no-string-refs": "warn", + "react/no-unescaped-entities": "warn", + "react/no-unknown-property": "warn", + "react/react-in-jsx-scope": "off", + "react-hooks/rules-of-hooks": "error", + "react-hooks/exhaustive-deps": "off", + "jsx-a11y/alt-text": "error", + "jsx-a11y/anchor-ambiguous-text": "off", + "jsx-a11y/anchor-has-content": "error", + "jsx-a11y/anchor-is-valid": "error", + "jsx-a11y/aria-activedescendant-has-tabindex": "error", + "jsx-a11y/aria-props": "error", + "jsx-a11y/aria-role": "error", + "jsx-a11y/aria-unsupported-elements": "error", + "jsx-a11y/autocomplete-valid": "error", + "jsx-a11y/click-events-have-key-events": "error", + "jsx-a11y/heading-has-content": "error", + "jsx-a11y/html-has-lang": "error", + "jsx-a11y/iframe-has-title": "off", + "jsx-a11y/img-redundant-alt": "error", + "jsx-a11y/label-has-associated-control": "off", + "jsx-a11y/media-has-caption": "error", + "jsx-a11y/mouse-events-have-key-events": "error", + "jsx-a11y/no-access-key": "error", + "jsx-a11y/no-autofocus": "off", + "jsx-a11y/no-distracting-elements": "error", + "jsx-a11y/no-noninteractive-tabindex": [ + "error", + { + "tags": [], + "roles": [ + "tabpanel" + ], + "allowExpressionValues": true + } + ], + "jsx-a11y/no-redundant-roles": "error", + "jsx-a11y/role-has-required-aria-props": "warn", + "jsx-a11y/role-supports-aria-props": "error", + "jsx-a11y/scope": "error", + "jsx-a11y/tabindex-no-positive": "error" + } +} diff --git a/tooling/tailwind/.oxlintrc.json b/tooling/tailwind/.oxlintrc.json new file mode 100644 index 00000000..7177788c --- /dev/null +++ b/tooling/tailwind/.oxlintrc.json @@ -0,0 +1,20 @@ +{ + "$schema": "../../node_modules/oxlint/configuration_schema.json", + "extends": ["../../tooling/oxlint/oxlint-base.json"], + "categories": { + "correctness": "warn" + }, + "env": { + "builtin": true, + "commonjs": true + }, + "ignorePatterns": [ + "**/*.config.js", + "**/*.config.cjs", + "**/.eslintrc.cjs", + "**/.next", + "**/dist", + "**/build", + "**/pnpm-lock.yaml" + ] +} diff --git a/tooling/tailwind/package.json b/tooling/tailwind/package.json index 4e9e0643..39087b0c 100644 --- a/tooling/tailwind/package.json +++ b/tooling/tailwind/package.json @@ -11,8 +11,10 @@ "license": "MIT", "scripts": { "clean": "rm -rf .turbo node_modules", - "format": "prettier --check . --ignore-path ../../.gitignore", - "lint": "eslint .", + "format": "prettier .", + "format:fix": "prettier . --write", + "lint": "oxlint .", + "lint:fix": "oxlint . --fix", "typecheck": "tsc --noEmit" }, "dependencies": { @@ -23,18 +25,10 @@ "tailwindcss-animate": "^1.0.7" }, "devDependencies": { - "@karakeep/eslint-config": "workspace:^0.2.0", "@karakeep/prettier-config": "workspace:^0.1.0", "@karakeep/tsconfig": "workspace:^0.1.0", - "eslint": "^8.57.0", "prettier": "^3.4.2", "typescript": "^5.7.3" }, - "eslintConfig": { - "root": true, - "extends": [ - "@karakeep/eslint-config/base" - ] - }, "prettier": "@karakeep/prettier-config" } |
