Skip to content

refactor: remove ESLint and port all lint rules to oxlint (1 of 4)#1559

Merged
jeanduplessis merged 6 commits intomainfrom
refactor/eradicate-eslint-1-oxlint
Mar 26, 2026
Merged

refactor: remove ESLint and port all lint rules to oxlint (1 of 4)#1559
jeanduplessis merged 6 commits intomainfrom
refactor/eradicate-eslint-1-oxlint

Conversation

@jeanduplessis
Copy link
Copy Markdown
Contributor

@jeanduplessis jeanduplessis commented Mar 25, 2026

Summary

PR series: 1 of 4 — merge in order: this PR#1560 CI → #1561 email → #1562 trpc

Remove ESLint entirely from the monorepo and port all lint rules to oxlint:

  • Delete all eslint.config.mjs/eslint.config.js files across 20+ workspaces
  • Remove packages/eslint-config shared config package
  • Remove all ESLint dependencies from every package.json and pnpm-workspace.yaml
  • Port lint rules to .oxlintrc.json (root) and kilo-app/.oxlintrc.json (React/RN rules)
  • Add custom oxlint-plugin-drizzle.js to replace eslint-plugin-drizzle
  • Add scripts/lint-all.sh and scripts/typecheck-all.sh for centralized CI/pre-push usage
  • Update pre-push hook to use centralized scripts
  • Simplify per-workspace lint and typecheck scripts (direct oxlint/tsgo calls)
  • Drop --incremental false from tsgo typecheck commands
  • Clean up stale ESLint references in .vscode/, dependabot.yml, docs, tests, and source
  • Remove dead eslint-disable comments and per-workspace lint CI steps
  • Remove unused COMPANY_TYPES import; formatting cleanup on oxlint configs

pnpm-lock.yaml diff is large (~2200 lines removed) due to dropping all ESLint packages.

Verification

  • scripts/lint-all.sh — 0 warnings, 0 errors
  • scripts/typecheck-all.sh --changes-only — all packages pass
  • pnpm format:check — pass

Visual Changes

N/A

Reviewer Notes

  • The oxlint drizzle plugin (oxlint-plugin-drizzle.js) is a custom JS plugin that reimplements the two enforce-delete-with-where / enforce-update-with-where rules from eslint-plugin-drizzle. This is necessary because oxlint doesn't have a built-in drizzle plugin.
  • kilo-app gets its own .oxlintrc.json because it uses React/React Native plugins not applicable to the rest of the monorepo.
  • The next PR (refactor(ci): consolidate workspace CI jobs with dynamic matrix detection (2 of 4) #1560) restructures CI to use the new centralized scripts and adds dynamic workspace detection.

Comment thread package.json
Comment thread scripts/lint-all.sh
Comment thread scripts/typecheck-all.sh Outdated
@kilo-code-bot
Copy link
Copy Markdown
Contributor

kilo-code-bot Bot commented Mar 25, 2026

Code Review Summary

Status: 1 Issue Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 1
SUGGESTION 0

Fix these issues in Kilo Cloud

Issue Details (click to expand)

CRITICAL

None.

WARNING

None.

SUGGESTION

None.

Other Observations (not in diff)

Issues found in unchanged code that cannot receive inline comments:

File Line Issue
package.json 14 Root lint still only checks the backend src, so the shared CI lint job no longer covers workspace packages.
Files Reviewed (1 files)
  • scripts/typecheck-all.sh

Reviewed by gpt-5.4-20260305 · 254,007 tokens

Comment thread scripts/typecheck-all.sh Outdated
Comment thread scripts/typecheck-all.sh Outdated
Comment thread scripts/typecheck-all.sh
ESLint was causing slowdowns in the pre-push hook for some team members.
This replaces it entirely with oxlint, which runs 50-100x faster.

- Delete 25 eslint config files, packages/eslint-config, eslint.fallback.config.mjs
- Port drizzle enforce-delete/update-with-where rules to a custom oxlint JS plugin
- Port type-aware TS rules (no-unsafe-*, await-thenable, etc.) to workspace overrides
- Create kilo-app/.oxlintrc.json with react-native jsPlugin, import, promise, unicorn
- Simplify pre-push hook from 4 parallel jobs to 3 (lint is now fast enough)
- Remove 13 ESLint npm packages, add oxlint-plugin-react-native
- Fix pre-existing unused imports in cloudflare-gastown exposed by migration
- Update AGENTS.md files and knip.json to reflect new tooling
… caching

- Remove lint:oxlint indirection, simplify per-package lint to direct oxlint call
- Drop --incremental false from all tsgo typecheck commands
- Add scripts/lint-all.sh: centralized lint across all workspaces
- Add scripts/typecheck-all.sh: full & incremental typecheck modes
- Update pre-push hook to use centralized scripts
- Reformat oxlint-plugin-drizzle.js (double -> single quotes)
- Remove ESLint extension and settings from .vscode/
- Remove ESLint package ignores from dependabot.yml
- Remove per-workspace lint steps from CI (lint scripts removed in prior commit)
- Update kiloclaw docs to reference oxlint instead of eslint
- Remove dead eslint-disable comments from tests, configs, and source
- Formatting cleanup for oxlint configs
- Remove unused COMPANY_TYPES import
…e detection

Address review feedback: the --changes-only mode now detects changes to
tsconfig*.json and */package.json in addition to .ts/.tsx files, so
config-only changes that can break workspace typechecks are not missed.
…ental typecheck

- Fix pathspec: use '**/tsconfig*.json' and '**/package.json' so nested
  workspace configs (e.g. cloud-agent/tsconfig.json) are detected
- Fall back to full workspace typecheck when pnpm-workspace.yaml changes,
  since catalog version bumps can alter the type surface across packages
The catalog fallback path was running workspace typechecks against
potentially stale trpc declarations. Ensure trpc is rebuilt first.
@jeanduplessis jeanduplessis force-pushed the refactor/eradicate-eslint-1-oxlint branch from 7e2f356 to 9a0f8ef Compare March 25, 2026 21:33
@jeanduplessis jeanduplessis merged commit e697df3 into main Mar 26, 2026
18 of 19 checks passed
@jeanduplessis jeanduplessis deleted the refactor/eradicate-eslint-1-oxlint branch March 26, 2026 00:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants