Files
plane/apps/web/core/components/readonly
AaronandGitHub 01b808f1f1 chore: migrate from ESLint to oxlint with type-aware linting (#6188)
* chore: migrate from ESLint to oxlint with type-aware linting

- Replace ESLint with oxlint + oxlint-tsgolint (type-aware via tsgolint)
- Generate .oxlintrc.json via `@oxlint/migrate --type-aware --js-plugins`
- Remove ESLint devDependencies (@eslint/js, eslint, typescript-eslint,
  eslint-plugin-import, eslint-plugin-jsx-a11y, eslint-plugin-promise,
  eslint-plugin-react, eslint-plugin-react-hooks, eslint-plugin-react-refresh,
  eslint-config-prettier, globals, @vitest/eslint-plugin)
- Keep eslint-plugin-storybook and eslint-plugin-turbo as oxlint JS plugins
- Add eslint-plugin-jsx-a11y and eslint-plugin-react-hooks back as aliased
  JS plugins to cover 9 rules not yet natively implemented in oxlint
- Delete eslint.config.mjs
- Update all workspace check:lint / fix:lint scripts to use oxlint --type-aware
- Update lint-staged to use oxlint --type-aware --fix
- Update turbo.json: globalDependencies and check:lint outputs
- Update CI workflow trigger to watch .oxlintrc.json instead of eslint.config.mjs
- Convert eslint-disable comments to oxlint-disable via --replace-eslint-comments
- Fix no-duplicate-enum-values suppressions in packages/constants and packages/ui
  (disable comment must precede the first occurrence, not the second)

162 rules active (153 native + 9 via JS plugins), including full type-aware
@typescript-eslint rules via tsgolint. Only import/no-unresolved dropped
permanently (intentionally unsupported by oxlint).

Known oxlint bugs found during migration (reported upstream):
- @oxlint/migrate generates extraHOCs but schema requires customHOCs
- @oxlint/migrate --type-aware writes options.typeAware not in 1.50.0 schema
- @oxlint/migrate bloats settings block with turbo internal cache key state
- oxlint-disable-next-line targets wrong line for multi-line diagnostics

* chore: address PR review comments

- Revert workbox-9f2f79cf.js (generated public asset, already in ignorePatterns)
- Fix oxlint-disable-next-line placement in render-if-visible-HOC.tsx:
  exhaustive-deps fires on useEffect call, not inside the cleanup function

* chore: address Copilot PR review comments

- pie-chart-grouping.tsx: fix disable comment placement (must precede useCallback
  call, not be inside it), use void for floating promises
- badge/helper.tsx: fix missing @ prefix on @typescript-eslint/no-duplicate-enum-values
- constants/src/issue/common.ts: fix missing @ prefix on @typescript-eslint/no-duplicate-enum-values
- package.json: add --deny-warnings to lint-staged oxlint command to preserve pre-commit strictness
2026-03-09 13:54:47 +05:30
..