Skip to content

feat: migrate from eslint to oxlint#21

Merged
jahands merged 27 commits intomainfrom
feat/oxlint
Mar 23, 2026
Merged

feat: migrate from eslint to oxlint#21
jahands merged 27 commits intomainfrom
feat/oxlint

Conversation

@jahands
Copy link
Copy Markdown
Owner

@jahands jahands commented Mar 23, 2026

Summary by CodeRabbit

  • New Features

    • Added inline Python scripts and TypeScript scripts documentation guides.
    • Introduced oxlint as the project's linting tool.
  • Bug Fixes & Improvements

    • Migrated linting configuration from ESLint to oxlint across the monorepo.
  • Documentation

    • Updated project structure, CI/CD, and package management documentation.
    • Updated VS Code workspace settings and extensions.
  • Chores

    • Removed ESLint configuration package and related files.
    • Updated all linting scripts and commands to use oxlint.

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 23, 2026

Warning

Rate limit exceeded

@jahands has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 22 minutes and 28 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: be664997-139f-4411-ae38-ea5dbc9cdbc6

📥 Commits

Reviewing files that changed from the base of the PR and between d80ef9b and 3c4f77c.

📒 Files selected for processing (7)
  • .prettierignore
  • apps/example-worker-echoback/README.md
  • packages/oxlint-config/README.md
  • packages/oxlint-config/src/default.config.ts
  • packages/tools/src/cmd/fix.cmd.ts
  • packages/tools/src/tsconfig.ts
  • turbo/generators/helpers/slugify.ts
📝 Walkthrough

Walkthrough

This pull request migrates the monorepo from ESLint to oxlint by removing the @repo/eslint-config package, introducing @repo/oxlint-config, and systematically updating all configuration files, scripts, dependencies, and documentation across the codebase to use oxlint instead.

Changes

