92 lines
2.7 KiB
Markdown
92 lines
2.7 KiB
Markdown
# 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
|