Skip to content

Replace ESLint and Prettier with Oxc tooling#598

Merged
roncohen merged 4 commits intomainfrom
feature/oxlint-husky
Apr 7, 2026
Merged

Replace ESLint and Prettier with Oxc tooling#598
roncohen merged 4 commits intomainfrom
feature/oxlint-husky

Conversation

@roncohen
Copy link
Copy Markdown
Contributor

@roncohen roncohen commented Apr 6, 2026

No description provided.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR migrates the monorepo from ESLint + Prettier (including the internal @reflag/eslint-config) to Oxc tooling (oxlint + oxfmt), and wires formatting/linting into local developer workflows and CI.

Changes:

  • Replace ESLint/Prettier scripts and configs across packages with oxlint/oxfmt; remove tsconfig.eslint.json and per-package eslint.config.js files.
  • Add repo-wide Oxc configuration (.oxlintrc.json, .oxfmtrc.json) and pre-commit formatting/linting via Husky + lint-staged.
  • Normalize various import orders / whitespace changes that follow the new formatter’s output.

Reviewed changes

Copilot reviewed 125 out of 127 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
packages/vue-sdk/vite.config.mjs Formatting-only change (import spacing).
packages/vue-sdk/tsconfig.eslint.json Removed ESLint-specific TS config.
packages/vue-sdk/package.json Switch scripts to oxlint/oxfmt; adjust package entrypoints/exports layout.
packages/vue-sdk/eslint.config.js Removed ESLint config.
packages/tsconfig/package.json JSON field reordering.
packages/rest-api-sdk/package.json JSON field reordering (publishConfig moved).
packages/react-sdk/vite.config.mjs Formatting-only change (import spacing).
packages/react-sdk/tsconfig.eslint.json Removed ESLint-specific TS config.
packages/react-sdk/test/usage.test.tsx Import ordering for formatting consistency.
packages/react-sdk/package.json Switch scripts to oxlint/oxfmt; adjust exports ordering; keep peer deps.
packages/react-sdk/eslint.config.js Removed ESLint config.
packages/react-sdk/dev/nextjs-flag-demo/tsconfig.json Formatting changes (arrays condensed).
packages/react-sdk/dev/nextjs-flag-demo/package.json Replace next lint with oxlint/oxfmt scripts; remove ESLint deps.
packages/react-sdk/dev/nextjs-flag-demo/components/Providers.tsx Formatting-only change (blank line).
packages/react-sdk/dev/nextjs-flag-demo/components/Flags.tsx Formatting-only change (blank line).
packages/react-sdk/dev/nextjs-flag-demo/app/page.tsx Formatting-only change (blank line).
packages/react-sdk/dev/nextjs-flag-demo/app/layout.tsx Formatting-only change (blank line).
packages/react-sdk/dev/nextjs-flag-demo/.eslintrc.json Removed Next.js ESLint config.
packages/react-sdk/dev/nextjs-bootstrap-demo/tsconfig.json Formatting changes (arrays condensed).
packages/react-sdk/dev/nextjs-bootstrap-demo/package.json Replace next lint with oxlint/oxfmt scripts; remove ESLint deps.
packages/react-sdk/dev/nextjs-bootstrap-demo/components/Flags.tsx Formatting-only change (blank line).
packages/react-sdk/dev/nextjs-bootstrap-demo/app/page.tsx Formatting-only change (blank line).
packages/react-sdk/dev/nextjs-bootstrap-demo/app/layout.tsx Import ordering (format-driven).
packages/react-sdk/dev/nextjs-bootstrap-demo/.eslintrc.json Removed Next.js ESLint config.
packages/react-native-sdk/tsconfig.eslint.json Removed ESLint-specific TS config.
packages/react-native-sdk/src/index.tsx Import ordering (format-driven).
packages/react-native-sdk/package.json Switch scripts to oxlint/oxfmt; adjust exports ordering; restore peer deps block.
packages/react-native-sdk/eslint.config.js Removed ESLint config.
packages/react-native-sdk/dev/expo/package.json JSON field reordering.
packages/react-native-sdk/dev/expo/App.tsx Fix effect subscription cleanup + avoid stale state update; adjust deps.
packages/react-native-sdk/dev/bare-rn/metro.config.js Formatting (quotes/spacing).
packages/react-native-sdk/dev/bare-rn/index.js Formatting (quotes/spacing).
packages/react-native-sdk/dev/bare-rn/babel.config.js Formatting (quotes/spacing).
packages/react-native-sdk/dev/bare-rn/App.tsx Formatting-only changes (quotes/JSX/spacing).
packages/react-native-sdk/dev/bare-rn/.prettierrc.js Removed Prettier config.
packages/react-native-sdk/dev/bare-rn/.eslintrc.js Removed ESLint config.
packages/openfeature-node-provider/tsconfig.eslint.json Removed ESLint-specific TS config.
packages/openfeature-node-provider/package.json Switch scripts to oxlint/oxfmt; reorder deps blocks.
packages/openfeature-node-provider/example/serve.ts Import ordering (format-driven).
packages/openfeature-node-provider/example/reflag.ts Formatting-only change (blank line).
packages/openfeature-node-provider/example/package.json JSON field reordering; move packageManager to end.
packages/openfeature-node-provider/example/app.ts Replace side-effect import with explicit provider import + guard; import reordering.
packages/openfeature-node-provider/eslint.config.js Removed ESLint config.
packages/openfeature-browser-provider/vite.config.js Formatting-only change (import spacing).
packages/openfeature-browser-provider/tsconfig.eslint.json Removed ESLint-specific TS config.
packages/openfeature-browser-provider/package.json Switch scripts to oxlint/oxfmt; add packageManager; reorder fields.
packages/openfeature-browser-provider/example/package.json Replace next lint with oxlint/oxfmt scripts; remove ESLint deps.
packages/openfeature-browser-provider/example/components/OpenFeatureProvider.tsx Import ordering/spacing.
packages/openfeature-browser-provider/example/components/HuddleFeature.tsx Import ordering/spacing.
packages/openfeature-browser-provider/example/components/Context.tsx Remove unused catch param (format/lint driven).
packages/openfeature-browser-provider/example/app/page.tsx Remove unused import + reorder.
packages/openfeature-browser-provider/example/app/layout.tsx Formatting-only change (blank line).
packages/openfeature-browser-provider/example/app/featureManagement.ts Import ordering/spacing.
packages/openfeature-browser-provider/example/.eslintrc.json Removed Next.js ESLint config.
packages/openfeature-browser-provider/eslint.config.js Removed ESLint config.
packages/node-sdk/tsconfig.eslint.json Removed ESLint-specific TS config.
packages/node-sdk/test/utils.test.ts Formatting-only change (blank line).
packages/node-sdk/test/flusher.test.ts Formatting-only change (blank line).
packages/node-sdk/test/flagsFallbackProvider.test.ts Formatting-only change (blank line).
packages/node-sdk/src/config.ts Formatting-only change (remove blank line).
packages/node-sdk/package.json Switch scripts to oxlint/oxfmt; reorder fields; keep publish metadata.
packages/node-sdk/examples/express/serve.ts Import ordering/spacing.
packages/node-sdk/examples/express/package.json Rename + make private; JSON field reordering; add packageManager.
packages/node-sdk/examples/express/app.ts Change type import to @reflag/node-sdk; reorder imports.
packages/node-sdk/examples/express/app.test.ts Import ordering/spacing.
packages/node-sdk/eslint.config.js Removed ESLint config.
packages/management-sdk/tsconfig.eslint.json Removed ESLint-specific TS config.
packages/management-sdk/src/api.ts Import ordering (format-driven).
packages/management-sdk/package.json Switch scripts to oxlint/oxfmt; reorder fields.
packages/management-sdk/examples/customer-admin-panel/package.json Replace placeholder lint with oxlint/oxfmt scripts.
packages/management-sdk/examples/customer-admin-panel/app/flags/user/page.tsx Import ordering/spacing.
packages/management-sdk/examples/customer-admin-panel/app/flags/page.tsx Import ordering/spacing.
packages/management-sdk/examples/customer-admin-panel/app/flags/company/page.tsx Import ordering/spacing.
packages/management-sdk/eslint.config.js Removed ESLint config.
packages/flag-evaluation/tsconfig.eslint.json Removed ESLint-specific TS config.
packages/flag-evaluation/package.json Switch scripts to oxlint/oxfmt; reorder deps blocks.
packages/flag-evaluation/eslint.config.js Removed ESLint config.
packages/eslint-config/package.json Deleted internal ESLint config package.
packages/eslint-config/base.js Deleted internal ESLint base config.
packages/cli/utils/version.ts Formatting-only change (blank line).
packages/cli/utils/gen.ts Import ordering/spacing.
packages/cli/utils/auth.ts Import spacing (blank line).
packages/cli/tsconfig.eslint.json Removed ESLint-specific TS config.
packages/cli/stores/config.ts Import ordering (node: imports first).
packages/cli/package.json Switch scripts to oxlint/oxfmt; add husky/lint-staged wiring; reorder fields.
packages/cli/eslint.config.js Removed ESLint config.
packages/cli/commands/rules.ts Import ordering (node: imports first).
packages/cli/commands/new.ts Formatting-only change (remove blank line).
packages/cli/commands/mcp.ts Import ordering (node: imports first).
packages/cli/commands/init.ts Import ordering (node: imports first).
packages/cli/commands/flags.ts Import ordering (node: imports first).
packages/browser-sdk/vite.config.mjs Formatting-only change (import spacing).
packages/browser-sdk/tsconfig.eslint.json Removed ESLint-specific TS config.
packages/browser-sdk/test/usage.test.ts Formatting-only change (remove blank line).
packages/browser-sdk/test/sse.test.ts Formatting-only change (remove blank line).
packages/browser-sdk/test/rateLimiter.test.ts Formatting-only change (remove blank line).
packages/browser-sdk/test/init.test.ts Formatting-only change (remove blank line).
packages/browser-sdk/test/flags.test.ts Import ordering/spacing.
packages/browser-sdk/test/e2e/feedback-widget.browser.spec.ts Formatting-only change (blank line).
packages/browser-sdk/test/e2e/acceptance.browser.spec.ts Formatting-only change (blank line).
packages/browser-sdk/test/client.test.ts Formatting-only change (remove blank line).
packages/browser-sdk/src/ui/packages/floating-ui-preact-dom/useFloating.ts Import ordering (format-driven).
packages/browser-sdk/src/ui/Dialog.tsx Import ordering (format-driven).
packages/browser-sdk/src/toolbar/Toolbar.tsx Formatting-only change (remove blank line).
packages/browser-sdk/src/toolbar/Switch.tsx Remove unnecessary Fragment wrapper; JSX structure simplified.
packages/browser-sdk/src/toolbar/index.ts Formatting-only change (remove blank line).
packages/browser-sdk/src/sse.ts Import ordering (format-driven).
packages/browser-sdk/src/httpClient.ts Import ordering (format-driven).
packages/browser-sdk/src/hooksManager.ts Import ordering (format-driven).
packages/browser-sdk/src/flag/flags.ts Formatting-only change (remove blank line).
packages/browser-sdk/src/flag/flagCache.ts Formatting-only change (remove blank line).
packages/browser-sdk/src/feedback/ui/StarRating.tsx Replace fragment shorthand with explicit Fragment.
packages/browser-sdk/src/feedback/ui/index.ts Formatting-only change (remove blank line).
packages/browser-sdk/src/feedback/ui/FeedbackForm.tsx Formatting-only change (remove blank line).
packages/browser-sdk/src/feedback/ui/FeedbackDialog.tsx Replace fragment shorthand with explicit Fragment; import ordering.
packages/browser-sdk/src/feedback/feedback.ts Import ordering (format-driven).
packages/browser-sdk/src/client.ts Import ordering (format-driven).
packages/browser-sdk/src/bulkQueue.ts Import ordering (format-driven).
packages/browser-sdk/package.json Switch scripts to oxlint/oxfmt; reorder fields; add packageManager.
packages/browser-sdk/eslint.config.js Removed ESLint config.
package.json Add oxlint/oxfmt + lint-staged + husky; update root scripts and CI entrypoints.
.oxlintrc.json Add repository-wide oxlint configuration and ignore patterns.
.oxfmtrc.json Add repository-wide oxfmt configuration and import-sorting rules.
.husky/pre-commit Add pre-commit lint-staged hook.
.gitignore Remove obsolete eslint report ignore entry.
.github/workflows/package-ci.yml Replace Prettier step with yarn fmt; remove ESLint annotation step.
Comments suppressed due to low confidence (1)

