# Linting in Plane - How It Works We use [OxLint](https://oxc.rs/docs/guide/usage/linter) for linting across the entire monorepo. OxLint is a single Rust binary that's 50-100x faster than ESLint, with zero Node.js dependencies at runtime. ## Key Points 1. **Single Root Config** - One `.oxlintrc.json` at the repo root handles all packages and apps 2. **No Build Required** - OxLint doesn't need TypeScript build artifacts, so lint runs independently of build 3. **Plugin Coverage** - react, typescript, jsx-a11y, import, promise, unicorn, oxc ## How to Run From the root of the repo: ```bash # Check for lint errors pnpm check:lint # Auto-fix lint errors pnpm fix:lint ``` To lint a specific package: ```bash pnpm turbo run check:lint --filter=@plane/ui ``` ## VS Code Integration Install the [OxLint extension](https://marketplace.visualstudio.com/items?itemName=nicolo-ribaudo.vscode-oxlint) for inline errors/warnings as you type. ## What Gets Linted The config applies to all TypeScript and JavaScript files across: - `apps/web`, `apps/admin`, `apps/space`, `apps/live` - All packages in `packages/` **Ignored paths:** - `node_modules/`, `dist/`, `build/`, `.next/`, `.turbo/` - Config files (`*.config.{js,mjs,cjs,ts}`) - Public folders, coverage, storybook-static ## Rules Overview OxLint uses category-based configuration: | Category | Level | What It Catches | | --------------- | ----- | -------------------------------------------------- | | **correctness** | error | Real bugs that will cause runtime errors | | **suspicious** | warn | Code patterns that are likely mistakes | | **perf** | warn | Performance anti-patterns | Additional rule overrides: - `react/prop-types` off (TypeScript handles prop validation) - `no-unused-vars` warns with `_` prefix pattern ignored - Several noisy unicorn rules disabled ## Backward Compatibility OxLint supports `eslint-disable` comments, so existing inline suppressions continue to work. ## Suppressing Warnings ```typescript // Single line // eslint-disable-next-line no-unused-vars const data = response; // Block /* eslint-disable no-unused-vars */ // ... code /* eslint-enable no-unused-vars */ ``` **Please use sparingly** - most warnings indicate real issues that should be fixed. ## Pre-commit Hook Lint-staged runs automatically on commit via Husky: - oxfmt formats your staged files - OxLint fixes what it can (with `--deny-warnings`) If the commit fails due to lint errors, fix them before committing. ## Reference Files - [.oxlintrc.json](../.oxlintrc.json) - OxLint configuration - [package.json](../package.json) - Available scripts