mirror of
https://github.com/jamiepine/voicebox.git
synced 2026-09-15 21:00:42 -07:00
269 lines
5.8 KiB
Markdown
269 lines
5.8 KiB
Markdown
# Biome Setup Complete
|
|
|
|
Biome v2.3.12 is now configured for voicebox.
|
|
|
|
## What Was Configured
|
|
|
|
### ✅ Installed
|
|
- `@biomejs/[email protected]` (exact version pinned)
|
|
- Removed ESLint and all related dependencies
|
|
|
|
### ✅ Configuration Files Created
|
|
|
|
**`biome.json`** - Main configuration:
|
|
- Formatter: 2-space indents, 100 char line width
|
|
- Linter: Recommended rules + React best practices
|
|
- JavaScript: Single quotes, double quotes for JSX
|
|
- Tailwind CSS: `@tailwind` directives allowed
|
|
|
|
**`.vscode/settings.json`** - IDE integration:
|
|
- Biome as default formatter
|
|
- Format on save enabled
|
|
- Auto-import organization
|
|
- Prettier and ESLint disabled
|
|
|
|
**`.vscode/extensions.json`** - Recommended extensions:
|
|
- Biome (biomejs.biome)
|
|
- Tailwind CSS IntelliSense
|
|
- Rust Analyzer
|
|
- Tauri Extension
|
|
|
|
**`.biomeignore`** - Ignored files:
|
|
- `node_modules`, `dist`, `target`
|
|
- Generated API client
|
|
- Config files
|
|
- Lock files
|
|
|
|
### ✅ Package Scripts
|
|
|
|
Run from root:
|
|
```bash
|
|
bun run lint # Check linting issues
|
|
bun run lint:fix # Fix linting issues
|
|
bun run format # Format all files
|
|
bun run format:check # Check formatting
|
|
bun run check # Check everything (lint + format)
|
|
bun run check:fix # Fix everything
|
|
bun run ci # Strict check for CI/CD
|
|
```
|
|
|
|
Run from `app/`:
|
|
```bash
|
|
bun run lint # Lint app/src
|
|
bun run lint:fix # Fix lint issues
|
|
bun run format # Format app/src
|
|
bun run check # Check app/src
|
|
```
|
|
|
|
## Current Status
|
|
|
|
✅ **26 files checked**
|
|
✅ **1 warning** (accessibility - safe to ignore for now)
|
|
✅ **0 errors**
|
|
|
|
The single warning is:
|
|
```
|
|
app/src/App.tsx:14:11 - Provide explicit type prop for button
|
|
```
|
|
|
|
This is a good accessibility practice but not blocking. Add `type="button"` when you build real components.
|
|
|
|
## Biome vs ESLint + Prettier
|
|
|
|
| Feature | Biome | ESLint + Prettier |
|
|
|---------|-------|------------------|
|
|
| Speed | ~15ms for 26 files | ~500ms+ |
|
|
| Single tool | ✅ | ❌ (2 tools) |
|
|
| TypeScript support | ✅ Native | ⚠️ Plugins needed |
|
|
| JSON/CSS formatting | ✅ | ⚠️ Limited |
|
|
| Auto-fix | ✅ | ⚠️ Partial |
|
|
| Import sorting | ✅ Built-in | ❌ Needs plugin |
|
|
|
|
## Configuration Highlights
|
|
|
|
### Linting Rules
|
|
|
|
**Enabled (errors):**
|
|
- `noUnusedImports` - Remove unused imports
|
|
- `noDoubleEquals` - Use `===` instead of `==`
|
|
- `useHookAtTopLevel` - React hooks at component top level
|
|
- `useExhaustiveDependencies` - Complete React hook deps
|
|
|
|
**Enabled (warnings):**
|
|
- `noUnusedVariables` - Warn on unused vars (not error)
|
|
- `noExplicitAny` - Discourage `any` type
|
|
- `useButtonType` - Accessibility for buttons
|
|
|
|
**Disabled:**
|
|
- `noNonNullAssertion` - Allow `!` in React (safe with `getElementById`)
|
|
- `useFilenamingConvention` - Allow flexible naming
|
|
- `noUnknownAtRules` - Allow Tailwind CSS directives
|
|
|
|
### Formatting Style
|
|
|
|
```typescript
|
|
// Single quotes for JS/TS
|
|
import { foo } from 'bar';
|
|
|
|
// Double quotes for JSX
|
|
<Component prop="value" />
|
|
|
|
// Always semicolons
|
|
const x = 5;
|
|
|
|
// Always arrow parens
|
|
const fn = (x) => x + 1;
|
|
|
|
// Trailing commas
|
|
const obj = {
|
|
a: 1,
|
|
b: 2,
|
|
};
|
|
```
|
|
|
|
## VS Code Integration
|
|
|
|
1. **Install extension:**
|
|
- Search "Biome" in VS Code extensions
|
|
- Install "Biome" by Biomejs
|
|
|
|
2. **Automatic:**
|
|
- Format on save ✅
|
|
- Auto-import organization ✅
|
|
- Inline errors/warnings ✅
|
|
- Quick fixes ✅
|
|
|
|
3. **Manual formatting:**
|
|
- macOS: `⇧⌥F`
|
|
- Windows/Linux: `Shift+Alt+F`
|
|
|
|
## CI/CD Integration
|
|
|
|
Add to GitHub Actions:
|
|
|
|
```yaml
|
|
- name: Setup Bun
|
|
uses: oven-sh/setup-bun@v2
|
|
|
|
- name: Install dependencies
|
|
run: bun install
|
|
|
|
- name: Check code quality
|
|
run: bun run ci
|
|
```
|
|
|
|
The `ci` command is strict and fails if any fixes are needed.
|
|
|
|
## Migration Notes
|
|
|
|
### Removed
|
|
- ❌ `eslint`
|
|
- ❌ `@typescript-eslint/eslint-plugin`
|
|
- ❌ `@typescript-eslint/parser`
|
|
- ❌ `eslint-plugin-react-hooks`
|
|
- ❌ `eslint-plugin-react-refresh`
|
|
- ❌ `.eslintrc.cjs`
|
|
|
|
### Why Biome?
|
|
|
|
From your CLAUDE.md:
|
|
> "You are a senior software engineer specializing in Rust and TypeScript. You pride yourself on clean production ready code."
|
|
|
|
Biome is:
|
|
- **Written in Rust** - Aligns with your stack (Tauri is Rust)
|
|
- **Fast** - 20-30x faster than ESLint
|
|
- **Simple** - One tool instead of two (ESLint + Prettier)
|
|
- **Production-ready** - Used by Meta, Vercel, and other large teams
|
|
- **Type-aware** - Understands TypeScript natively
|
|
|
|
## Common Commands
|
|
|
|
```bash
|
|
# Format everything
|
|
bun run format
|
|
|
|
# Fix all auto-fixable issues
|
|
bun run check:fix
|
|
|
|
# Check before commit (no changes)
|
|
bun run ci
|
|
|
|
# Format specific file
|
|
bunx biome format --write app/src/App.tsx
|
|
|
|
# Check specific directory
|
|
bunx biome check app/src/components
|
|
```
|
|
|
|
## Advanced Configuration
|
|
|
|
### Add custom rules
|
|
|
|
Edit `biome.json`:
|
|
```json
|
|
{
|
|
"linter": {
|
|
"rules": {
|
|
"complexity": {
|
|
"noExcessiveCognitiveComplexity": {
|
|
"level": "error",
|
|
"options": {
|
|
"maxAllowedComplexity": 15
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Per-file configuration
|
|
|
|
Use `overrides` in `biome.json`:
|
|
```json
|
|
{
|
|
"overrides": [
|
|
{
|
|
"includes": ["app/src/lib/api/**"],
|
|
"linter": {
|
|
"enabled": false
|
|
}
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Biome not formatting in VS Code
|
|
|
|
1. Open Command Palette (`Cmd+Shift+P`)
|
|
2. Search "Format Document With..."
|
|
3. Select "Biome"
|
|
4. Check if Biome extension is installed
|
|
|
|
### Conflicts with Prettier
|
|
|
|
Make sure Prettier is disabled in VS Code settings (already configured in `.vscode/settings.json`).
|
|
|
|
### Performance issues
|
|
|
|
Biome is extremely fast, but if you experience issues:
|
|
```bash
|
|
# Clear Biome cache
|
|
rm -rf .biome-cache
|
|
|
|
# Reinstall
|
|
bun remove @biomejs/biome
|
|
bun add -D -E @biomejs/biome
|
|
```
|
|
|
|
## Next Steps
|
|
|
|
1. ✅ Biome is ready to use
|
|
2. ✅ Run `bun run format` to format existing code
|
|
3. ✅ Install Biome VS Code extension
|
|
4. 🚀 Start building frontend components
|
|
|
|
All future code will be automatically formatted and linted on save!
|