diff --git a/oxlint.json b/oxlint.json new file mode 100644 index 0000000..56038a4 --- /dev/null +++ b/oxlint.json @@ -0,0 +1,14 @@ +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "plugins": ["import", "unicorn", "jsdoc"], + "categories": { + "correctness": "deny", + "perf": "deny", + "suspicious": "deny" + }, + "rules": { + "eslint/no-await-in-loop": "allow", + "jsdoc/check-tag-names": "allow", + "oxc/no-accumulating-spread": "allow" + } +} diff --git a/package.json b/package.json index 4b8dbae..490048b 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "@types/node": "catalog:", "jsdom": "catalog:", "nx": "catalog:", + "oxlint": "catalog:", "prettier": "catalog:", "publint": "catalog:", "sherif": "catalog:", diff --git a/packages/config/package.json b/packages/config/package.json index de59ce3..ba2fc63 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -16,7 +16,7 @@ }, "scripts": { "test:types": "tsc", - "test:eslint": "eslint ./bin ./src", + "test:eslint": "oxlint -c ../../oxlint.json && eslint ./bin ./src", "test:build": "publint --strict" }, "type": "module", @@ -66,6 +66,7 @@ "esbuild-register": "catalog:", "eslint-plugin-import-x": "catalog:", "eslint-plugin-n": "catalog:", + "eslint-plugin-oxlint": "catalog:", "globals": "catalog:", "interpret": "catalog:", "jsonfile": "catalog:", diff --git a/packages/config/src/eslint/index.js b/packages/config/src/eslint/index.js index 3c5057b..9d40b98 100644 --- a/packages/config/src/eslint/index.js +++ b/packages/config/src/eslint/index.js @@ -3,6 +3,7 @@ import vueparser from 'vue-eslint-parser' import stylisticJs from '@stylistic/eslint-plugin-js' import pluginImport from 'eslint-plugin-import-x' import pluginNode from 'eslint-plugin-n' +import pluginOxlint from 'eslint-plugin-oxlint' import globals from 'globals' import { javascriptRules } from './javascript.js' import { importRules } from './import.js' @@ -29,6 +30,7 @@ const jsRules = { ...importRules, ...nodeRules, ...stylisticRules, + ...pluginOxlint.configs['flat/recommended'].rules, } const jsPlugins = { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d6fda13..6b961b5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -69,6 +69,9 @@ catalogs: eslint-plugin-n: specifier: ^17.15.1 version: 17.15.1 + eslint-plugin-oxlint: + specifier: ^0.15.10 + version: 0.15.10 globals: specifier: ^15.14.0 version: 15.14.0 @@ -90,6 +93,9 @@ catalogs: nx: specifier: ^20.4.2 version: 20.4.2 + oxlint: + specifier: ^0.15.10 + version: 0.15.10 prettier: specifier: ^3.5.0 version: 3.5.0 @@ -170,6 +176,9 @@ importers: nx: specifier: 'catalog:' version: 20.4.2 + oxlint: + specifier: 'catalog:' + version: 0.15.10 prettier: specifier: 'catalog:' version: 3.5.0 @@ -268,6 +277,9 @@ importers: eslint-plugin-n: specifier: 'catalog:' version: 17.15.1(eslint@9.20.0) + eslint-plugin-oxlint: + specifier: 'catalog:' + version: 0.15.10 globals: specifier: 'catalog:' version: 15.14.0 @@ -811,6 +823,46 @@ packages: cpu: [x64] os: [win32] + '@oxlint/darwin-arm64@0.15.10': + resolution: {integrity: sha512-nGuKO+lZh4vS2Lb9lceePSQkXLhKcBPIAlux8BY+ewk2LnNNWsCbHhoslBwLF2h0MB8HiqOIk8WzRwllCY8sBg==} + cpu: [arm64] + os: [darwin] + + '@oxlint/darwin-x64@0.15.10': + resolution: {integrity: sha512-Xpyk8PiNKIrxYuundViBsxLcltYPGy+M5w/mO7EI9eeqSizMvWNimQgfPzK5fgh3V0gv8bJG0IyPZJVN0uEE9A==} + cpu: [x64] + os: [darwin] + + '@oxlint/linux-arm64-gnu@0.15.10': + resolution: {integrity: sha512-fUxOOYlQBXc6Cz7d40zE2G6VG4yhR9vz+P1M8T1NhTe6yFUzfCCWV+zmHxpUPEy9dgGZPIvodIx7bP+kOPEmuA==} + cpu: [arm64] + os: [linux] + + '@oxlint/linux-arm64-musl@0.15.10': + resolution: {integrity: sha512-JESSO73nplnTftaBpWdgjsOtuSfl7Jeg3I37qJYVtHIxxyJMtHuuUd9g0K0MLbwcue2K7DFCnzlDNlxer2yrgQ==} + cpu: [arm64] + os: [linux] + + '@oxlint/linux-x64-gnu@0.15.10': + resolution: {integrity: sha512-NS4joBtL8Hg7zPBlPxSzrSRqkxtZfABf+fAY8vNxwYMsG8I8VoQZQdhz7+0p6ecg0+jH3CmIpDQfo73eaUBwoA==} + cpu: [x64] + os: [linux] + + '@oxlint/linux-x64-musl@0.15.10': + resolution: {integrity: sha512-zC2eEEe4scfsoUV87YsZFOSfPutxeaAmCI9Ys2G1lQoTyZ+9G9nuxTzBMla/yspX6mQGxonXPxLxYbIlDT24vA==} + cpu: [x64] + os: [linux] + + '@oxlint/win32-arm64@0.15.10': + resolution: {integrity: sha512-u8nHap9L96zTQvwHYqn1ZcoiHzLR24ifuKDBIwlmwEVYucUgE55tUc+ea8kPUUB4uvfOv0HtAxNFuKr43biPzg==} + cpu: [arm64] + os: [win32] + + '@oxlint/win32-x64@0.15.10': + resolution: {integrity: sha512-OvG4lRw2AnTDJnCb1Jm1bzE2KuRvJLE+fQ6TDSj0UQSmTGHLXIZLc+Y8HMxntCx0p850FVBtYixdg2sHkv+i3g==} + cpu: [x64] + os: [win32] + '@publint/pack@0.1.1': resolution: {integrity: sha512-TvCl79Y8v18ZhFGd5mjO1kYPovSBq3+4LVCi5Nfl1JI8fS8i8kXbgQFGwBJRXczim8GlW8c2LMBKTtExYXOy/A==} engines: {node: '>=18'} @@ -1533,6 +1585,9 @@ packages: peerDependencies: eslint: '>=8.23.0' + eslint-plugin-oxlint@0.15.10: + resolution: {integrity: sha512-e8Q1xdvGhmy3jUpszrbLT2dX7X0xl2B2QmPSvkIlU+ozixXDw7EJCj8XsB/zO2wLLE1R73yF4wy5oqQXe5SLKA==} + eslint-scope@7.2.2: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1939,6 +1994,9 @@ packages: jsonc-parser@3.2.0: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} @@ -2132,6 +2190,11 @@ packages: resolution: {integrity: sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==} engines: {node: '>=10'} + oxlint@0.15.10: + resolution: {integrity: sha512-962UBhpbd041fnx1GjQIY7uGIAXcAl/t45Xd6IZi11PyXVRHz7TjC4qpndrwp98Lfg7HuDaMXoOWOaNsgtEgag==} + engines: {node: '>=8.*'} + hasBin: true + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -3253,6 +3316,30 @@ snapshots: '@nx/nx-win32-x64-msvc@20.4.2': optional: true + '@oxlint/darwin-arm64@0.15.10': + optional: true + + '@oxlint/darwin-x64@0.15.10': + optional: true + + '@oxlint/linux-arm64-gnu@0.15.10': + optional: true + + '@oxlint/linux-arm64-musl@0.15.10': + optional: true + + '@oxlint/linux-x64-gnu@0.15.10': + optional: true + + '@oxlint/linux-x64-musl@0.15.10': + optional: true + + '@oxlint/win32-arm64@0.15.10': + optional: true + + '@oxlint/win32-x64@0.15.10': + optional: true + '@publint/pack@0.1.1': {} '@rollup/pluginutils@5.1.4(rollup@4.34.6)': @@ -4045,6 +4132,10 @@ snapshots: minimatch: 9.0.5 semver: 7.7.1 + eslint-plugin-oxlint@0.15.10: + dependencies: + jsonc-parser: 3.3.1 + eslint-scope@7.2.2: dependencies: esrecurse: 4.3.0 @@ -4442,6 +4533,8 @@ snapshots: jsonc-parser@3.2.0: {} + jsonc-parser@3.3.1: {} + jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 @@ -4687,6 +4780,17 @@ snapshots: strip-ansi: 6.0.1 wcwidth: 1.0.1 + oxlint@0.15.10: + optionalDependencies: + '@oxlint/darwin-arm64': 0.15.10 + '@oxlint/darwin-x64': 0.15.10 + '@oxlint/linux-arm64-gnu': 0.15.10 + '@oxlint/linux-arm64-musl': 0.15.10 + '@oxlint/linux-x64-gnu': 0.15.10 + '@oxlint/linux-x64-musl': 0.15.10 + '@oxlint/win32-arm64': 0.15.10 + '@oxlint/win32-x64': 0.15.10 + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index c83d4e6..b6428a4 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -24,6 +24,7 @@ catalog: eslint: ^9.20.0 eslint-plugin-import-x: ^4.6.1 eslint-plugin-n: ^17.15.1 + eslint-plugin-oxlint: ^0.15.10 globals: ^15.14.0 interpret: ^3.1.1 jsdom: ^26.0.0 @@ -31,6 +32,7 @@ catalog: liftoff: ^5.0.0 minimist: ^1.2.8 nx: ^20.4.2 + oxlint: ^0.15.10 prettier: ^3.5.0 publint: ^0.3.4 react: ^19.0.0