Configures ESLint, Prettier, Ruff, and .NET analyzers
Scanned 2/12/2026
Install via CLI
openskills install majiayu000/claude-skill-registry---
name: ln-741-linter-configurator
description: Configures ESLint, Prettier, Ruff, and .NET analyzers
---
# ln-741-linter-configurator
**Type:** L3 Worker
**Category:** 7XX Project Bootstrap
**Parent:** ln-740-quality-setup
Configures code linting and formatting tools for TypeScript, .NET, and Python projects.
---
## Purpose & Scope
**Does:**
- Detects which linter stack to configure based on project type
- Checks for existing linter configurations
- Generates appropriate config files from templates
- Installs required dependencies
- Verifies linter runs without errors
**Does NOT:**
- Configure pre-commit hooks (ln-742 does this)
- Set up test infrastructure (ln-743 does this)
- Modify source code
---
## Supported Stacks
| Technology | Linter | Formatter | Config Files |
|------------|--------|-----------|--------------|
| TypeScript/React | ESLint 9+ (flat config) | Prettier | `eslint.config.mjs`, `.prettierrc` |
| .NET | Roslyn Analyzers | dotnet format | `.editorconfig`, `Directory.Build.props` |
| Python | Ruff | Ruff (built-in) | `ruff.toml` or `pyproject.toml` |
---
## Phase 1: Check Existing Configuration
Before generating configs, check what already exists.
**Files to Check:**
| Stack | Config Files | Glob Pattern |
|-------|--------------|--------------|
| TypeScript | ESLint config | `eslint.config.*`, `.eslintrc*` |
| TypeScript | Prettier config | `.prettierrc*`, `prettier.config.*` |
| .NET | Editor config | `.editorconfig` |
| .NET | Build props | `Directory.Build.props` |
| Python | Ruff config | `ruff.toml`, `pyproject.toml` |
**Decision Logic:**
1. If config exists and is complete: **SKIP** (inform user)
2. If config exists but incomplete: **ASK** user to merge or replace
3. If no config exists: **CREATE** from template
---
## Phase 2: Generate Configuration
Use templates from references/ folder. Customize placeholders based on project.
**TypeScript/React:**
1. Copy `eslint_template.mjs` to project root as `eslint.config.mjs`
2. Copy `prettier_template.json` as `.prettierrc`
3. Add scripts to `package.json`:
- `"lint": "eslint ."`
- `"lint:fix": "eslint . --fix"`
- `"format": "prettier --write ."`
- `"format:check": "prettier --check ."`
**.NET:**
1. Copy `editorconfig_template.ini` as `.editorconfig`
2. Copy `directory_build_props_template.xml` as `Directory.Build.props`
3. Ensure analyzers package reference included
**Python:**
1. Copy `ruff_template.toml` as `ruff.toml`
- OR merge into existing `pyproject.toml` under `[tool.ruff]`
2. Add scripts to `pyproject.toml` or document commands
---
## Phase 3: Install Dependencies
Install required packages for each stack.
**TypeScript/React:**
```
npm install -D eslint @eslint/js typescript-eslint eslint-plugin-react eslint-plugin-react-hooks eslint-config-prettier prettier
```
> **CRITICAL:** `eslint-config-prettier` is REQUIRED to prevent ESLint/Prettier conflicts.
**.NET:**
- Analyzers configured via Directory.Build.props
- No separate install needed
**Python:**
```
pip install ruff
# OR with uv:
uv add --dev ruff
```
---
## Phase 4: Verify Setup
After configuration, verify linter works.
**TypeScript:**
```bash
npm run lint
npm run format:check
```
Expected: Exit code 0
**.NET:**
```bash
dotnet format --verify-no-changes
```
Expected: Exit code 0
**Python:**
```bash
ruff check .
ruff format --check .
```
Expected: Exit code 0
**On Failure:** Check error output, adjust config, re-verify.
---
## Critical Rules
> **RULE 1:** Always include `eslint-config-prettier` when using ESLint + Prettier together.
> **RULE 2:** Use ESLint flat config format (eslint.config.mjs), NOT legacy .eslintrc.
> **RULE 3:** Ruff replaces Black, isort, flake8, and many other Python tools. Do NOT install them separately.
> **RULE 4:** Never disable strict TypeScript rules without documented reason.
---
## Definition of Done
- [ ] Appropriate config files created for detected stack
- [ ] Dependencies installed
- [ ] Lint command runs without errors on project source
- [ ] Format command runs without errors
- [ ] No ESLint/Prettier conflicts (eslint-config-prettier installed)
- [ ] User informed of available lint/format commands
---
## Reference Files
| File | Purpose |
|------|---------|
| [eslint_template.mjs](references/eslint_template.mjs) | ESLint flat config template |
| [prettier_template.json](references/prettier_template.json) | Prettier config template |
| [editorconfig_template.ini](references/editorconfig_template.ini) | .NET editorconfig template |
| [directory_build_props_template.xml](references/directory_build_props_template.xml) | .NET analyzers template |
| [ruff_template.toml](references/ruff_template.toml) | Python Ruff config template |
| [linter_guide.md](references/linter_guide.md) | Detailed configuration guide |
---
## Error Handling
| Error | Cause | Resolution |
|-------|-------|------------|
| ESLint/Prettier conflict | Missing eslint-config-prettier | Install and add to config |
| TypeScript parse errors | Parser version mismatch | Align typescript-eslint with TS version |
| Ruff not found | Not installed | `pip install ruff` or `uv add ruff` |
| dotnet format fails | Missing SDK | Install .NET SDK |
---
**Version:** 2.0.0
**Last Updated:** 2026-01-10
No comments yet. Be the first to comment!