Cohort / File(s) Summary
Skill Documentation
.agents/skills/python-inline-scripts/SKILL.md, .agents/skills/typescript-inline-scripts/SKILL.md
New documentation guides for running inline Python scripts via uv and TypeScript scripts via Bun, including example commands and dependency constraints.
ESLint Config Package Removal
packages/eslint-config/*
Complete deletion of the @repo/eslint-config package including CHANGELOG.md, README.md, eslint.config.ts, package.json, and all source files (src/default.config.ts, src/helpers.ts, src/react.config.ts). Removes 154 lines of ESLint configuration logic.
Oxlint Config Package Addition
packages/oxlint-config/README.md, packages/oxlint-config/package.json, packages/oxlint-config/src/default.config.ts, packages/oxlint-config/tsconfig.json
New @repo/oxlint-config package with oxlint configuration, dependencies on oxlint (1.56.0) and oxlint-tsgolint (0.17.1), and comprehensive oxlint rules configuration with plugins and overrides.
Changeset Metadata Updates
.changeset/breezy-jars-press.md, .changeset/cuddly-windows-train.md, .changeset/deep-mirrors-look.md, .changeset/dull-showers-switch.md, .changeset/fast-beers-guess.md, .changeset/fine-words-type.md, .changeset/five-falcons-guess.md, .changeset/modern-cities-slide.md, .changeset/open-feet-read.md, .changeset/petite-berries-hammer.md, .changeset/petite-brooms-watch.md, .changeset/red-singers-kneel.md, .changeset/stale-monkeys-dig.md, .changeset/tame-files-search.md, .changeset/tasty-months-fold.md, .changeset/thick-buses-rhyme.md, .changeset/tired-ghosts-end.md, .changeset/two-loops-reply.md, .changeset/yellow-dancers-dig.md, .changeset/yellow-singers-glow.md
Removes @repo/eslint-config entries from 20 changeset files; adds .changeset/young-carrots-swim.md marking multiple packages (workspace-dependencies, example-worker-echoback, typescript-config, oxlint-config, hono-helpers, turbo-generators, tools) for patch releases with "migrate from eslint to oxlint".
Documentation & Rules
.cursor/rules/ci-cd-deployment.mdc, .cursor/rules/package-management.mdc, .cursor/rules/project-structure.mdc, .windsurf/rules/ci-cd-deployment.md, .windsurf/rules/package-management.md, .windsurf/rules/project-structure.md, AGENTS.md, CLAUDE.md
Updates all developer documentation and cursor/windsurf rules to reference @repo/oxlint-config instead of @repo/eslint-config and rename lint steps from "ESLint linting" to "oxlint linting".
Linting Tool Scripts
packages/tools/bin/run-eslint, packages/tools/bin/run-oxlint
Removes 33-line run-eslint bash wrapper; adds new 21-line run-oxlint script with --type-aware flag, conditional --max-warnings based on CI environment, and process replacement via exec.
Root Config Files
eslint.config.ts, oxlint.config.ts, .npmrc, .vscode/extensions.json, .vscode/settings.json
Deletes eslint.config.ts; adds oxlint.config.ts with defineConfig and getConfig imports; updates .npmrc public hoisting patterns from *eslint* to oxlint and oxlint-tsgolint; replaces VS Code ESLint extension (dbaeumer.vscode-eslint) with OXC extension (oxc.oxc-vscode); removes ESLint-specific VS Code settings.
Monorepo Configuration
package.json, turbo.jsonc, packages/typescript-config/base.json, packages/typescript-config/workers-lib.json, packages/typescript-config/workers.json
Root package.json adds "type": "module", updates check:lint:all from run-eslint to run-oxlint, switches devDependency to @repo/oxlint-config; turbo.jsonc removes FIX_ESLINT env variable and cache outputs; TypeScript configs replace eslint.config.ts with oxlint.config.ts in exclude patterns.
Package Migrations
apps/example-worker-echoback/README.md, apps/example-worker-echoback/env.d.ts, apps/example-worker-echoback/eslint.config.ts, apps/example-worker-echoback/package.json, apps/example-worker-echoback/src/example-worker-echoback.app.ts, packages/hono-helpers/eslint.config.ts, packages/hono-helpers/package.json, packages/tools/eslint.config.ts, packages/tools/package.json, packages/tools/src/cmd/check.cmd.ts, packages/tools/src/cmd/fix.cmd.ts, packages/workspace-dependencies/eslint.config.ts, packages/workspace-dependencies/package.json
Removes eslint.config.ts files from 7 packages; updates check:lint scripts to run-oxlint, removes @repo/eslint-config devDependencies; updates internal lint check commands and help text from "eslint" to "oxlint"; changes fix.cmd.ts to use --fix flag instead of FIX_ESLINT=1 env variable; updates console logging to use .toString() for URL object.
Generator Templates
turbo/generators/eslint.config.ts, turbo/generators/package.json, turbo/generators/plugins/fix-all.ts, turbo/generators/templates/*/env.d.ts.hbs, turbo/generators/templates/*/eslint.config.ts.hbs, turbo/generators/templates/*/package.json.hbs
Removes 7 eslint.config.ts.hbs template files; updates all generated package templates' check:lint scripts to run-oxlint and removes @repo/eslint-config from devDependencies; replaces file-level ESLint disable comments with per-line oxlint directives; updates fix-all plugin to use --fix flag instead of FIX_ESLINT=1.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

The diff involves heterogeneous changes across many file types (configuration, scripts, templates, documentation) with both deletion and addition patterns. While many changes follow similar patterns (removing eslint configs, updating scripts), each file requires separate reasoning to verify correctness of the migration. Logic density is moderate in the oxlint configuration rules and script implementations, and the scope spans the entire monorepo structure.

Poem

🐰 With twitching nose and nimble paws, we hop away,
ESLint configs gone, oxlint leads the way!
From TypeScript inline scripts to lint-checking spree,
A swifter, cleaner migration as can be!
The garden's rules now sharper, oh what delight,
We've bundled up our changes with all our might! 🌟

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title 'feat: migrate from eslint to oxlint' clearly and concisely describes the primary change—replacing ESLint with oxlint across the monorepo. The changeset confirms this is the main objective, with hundreds of lines modified to complete this migration.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/oxlint

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@socket-security
Copy link
Copy Markdown

socket-security bot commented Mar 23, 2026

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addedoxlint@​1.56.0991009196100
Addedoxlint-tsgolint@​0.17.1991009796100

View full report

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (1)
packages/tools/src/cmd/fix.cmd.ts (1)

43-43: Optional: simplify lint command array construction.

This works, but .flat() is redundant here and can be removed for clarity.

