# Linting & Formatting Setup This project uses **Biome** for formatting and general linting, with **ESLint** handling React Hooks rules only. ## Tools - **@biomejs/biome** - Fast formatter + linter + import organizer - **eslint** + **eslint-plugin-react-hooks** - React Hooks validation only ## Scripts ```bash # Check formatting and lint (non-destructive) npm run check # Lint all files npm run lint # Fix lint issues npm run lint:fix # Format all files npm run format # Check formatting (dry run) npm run format:check ``` ## Configuration Files - `biome.jsonc` - Biome configuration (format + lint) - `eslint.config.js` - Minimal ESLint flat config for React Hooks only - `.gitignore` - Includes patterns for Biome cache ## What Each Tool Does ### Biome - Code formatting (Prettier-compatible) - General JavaScript/TypeScript linting - Import organization (alphabetical, remove unused) - Dead code detection - Performance optimizations ### ESLint (React Hooks only) - `react-hooks/rules-of-hooks` - Ensures hooks are called unconditionally - `react-hooks/exhaustive-deps` - Warns about incomplete dependency arrays ## IDE Integration ### VS Code Install the Biome extension: ``` code --install-extension biomejs.biome ``` Add to `.vscode/settings.json`: ```json { "editor.defaultFormatter": "biomejs.biome", "editor.formatOnSave": true, "[javascript]": { "editor.defaultFormatter": "biomejs.biome" }, "[typescript]": { "editor.defaultFormatter": "biomejs.biome" }, "[typescriptreact]": { "editor.defaultFormatter": "biomejs.biome" } } ``` ## CI/CD Add to your GitHub Actions workflow: ```yaml - name: Lint run: npm run lint - name: Check formatting run: npm run format:check ``` ## Migration from ESLint + Prettier This setup replaces most ESLint and Prettier functionality: - ✅ Removed `eslint-config-next` inline config from `package.json` - ✅ No `.eslintrc.js` or `.prettierrc` files needed - ✅ ESLint now only runs React Hooks rules - ✅ Biome handles all formatting and general linting ## Why This Setup? 1. **Speed** - Biome is 10-100x faster than ESLint + Prettier 2. **Simplicity** - Single tool for most concerns 3. **Accuracy** - ESLint still catches React-specific issues Biome can't yet handle 4. **Low Maintenance** - Minimal config overlap ## Customization To add custom lint rules, edit: - `biome.jsonc` for general rules - `eslint.config.js` for React Hooks rules