From 90155fa040c5a607e3f7bdb4fc528870092bcb63 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Thu, 16 Jul 2026 02:16:17 +0000 Subject: [PATCH 1/5] chore: split lint ownership between Oxlint and Biome Adopt Oxlint 1.74 for JS/TS/React/Vitest/import semantics with type-aware floating-promise and import-cycle checks. Keep Biome as the sole formatter and non-JS linter (CSS/JSON). Update scripts, docs, and fix correctness findings surfaced by the new lint path. Co-authored-by: Davy --- .changeset/oxlint-biome-split.md | 5 + .oxlintrc.json | 49 + AGENTS.md | 10 +- CONTRIBUTING.md | 13 +- README.md | 4 +- apps/demo/slides/open-slide-launch/index.tsx | 2 +- apps/web/components/landing/hero-setup.tsx | 1 + apps/web/proxy.ts | 8 +- biome.json | 25 +- package.json | 13 +- .../core/src/app/components/asset-view.tsx | 13 +- .../inspector/asset-picker-dialog.tsx | 3 + .../components/inspector/inspector-panel.tsx | 7 +- .../core/src/app/components/overview-grid.tsx | 4 +- .../src/app/components/sidebar/sidebar.tsx | 8 +- .../core/src/app/components/slide-canvas.tsx | 2 +- .../app/components/slide-preload-layer.tsx | 2 +- .../components/style-panel/style-panel.tsx | 5 +- packages/core/src/app/lib/assets.ts | 12 +- .../src/app/lib/inspector/use-comments.ts | 4 +- packages/core/src/app/lib/print-ready.test.ts | 2 +- packages/core/src/app/routes/home-shell.tsx | 8 +- packages/core/src/app/routes/home.tsx | 11 +- packages/core/src/app/routes/presenter.tsx | 17 +- packages/core/src/app/routes/slide.tsx | 4 +- packages/core/src/cli/build.ts | 4 +- packages/core/src/editing/edit-ops.ts | 2 +- packages/core/src/files/assets.ts | 4 +- packages/core/src/vite/design-plugin.test.ts | 3 +- packages/core/tsconfig.json | 1 - pnpm-lock.yaml | 1598 ++++++++++------- 31 files changed, 1098 insertions(+), 746 deletions(-) create mode 100644 .changeset/oxlint-biome-split.md create mode 100644 .oxlintrc.json diff --git a/.changeset/oxlint-biome-split.md b/.changeset/oxlint-biome-split.md new file mode 100644 index 000000000..f2ae28a8c --- /dev/null +++ b/.changeset/oxlint-biome-split.md @@ -0,0 +1,5 @@ +--- +"@open-slide/core": patch +--- + +Fix lint findings uncovered by Oxlint (floating promises, hook deps, a11y labels). diff --git a/.oxlintrc.json b/.oxlintrc.json new file mode 100644 index 000000000..a722cb570 --- /dev/null +++ b/.oxlintrc.json @@ -0,0 +1,49 @@ +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "plugins": ["typescript", "unicorn", "react", "import", "vitest", "jsx-a11y"], + "categories": { + "correctness": "error" + }, + "env": { + "builtin": true + }, + "settings": { + "react": { + "version": "19.2.7" + } + }, + "ignorePatterns": [ + "**/dist/**", + "**/node_modules/**", + "**/*.tsbuildinfo", + "packages/core/src/app/components/ui/**", + "packages/cli/template/**" + ], + "rules": { + "import/no-cycle": "error", + "typescript/no-floating-promises": "error", + "jsx-a11y/prefer-tag-over-role": "off", + "vitest/expect-expect": [ + "error", + { + "assertFunctionNames": [ + "expect", + "expectTypeOf", + "assert", + "expectTagged", + "expectTaggedTransform" + ] + } + ] + }, + "overrides": [ + { + "files": ["**/slides/**", "apps/web/components/landing/**"], + "rules": { + "jsx-a11y/no-static-element-interactions": "off", + "jsx-a11y/no-noninteractive-element-interactions": "off", + "jsx-a11y/prefer-tag-over-role": "off" + } + } + ] +} diff --git a/AGENTS.md b/AGENTS.md index 5431c5747..4c3c9de01 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -23,8 +23,12 @@ Shared config: `biome.json`, `turbo.json`, `pnpm-workspace.yaml`, `tsconfig` per pnpm dev # turbo: runs demo against local core pnpm build # build all packages pnpm typecheck # tsc across the graph -pnpm check # biome (format + lint + organize imports) -pnpm check:fix # auto-fix what biome can +pnpm format:check # biome formatter +pnpm lint # oxlint (JS/TS) + biome (CSS/JSON) +pnpm lint:js # oxlint only +pnpm lint:nonjs # biome non-JS lint only +pnpm check # format:check + lint + typecheck +pnpm check:fix # oxlint --fix + biome check --write pnpm test # vitest ``` @@ -32,7 +36,7 @@ Filter to one package: `pnpm core