♻️ Suggested simplification
-			lint: ['run-oxlint', '--fix'].flat(),
+			lint: ['run-oxlint', '--fix'],
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/tools/src/cmd/fix.cmd.ts` at line 43, The lint command currently
uses an unnecessary .flat() call on the array assigned to the lint property;
remove the .flat() so the lint property directly uses the array literal
['run-oxlint', '--fix'] (locate the lint property in fix.cmd.ts) to simplify the
code and improve clarity.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.agents/skills/python-inline-scripts/SKILL.md:
- Around line 19-26: Uncomment and populate the dependencies declaration so the
example can install httpx before running: remove the leading # from the
dependencies lines (the "dependencies = [" and the "  \"httpx\"" and closing
bracket) and ensure requires-python (e.g., "requires-python = \">=3.12\"") is
present or appropriate; this will allow the import httpx line in the SKILL.md
example to succeed when run with uv run --no-project --script.

In @.changeset/young-carrots-swim.md:
- Line 11: The changeset message "chore: migrate from eslint to oxlint" is too
generic; update the .changeset entry to include per-package descriptions: for
each package affected (name them in the changeset), list what changed (e.g.,
"Updated lint scripts from ESLint to oxlint", "Removed eslint/* deps and added
oxlint/* deps", "Updated config files: .eslintrc -> .oxlintrc or equivalent",
and any package.json script changes). Ensure each package has its own short
bullet or sentence describing the concrete changes so the changeset clearly
documents the migration.

In `@packages/oxlint-config/README.md`:
- Line 1: Update the README title to use the workspace package prefix: replace
the package name string '@turbo/oxlint-config' with '@repo/oxlint-config' so the
title matches the workspace naming convention and the import path used elsewhere
(e.g., apps/example-worker-echoback/README.md).

---

Nitpick comments:
In `@packages/tools/src/cmd/fix.cmd.ts`:
- Line 43: The lint command currently uses an unnecessary .flat() call on the
array assigned to the lint property; remove the .flat() so the lint property
directly uses the array literal ['run-oxlint', '--fix'] (locate the lint
property in fix.cmd.ts) to simplify the code and improve clarity.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: d73a5a0e-9bb8-4ed9-bcb1-786e21ce2f20

📥 Commits

Reviewing files that changed from the base of the PR and between b732521 and d80ef9b.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (81)
  • .agents/skills/python-inline-scripts/SKILL.md
  • .agents/skills/typescript-inline-scripts/SKILL.md
  • .changeset/breezy-jars-press.md
  • .changeset/cuddly-windows-train.md
  • .changeset/deep-mirrors-look.md
  • .changeset/dull-showers-switch.md
  • .changeset/fast-beers-guess.md
  • .changeset/fine-words-type.md
  • .changeset/five-falcons-guess.md
  • .changeset/modern-cities-slide.md
  • .changeset/open-feet-read.md
  • .changeset/petite-berries-hammer.md
  • .changeset/petite-brooms-watch.md
  • .changeset/red-singers-kneel.md
  • .changeset/stale-monkeys-dig.md
  • .changeset/tame-files-search.md
  • .changeset/tasty-months-fold.md
  • .changeset/thick-buses-rhyme.md
  • .changeset/tired-ghosts-end.md
  • .changeset/two-loops-reply.md
  • .changeset/yellow-dancers-dig.md
  • .changeset/yellow-singers-glow.md
  • .changeset/young-carrots-swim.md
  • .cursor/rules/ci-cd-deployment.mdc
  • .cursor/rules/package-management.mdc
  • .cursor/rules/project-structure.mdc
  • .npmrc
  • .vscode/extensions.json
  • .vscode/settings.json
  • .windsurf/rules/ci-cd-deployment.md
  • .windsurf/rules/package-management.md
  • .windsurf/rules/project-structure.md
  • AGENTS.md
  • CLAUDE.md
  • apps/example-worker-echoback/README.md
  • apps/example-worker-echoback/env.d.ts
  • apps/example-worker-echoback/eslint.config.ts
  • apps/example-worker-echoback/package.json
  • apps/example-worker-echoback/src/example-worker-echoback.app.ts
  • eslint.config.ts
  • oxlint.config.ts
  • package.json
  • packages/eslint-config/CHANGELOG.md
  • packages/eslint-config/README.md
  • packages/eslint-config/eslint.config.ts
  • packages/eslint-config/package.json
  • packages/eslint-config/src/default.config.ts
  • packages/eslint-config/src/helpers.ts
  • packages/eslint-config/src/react.config.ts
  • packages/hono-helpers/eslint.config.ts
  • packages/hono-helpers/package.json
  • packages/oxlint-config/README.md
  • packages/oxlint-config/package.json
  • packages/oxlint-config/src/default.config.ts
  • packages/oxlint-config/tsconfig.json
  • packages/tools/bin/run-eslint
  • packages/tools/bin/run-oxlint
  • packages/tools/eslint.config.ts
  • packages/tools/package.json
  • packages/tools/src/cmd/check.cmd.ts
  • packages/tools/src/cmd/fix.cmd.ts
  • packages/typescript-config/base.json
  • packages/typescript-config/workers-lib.json
  • packages/typescript-config/workers.json
  • packages/workspace-dependencies/eslint.config.ts
  • packages/workspace-dependencies/package.json
  • turbo.jsonc
  • turbo/generators/eslint.config.ts
  • turbo/generators/package.json
  • turbo/generators/plugins/fix-all.ts
  • turbo/generators/templates/fetch-worker-minimal/env.d.ts.hbs
  • turbo/generators/templates/fetch-worker-minimal/eslint.config.ts.hbs
  • turbo/generators/templates/fetch-worker-minimal/package.json.hbs
  • turbo/generators/templates/fetch-worker-vite/env.d.ts.hbs
  • turbo/generators/templates/fetch-worker-vite/eslint.config.ts.hbs
  • turbo/generators/templates/fetch-worker-vite/package.json.hbs
  • turbo/generators/templates/fetch-worker/env.d.ts.hbs
  • turbo/generators/templates/fetch-worker/eslint.config.ts.hbs
  • turbo/generators/templates/fetch-worker/package.json.hbs
  • turbo/generators/templates/package/eslint.config.ts.hbs
  • turbo/generators/templates/package/package.json.hbs
💤 Files with no reviewable changes (38)
  • .changeset/dull-showers-switch.md
  • .changeset/fast-beers-guess.md
  • .changeset/modern-cities-slide.md
  • .changeset/tame-files-search.md
  • .changeset/red-singers-kneel.md
  • .changeset/fine-words-type.md
  • .changeset/yellow-singers-glow.md
  • .changeset/deep-mirrors-look.md
  • packages/eslint-config/README.md
  • .changeset/breezy-jars-press.md
  • .changeset/petite-berries-hammer.md
  • packages/eslint-config/CHANGELOG.md
  • .changeset/thick-buses-rhyme.md
  • .changeset/five-falcons-guess.md
  • .changeset/cuddly-windows-train.md
  • .changeset/stale-monkeys-dig.md
  • .changeset/tired-ghosts-end.md
  • .changeset/open-feet-read.md
  • .changeset/tasty-months-fold.md
  • turbo/generators/templates/fetch-worker/eslint.config.ts.hbs
  • .changeset/two-loops-reply.md
  • .changeset/petite-brooms-watch.md
  • turbo/generators/eslint.config.ts
  • packages/hono-helpers/eslint.config.ts
  • turbo/generators/templates/package/eslint.config.ts.hbs
  • turbo/generators/templates/fetch-worker-minimal/eslint.config.ts.hbs
  • packages/workspace-dependencies/eslint.config.ts
  • apps/example-worker-echoback/eslint.config.ts
  • packages/eslint-config/eslint.config.ts
  • packages/tools/eslint.config.ts
  • packages/eslint-config/package.json
  • turbo/generators/templates/fetch-worker-vite/eslint.config.ts.hbs
  • packages/tools/bin/run-eslint
  • packages/eslint-config/src/helpers.ts
  • packages/eslint-config/src/react.config.ts
  • eslint.config.ts
  • packages/eslint-config/src/default.config.ts
  • .changeset/yellow-dancers-dig.md

@jahands
Copy link
Copy Markdown
Owner Author

jahands commented Mar 23, 2026

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 23, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@jahands jahands merged commit 0e1b031 into main Mar 23, 2026
4 checks passed
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.

1 participant