Add Oxlint to frontend linting - #2118
Conversation
|
@copilot update this PR now that vite 8 final is out. Update any deps to latest versions. Get the build working. |
There was a problem hiding this comment.
Pull request overview
This PR updates the ClientApp frontend toolchain to incorporate Oxlint/Oxfmt alongside ESLint/Prettier, and updates Vite-related dependencies/config to use newer native tooling.
Changes:
- Added Oxlint/Oxfmt configuration and wired them into
npm run lint/npm run format. - Updated ESLint flat config to integrate
eslint-plugin-oxlintand avoid overlapping rules. - Updated Vite config to run
vite-plugin-oxlintand refreshed frontend dependencies (including Vite).
Reviewed changes
Copilot reviewed 8 out of 9 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/Exceptionless.Web/ClientApp/vite.config.ts | Adds vite-plugin-oxlint to Vite plugins. |
| src/Exceptionless.Web/ClientApp/src/routes/(auth)/login/+page.svelte | Formatting changes in the password label markup. |
| src/Exceptionless.Web/ClientApp/src/lib/features/auth/schemas.ts | Reformats schema definition for readability. |
| src/Exceptionless.Web/ClientApp/package.json | Adds Oxlint/Oxfmt scripts, adjusts Prettier scope to Svelte, and updates dependencies. |
| src/Exceptionless.Web/ClientApp/eslint.config.js | Integrates eslint-plugin-oxlint, disables a Svelte false-positive rule, and loads Oxlint config. |
| src/Exceptionless.Web/ClientApp/.oxlintrc.json | New Oxlint configuration (plugins, rules, ignores). |
| src/Exceptionless.Web/ClientApp/.oxfmtrc.json | New Oxfmt configuration (style + EOL). |
| src/Exceptionless.Web/ClientApp/.npmrc | Enables legacy-peer-deps. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review. Take the survey.
|
@copilot can you rebase this PR |
|
Looks like we need to rebase this again |
# Conflicts: # src/Exceptionless.Web/ClientApp/package-lock.json # src/Exceptionless.Web/ClientApp/package.json
|
Follow-up feedback and thermo-nuclear audit completed at Feedback disposition
RCA and current implementationThe long-lived PR previously contained unrelated backend/UI changes, so GitHub retains comments against a much broader historical diff. After the tooling pivot and merge-forward, the effective diff is five ClientApp tooling files only. It upgrades Vite to 8.1.5 / Rolldown, pairs it with The thermo-nuclear review found no structural blocker: no application source changes, no file crossing 1,000 lines, no new branching/casts/boundary leaks, no non-atomic state, and no duplicate build-time lint plugin. The focused Svelte probe proved the division of responsibility: Oxlint avoids its known Svelte false positive while ESLint still rejects a genuinely unused Svelte variable. No further code change was warranted. Verification
No external blocker remains. |
# Conflicts: # src/Exceptionless.Web/ClientApp/package-lock.json # src/Exceptionless.Web/ClientApp/package.json
Summary
mainatf5c07400into the branch.<script>blocks.eslint-plugin-svelteas the authoritative framework/template linter.eslint-plugin-oxlintdisables only overlapping rules already covered by Oxlint.Current scope
Vite 8 and the broader frontend dependency refresh have now landed independently on
main, so they are no longer changes introduced by this PR. The remaining five-file diff is focused on the incremental Oxlint integration: its configuration, lint script, ESLint overlap handling, dependencies, and generated lockfile entries.Type-aware
oxlint-tsgolintand Oxfmt remain intentionally excluded while their Svelte and TypeScript integrations continue to mature.Compatibility
Dependency review
Verification
npm ci— passed; 7 low, 0 moderate, 0 high, 0 critical audit findingsnpm run validate— Prettier, Svelte diagnostics, syntax-only Oxlint, and ESLint passednpm run build— Vite 8.1.5 production client and SSR build passednpm run test:unit -- --reporter=dot— 30 files, 332 tests passednpm run build-storybook— passed