packages/node-sdk/examples/express/package.json:15

  • This example now imports BoundReflagClient from @reflag/node-sdk (see app.ts), but @reflag/node-sdk is not listed in this example package’s dependencies. With Yarn PnP/workspaces this will typically fail to resolve at runtime/typecheck time. Add @reflag/node-sdk as a dependency (e.g., workspace:* / workspace:^) or switch the import back to a relative workspace path.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

roncohen added 3 commits April 7, 2026 13:45
- openfeature-node-provider example: drop unreachable null-check,
  use side-effect import for ./reflag plus type-only CreateTodosConfig
- .changeset/config.json: remove stale @reflag/eslint-config ignore
  entry (package was removed in this branch)
- node-sdk: bump vite devDependency to ~6.4.2 to match main and
  reorder package.json fields so it auto-merges against main
- yarn.lock: refresh for vite 6.4.2
Resolved conflicts:
- packages/node-sdk/package.json: keep oxlint/oxfmt scripts, vite ~6.4.2
- packages/node-sdk/examples/express/package.json: keep oxfmt field order,
  include @reflag/node-sdk workspace dep from main
- packages/node-sdk/examples/express/app.ts: keep oxfmt import order with
  reflag default import
- yarn.lock: regenerated via yarn install
Resolved conflicts:
- packages/openfeature-node-provider/package.json: bump @reflag/node-sdk
  dependency to 1.5.0 from main's Version Packages PR; keep oxfmt
  field order
- yarn.lock: regenerated via yarn install
@roncohen roncohen enabled auto-merge April 7, 2026 14:14
@roncohen roncohen added this pull request to the merge queue Apr 7, 2026
Merged via the queue into main with commit d4518a2 Apr 7, 2026
7 checks passed
@roncohen roncohen deleted the feature/oxlint-husky branch April 7, 2026 14:21
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