Migrate lint pipeline from ESLint/Prettier to Oxlint/oxfmt - #905
Open
YusukeHirao wants to merge 25 commits into
Open
Migrate lint pipeline from ESLint/Prettier to Oxlint/oxfmt#905YusukeHirao wants to merge 25 commits into
YusukeHirao wants to merge 25 commits into
Conversation
YusukeHirao
requested review from
arktds,
dz-furukawa,
teppei-d and
yusasa16
as code owners
August 14, 2026 07:49
YusukeHirao
force-pushed
the
feat/oxlint-migration
branch
from
August 14, 2026 17:45
fad7505 to
f29e541
Compare
arktds
reviewed
Aug 18, 2026
Switch TypeScript from the TS6/TS7 shim to TypeScript 7 directly, since typescript-eslint no longer needs a programmatic compiler API.
…y visitor Vue's <template> block parses into a separate templateBody AST that vue-eslint-parser exposes only through defineTemplateBodyVisitor; a plain visitor never saw it, so the Vue selectors never matched. The name.name="on" selector also compared a VIdentifier node against a string, which never matched either.
YusukeHirao
force-pushed
the
feat/oxlint-migration
branch
from
August 19, 2026 01:42
7633a93 to
a004a9a
Compare
Member
Author
|
ESLintのルールを残す方向で大幅に変更しました。 目的
方針
|
yusasa16
reviewed
Aug 24, 2026
Oxlint's unicorn/no-null now covers this file; align with the rest of the codebase and drop the unused abbreviation in modPath.
…er null Oxlint's unicorn/no-anonymous-default-export and unicorn/no-null now cover this file.
…ver null Oxlint's unicorn/no-anonymous-default-export and unicorn/no-null now cover this file.
Oxlint's unicorn/no-null now covers this file. CSSTree's own null return from matchProperty is left untouched since it's that library's API.
Oxlint's unicorn/consistent-function-scoping and unicorn/prefer-string-raw now cover this file.
These 9 rules have an Oxlint implementation but default to off outside their own category (style/suspicious/restriction/pedantic), so categories.correctness alone didn't turn them on. base.js was disabling them for ESLint on the assumption Oxlint covered them, so neither linter was actually checking for them.
Replace the hand-maintained per-rule off lists in base.js (200+ entries, copied from each plugin's recommended preset) with eslint-plugin-oxlint's buildFromOxlintConfig(), fed directly from @d-zero/oxlint-config's config object. A manual list drifts silently whenever either config changes; generating it keeps the two in sync. eslint-plugin-oxlint maps oxlint's `import` scope to the `import/` prefix, not eslint-plugin-import-x's `import-x/`, so those overlapping rules stay disabled by hand in the importX block. `unicorn/no-null` is force-enabled back off for `**/stylelint-config/**` in oxlint.config.mts, since `null` there is Stylelint's own rule-disabling value, not a stray literal.
These rules were off before the Oxlint migration; the overlap auto-generation accidentally re-enabled them in the wrong direction.
11 unicorn rules that were off before the Oxlint migration reverted to their enabled defaults when the manual disable list was replaced by eslint-plugin-oxlint auto-generation. Restore them as an explicit block since they are repo style choices, not oxlint-overlap suppressions.
yusasa16
approved these changes
Sep 7, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
lint/lint:ci/lint:fix) to Oxlint + oxfmt, keeping Prettier for Pug/Astro only@d-zero/oxlint-configand@d-zero/oxlint-plugin(portsno-click-event; Vue@click/v-on:clickis intentionally not detected by the Oxlint port, seeMIGRATION-v6.md)@d-zero/prettier-config@d-zero/lint-staged-config's default extension mapping from eslint/prettier to oxlint/oxfmttypescript-eslintand all@typescript-eslint/*dependencies entirely, and drop the TypeScript 6/7 compatibility shim in favor of TypeScript 7 directly@d-zero/eslint-confignow only lints what Oxlint doesn't cover (regexp, jsdoc,import-x/no-extraneous-dependencies,no-restricted-syntax, etc.) and excludes.ts/.tsxfiles entirelystandard/node/nodeNoTS/frontendNoTS/oxlintCompanionpresets into justbaseandfrontend@d-zero/eslint-plugin'screateRulenow uses ESLint's ownRuletypes instead of@typescript-eslint/utilsno-click-eventnever detected Vue@click/v-on:click(the<template>AST requiresdefineTemplateBodyVisitor, which the rule never used)package.jsonfield order across all packages (mechanical, no behavior change)MIGRATION-v6.mdBreaking change (alpha)
@d-zero/eslint-config'sconfigs.standard/node/nodeNoTS/frontendNoTSare removed in favor ofbase/frontend. This is a breaking change for any consumer still on those preset names; acceptable at this0.x/alpha stage perproduct-managerguidance, but downstream repos upgrading past this version will need to switch tobase/frontendand, if they use@d-zero/lint-staged-config, addoxlint/oxfmtas dependencies.Test plan
yarn build(all packages build)yarn lint(tsc/oxlint/eslint/oxfmt/prettier/textlint/cspell/secretlint all pass)yarn test(178 tests passing across 10 files, including new Oxlint plugin unit tests, Vue template-body detection tests, and CLI integration tests)