Adds oxfmt (Rust formatter, Prettier-conformant) — the repo had no formatter, so this is a one-time normalization of the JS/TS/JSX code (257 files; purely cosmetic — full suite stays 638/638). Scope is deliberately narrowed in .oxfmtrc.json to JS/TS/JSX only: - singleQuote:true + jsxSingleQuote:false — preserve the project's existing style (single-quoted JS, double-quoted JSX attrs), not oxfmt's double-quote default. (Flipping quotes globally also broke a source-string-parsing test; preserving them keeps featureCoverage green.) - Excludes **/*.css (the CSS→Tailwind migration will rewrite those — formatting them now is wasted churn), **/*.json (avoids reformatting 20 i18n locale files + config), **/*.toml, and src-tauri/** (Rust/Tauri config — out of scope for a frontend JS formatter; oxfmt was reformatting Cargo.toml/tauri.conf.json). Tooling: - `bun run format` (write) / `bun run format:check` (verify). - ci.yml: new "Frontend format check (oxfmt)" gate after the oxlint gate. Verified: format:check clean; oxlint 0 errors; vite build; full suite 638/638; bun install --frozen-lockfile in sync. Co-authored-by: mergetest <test@local> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
34 lines
1.3 KiB
JavaScript
34 lines
1.3 KiB
JavaScript
// Advisory-only lint for the React Compiler rule family that oxlint does not yet
|
|
// implement natively (e.g. react-hooks/set-state-in-effect, immutability,
|
|
// preserve-manual-memoization). Run locally via `bun run lint:hooks`.
|
|
//
|
|
// This is NOT a CI gate. oxlint (`bun run lint`, see .oxlintrc.json) is the gate.
|
|
// Everything oxlint already covers (no-unused-vars, exhaustive-deps,
|
|
// rules-of-hooks, no-undef, max-lines, react-refresh) is turned OFF here so the
|
|
// two tools don't double-report. Drop this file once oxlint's JS-plugin support
|
|
// graduates from alpha and can run eslint-plugin-react-hooks directly.
|
|
import reactHooks from 'eslint-plugin-react-hooks';
|
|
import globals from 'globals';
|
|
import { defineConfig, globalIgnores } from 'eslint/config';
|
|
|
|
export default defineConfig([
|
|
globalIgnores(['dist']),
|
|
{
|
|
files: ['**/*.{js,jsx}'],
|
|
extends: [reactHooks.configs.flat.recommended],
|
|
languageOptions: {
|
|
ecmaVersion: 'latest',
|
|
globals: globals.browser,
|
|
parserOptions: {
|
|
ecmaFeatures: { jsx: true },
|
|
sourceType: 'module',
|
|
},
|
|
},
|
|
rules: {
|
|
// Owned by oxlint — disabled here to avoid duplicate diagnostics.
|
|
'react-hooks/exhaustive-deps': 'off',
|
|
'react-hooks/rules-of-hooks': 'off',
|
|
},
|
|
},
|
|
]);
|