Cross-language linter autofix commands and common fix patterns for biome, ruff, clippy, shellcheck, and more.
Scanned 2/12/2026
Install via CLI
openskills install laurigates/claude-plugins---
model: haiku
name: Linter Autofix Patterns
description: Cross-language linter autofix commands and common fix patterns for biome, ruff, clippy, shellcheck, and more.
allowed-tools: Bash(ruff *), Bash(eslint *), Bash(biome *), Bash(prettier *), Read, Edit, Grep
created: 2025-12-27
modified: 2026-01-24
reviewed: 2026-02-08
---
# Linter Autofix Patterns
Quick reference for running linter autofixes across languages.
## Autofix Commands
| Language | Linter | Autofix Command |
|----------|--------|-----------------|
| TypeScript/JS | biome | `npx @biomejs/biome check --write .` |
| TypeScript/JS | biome format | `npx @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 | No autofix (manual only) |
## Common Fix Patterns
### JavaScript/TypeScript (Biome)
**Unused imports**
```typescript
// Before
import { useState, useEffect, useMemo } from 'react';
// Only useState used
// After
import { useState } from 'react';
```
**Prefer const**
```typescript
// Before
let x = 5; // Never reassigned
// After
const x = 5;
```
### Python (Ruff)
**Import sorting (I001)**
```python
# Before
import os
from typing import List
import sys
# After
import os
import sys
from typing import List
```
**Unused imports (F401)**
```python
# Before
import os
import sys # unused
# After
import os
```
**Line too long (E501)**
```python
# Before
result = some_function(very_long_argument_one, very_long_argument_two, very_long_argument_three)
# After
result = some_function(
very_long_argument_one,
very_long_argument_two,
very_long_argument_three,
)
```
### Rust (Clippy)
**Redundant clone**
```rust
// Before
let s = String::from("hello").clone();
// After
let s = String::from("hello");
```
**Use if let**
```rust
// Before
match option {
Some(x) => do_something(x),
None => {},
}
// After
if let Some(x) = option {
do_something(x);
}
```
### Shell (ShellCheck)
**Quote variables (SC2086)**
```bash
# Before
echo $variable
# After
echo "$variable"
```
**Use $(...) instead of backticks (SC2006)**
```bash
# Before
result=`command`
# After
result=$(command)
```
## Quick Autofix (Recommended)
Auto-detect project linters and run all appropriate fixers in one command:
```bash
# Fix mode: detect linters and apply all autofixes
bash "${CLAUDE_PLUGIN_ROOT}/skills/linter-autofix/scripts/detect-and-fix.sh"
# Check-only mode: report issues without fixing
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](scripts/detect-and-fix.sh) for details.
## Manual Workflow
1. Run autofix first: `ruff check --fix . && ruff format .`
2. Check remaining issues: `ruff check .`
3. Manual fixes for complex cases
4. 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
No comments yet. Be the first to comment!