| model | haiku |
| name | linter-autofix |
| description | Cross-language linter autofix commands and common fix patterns for biome, ruff, clippy, shellcheck, and more. |
| allowed-tools | Bash, Read, Edit, Grep |
Linter Autofix Patterns
Quick reference for running linter autofixes across languages.
Autofix Commands
| Language | Linter | Autofix Command |
|---|
| TypeScript/JS | biome | bunx @biomejs/biome check --write . |
| TypeScript/JS | biome format | bunx @biomejs/biome format --write . |
| Python | ruff | ruff check --fix . |
| Python | ruff format | ruff format . |
| Rust | clippy | cargo clippy --fix --allow-dirty |
| Rust | rustfmt | cargo fmt |
| Go | gofmt | gofmt -w . |
| Go | go mod | go mod tidy |
| Shell | shellcheck | apply shellcheck -f diff suggestions |
Common Fix Patterns
JavaScript/TypeScript (Biome)
Unused imports
import { useState, useEffect, useMemo } from 'react';
import { useState } from 'react';
Prefer const
let x = 5;
const x = 5;
Python (Ruff)
Import sorting (I001)
import os
from typing import List
import sys
import os
import sys
from typing import List
Unused imports (F401)
import os
import sys
import os
Line too long (E501)
result = some_function(very_long_argument_one, very_long_argument_two, very_long_argument_three)
result = some_function(
very_long_argument_one,
very_long_argument_two,
very_long_argument_three,
)
Rust (Clippy)
Redundant clone
let s = String::from("hello").clone();
let s = String::from("hello");
Use if let
match option {
Some(x) => do_something(x),
None => {},
}
if let Some(x) = option {
do_something(x);
}
Shell (ShellCheck)
Quote variables (SC2086)
echo $variable
echo "$variable"
Use $(...) instead of backticks (SC2006)
result=`command`
result=$(command)
Quick Autofix (Recommended)
Auto-detect project linters and run all appropriate fixers in one command:
bash "${CLAUDE_PLUGIN_ROOT}/skills/linter-autofix/scripts/detect-and-fix.sh"
bash "${CLAUDE_PLUGIN_ROOT}/skills/linter-autofix/scripts/detect-and-fix.sh" --check-only
The script detects biome, eslint, prettier, ruff, black, clippy, rustfmt, gofmt, golangci-lint, and shellcheck. It reports which linters were found, runs them, and shows modified files. See scripts/detect-and-fix.sh for details.
Manual Workflow
- Run autofix first:
ruff check --fix . && ruff format .
- Check remaining issues:
ruff check .
- Manual fixes for complex cases
- Verify: re-run linter to confirm clean
When to Escalate
Stop and use different approach when:
- Fix requires understanding business logic
- Multiple files need coordinated changes
- Warning indicates potential bug (not just style)
- Security-related linter rule
- Type error requires interface/API changes