From 1240c0d1dafc03f9fd39cb57712604b7155620c4 Mon Sep 17 00:00:00 2001 From: Erick Zhao Date: Thu, 19 Mar 2026 22:45:50 -0700 Subject: [PATCH] feat(template): replace eslint with oxc.rs --- packages/template/base/tmpl/_gitignore | 4 ++-- ...eTypeScriptTemplate.slow.verdaccio.spec.ts | 2 +- .../src/ViteTypeScriptTemplate.ts | 6 ++--- .../vite-typescript/tmpl/.eslintrc.json | 22 ------------------- .../vite-typescript/tmpl/.oxlintrc.json | 5 +++++ .../vite-typescript/tmpl/package.json | 7 ++---- .../WebpackTypeScript.slow.verdaccio.spec.ts | 2 +- .../src/WebpackTypeScriptTemplate.ts | 6 ++--- .../webpack-typescript/tmpl/.eslintrc.json | 22 ------------------- .../webpack-typescript/tmpl/.oxlintrc.json | 5 +++++ .../template/webpack-typescript/tmpl/index.ts | 2 +- .../webpack-typescript/tmpl/package.json | 7 ++---- .../tmpl/webpack.plugins.ts | 2 +- 13 files changed, 26 insertions(+), 66 deletions(-) delete mode 100644 packages/template/vite-typescript/tmpl/.eslintrc.json create mode 100644 packages/template/vite-typescript/tmpl/.oxlintrc.json delete mode 100644 packages/template/webpack-typescript/tmpl/.eslintrc.json create mode 100644 packages/template/webpack-typescript/tmpl/.oxlintrc.json diff --git a/packages/template/base/tmpl/_gitignore b/packages/template/base/tmpl/_gitignore index 8296128de7..b5e6050df4 100644 --- a/packages/template/base/tmpl/_gitignore +++ b/packages/template/base/tmpl/_gitignore @@ -45,8 +45,8 @@ typings/ # Optional npm cache directory .npm -# Optional eslint cache -.eslintcache +# Optional oxlint cache +.oxlintcache # Optional REPL history .node_repl_history diff --git a/packages/template/vite-typescript/spec/ViteTypeScriptTemplate.slow.verdaccio.spec.ts b/packages/template/vite-typescript/spec/ViteTypeScriptTemplate.slow.verdaccio.spec.ts index 79420a2c08..c1bf6d9488 100644 --- a/packages/template/vite-typescript/spec/ViteTypeScriptTemplate.slow.verdaccio.spec.ts +++ b/packages/template/vite-typescript/spec/ViteTypeScriptTemplate.slow.verdaccio.spec.ts @@ -42,7 +42,7 @@ describe('ViteTypeScriptTemplate', () => { it.each([ 'package.json', 'tsconfig.json', - '.eslintrc.json', + '.oxlintrc.json', 'forge.env.d.ts', 'forge.config.ts', 'vite.main.config.ts', diff --git a/packages/template/vite-typescript/src/ViteTypeScriptTemplate.ts b/packages/template/vite-typescript/src/ViteTypeScriptTemplate.ts index 5803d9193f..b4e0d24725 100644 --- a/packages/template/vite-typescript/src/ViteTypeScriptTemplate.ts +++ b/packages/template/vite-typescript/src/ViteTypeScriptTemplate.ts @@ -39,8 +39,8 @@ class ViteTypeScriptTemplate extends BaseTemplate { // Copy tsconfig with a small set of presets await this.copyTemplateFile(directory, 'tsconfig.json'); - // Copy eslint config with recommended settings - await this.copyTemplateFile(directory, '.eslintrc.json'); + // Copy oxlint config with recommended settings + await this.copyTemplateFile(directory, '.oxlintrc.json'); // Remove index.js and replace with main.ts await fs.remove(filePath('index.js')); @@ -80,7 +80,7 @@ class ViteTypeScriptTemplate extends BaseTemplate { const packageJSON = await fs.readJson(packageJSONPath); packageJSON.main = '.vite/build/main.js'; // Configure scripts for TS template - packageJSON.scripts.lint = 'eslint --ext .ts,.tsx .'; + packageJSON.scripts.lint = 'oxlint && oxfmt --check .'; await fs.writeJson(packageJSONPath, packageJSON, { spaces: 2, }); diff --git a/packages/template/vite-typescript/tmpl/.eslintrc.json b/packages/template/vite-typescript/tmpl/.eslintrc.json deleted file mode 100644 index 4c3a215fe8..0000000000 --- a/packages/template/vite-typescript/tmpl/.eslintrc.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "env": { - "browser": true, - "es6": true, - "node": true - }, - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended", - "plugin:import/recommended", - "plugin:import/electron", - "plugin:import/typescript" - ], - "parser": "@typescript-eslint/parser", - "settings": { - "import/resolver": { - "typescript": true, - "node": true - } - } -} diff --git a/packages/template/vite-typescript/tmpl/.oxlintrc.json b/packages/template/vite-typescript/tmpl/.oxlintrc.json new file mode 100644 index 0000000000..792367ef22 --- /dev/null +++ b/packages/template/vite-typescript/tmpl/.oxlintrc.json @@ -0,0 +1,5 @@ +{ + "rules": { + "no-unused-vars": "warn" + } +} diff --git a/packages/template/vite-typescript/tmpl/package.json b/packages/template/vite-typescript/tmpl/package.json index 33b85d5ae2..be831c3d3d 100644 --- a/packages/template/vite-typescript/tmpl/package.json +++ b/packages/template/vite-typescript/tmpl/package.json @@ -2,11 +2,8 @@ "devDependencies": { "@electron-forge/plugin-vite": "ELECTRON_FORGE/VERSION", "@types/electron-squirrel-startup": "^1.0.2", - "@typescript-eslint/eslint-plugin": "^8.0.0", - "@typescript-eslint/parser": "^8.0.0", - "eslint": "^8.56.0", - "eslint-plugin-import": "^2.25.0", - "eslint-import-resolver-typescript": "^4.4.4", + "oxlint": "^1.0.0", + "oxfmt": "^0.1.0", "typescript": "^5.9.2", "vite": "^7.2.4" } diff --git a/packages/template/webpack-typescript/spec/WebpackTypeScript.slow.verdaccio.spec.ts b/packages/template/webpack-typescript/spec/WebpackTypeScript.slow.verdaccio.spec.ts index 43b11401d8..c991d85cee 100644 --- a/packages/template/webpack-typescript/spec/WebpackTypeScript.slow.verdaccio.spec.ts +++ b/packages/template/webpack-typescript/spec/WebpackTypeScript.slow.verdaccio.spec.ts @@ -32,7 +32,7 @@ describe('WebpackTypeScriptTemplate', () => { describe('template files are copied to project', () => { it.each([ 'tsconfig.json', - '.eslintrc.json', + '.oxlintrc.json', 'forge.config.ts', 'webpack.main.config.ts', 'webpack.renderer.config.ts', diff --git a/packages/template/webpack-typescript/src/WebpackTypeScriptTemplate.ts b/packages/template/webpack-typescript/src/WebpackTypeScriptTemplate.ts index 9c1caf6696..66764dee25 100644 --- a/packages/template/webpack-typescript/src/WebpackTypeScriptTemplate.ts +++ b/packages/template/webpack-typescript/src/WebpackTypeScriptTemplate.ts @@ -47,8 +47,8 @@ class WebpackTypeScriptTemplate extends BaseTemplate { // Copy tsconfig with a small set of presets await this.copyTemplateFile(directory, 'tsconfig.json'); - // Copy eslint config with recommended settings - await this.copyTemplateFile(directory, '.eslintrc.json'); + // Copy oxlint config with recommended settings + await this.copyTemplateFile(directory, '.oxlintrc.json'); // Remove index.js and replace with index.ts await fs.remove(filePath('index.js')); @@ -71,7 +71,7 @@ class WebpackTypeScriptTemplate extends BaseTemplate { const packageJSON = await fs.readJson(packageJSONPath); packageJSON.main = '.webpack/main'; // Configure scripts for TS template - packageJSON.scripts.lint = 'eslint --ext .ts,.tsx .'; + packageJSON.scripts.lint = 'oxlint && oxfmt --check .'; await fs.writeJson(packageJSONPath, packageJSON, { spaces: 2, }); diff --git a/packages/template/webpack-typescript/tmpl/.eslintrc.json b/packages/template/webpack-typescript/tmpl/.eslintrc.json deleted file mode 100644 index 4c3a215fe8..0000000000 --- a/packages/template/webpack-typescript/tmpl/.eslintrc.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "env": { - "browser": true, - "es6": true, - "node": true - }, - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended", - "plugin:import/recommended", - "plugin:import/electron", - "plugin:import/typescript" - ], - "parser": "@typescript-eslint/parser", - "settings": { - "import/resolver": { - "typescript": true, - "node": true - } - } -} diff --git a/packages/template/webpack-typescript/tmpl/.oxlintrc.json b/packages/template/webpack-typescript/tmpl/.oxlintrc.json new file mode 100644 index 0000000000..792367ef22 --- /dev/null +++ b/packages/template/webpack-typescript/tmpl/.oxlintrc.json @@ -0,0 +1,5 @@ +{ + "rules": { + "no-unused-vars": "warn" + } +} diff --git a/packages/template/webpack-typescript/tmpl/index.ts b/packages/template/webpack-typescript/tmpl/index.ts index f04d800365..7123c571bf 100644 --- a/packages/template/webpack-typescript/tmpl/index.ts +++ b/packages/template/webpack-typescript/tmpl/index.ts @@ -6,7 +6,7 @@ declare const MAIN_WINDOW_WEBPACK_ENTRY: string; declare const MAIN_WINDOW_PRELOAD_WEBPACK_ENTRY: string; // Handle creating/removing shortcuts on Windows when installing/uninstalling. -// eslint-disable-next-line @typescript-eslint/no-require-imports +// oxlint-disable-next-line @typescript-eslint/no-require-imports if (require('electron-squirrel-startup')) { app.quit(); } diff --git a/packages/template/webpack-typescript/tmpl/package.json b/packages/template/webpack-typescript/tmpl/package.json index 754556b3ee..e51d78025d 100644 --- a/packages/template/webpack-typescript/tmpl/package.json +++ b/packages/template/webpack-typescript/tmpl/package.json @@ -1,13 +1,10 @@ { "devDependencies": { "@electron-forge/plugin-webpack": "ELECTRON_FORGE/VERSION", - "@typescript-eslint/eslint-plugin": "^8.0.0", - "@typescript-eslint/parser": "^8.0.0", + "oxlint": "^1.0.0", + "oxfmt": "^0.1.0", "@vercel/webpack-asset-relocator-loader": "1.7.3", "css-loader": "^6.0.0", - "eslint": "^8.56.0", - "eslint-plugin-import": "^2.25.0", - "eslint-import-resolver-typescript": "^4.4.4", "fork-ts-checker-webpack-plugin": "^7.2.13", "node-loader": "^2.0.0", "style-loader": "^3.0.0", diff --git a/packages/template/webpack-typescript/tmpl/webpack.plugins.ts b/packages/template/webpack-typescript/tmpl/webpack.plugins.ts index 4836d490ff..3e5ba328dd 100644 --- a/packages/template/webpack-typescript/tmpl/webpack.plugins.ts +++ b/packages/template/webpack-typescript/tmpl/webpack.plugins.ts @@ -1,6 +1,6 @@ import type IForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin'; -// eslint-disable-next-line @typescript-eslint/no-require-imports +// oxlint-disable-next-line @typescript-eslint/no-require-imports const ForkTsCheckerWebpackPlugin: typeof IForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); export const plugins = [