mcpField
L
ln-741-linter-configurator

ln-741-linter-configurator

github.com/levnikolaevichTesting & quality584381 installsUpdated 2d ago
Repository

About ln-741-linter-configurator

A project setup skill that configures linting, formatting, and type checking for TypeScript, Python, and .NET. It detects the project stack, generates or extends configuration, installs dependencies, and verifies the resulting checks.

Key features

  1. 01Detect TypeScript, Python, or .NET stack
  2. 02Generate or extend tool configurations
  3. 03Install required dependencies
  4. 04Create unified scripts/lint.sh
  5. 05Run and verify lint checks

Use cases

  1. 01Set up code quality tools in a new project
  2. 02Bring incomplete linter configurations up to the templates

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/levnikolaevich/claude-code-skills --skill ln-741-linter-configurator

After installing, type/ln-741-linter-configuratorin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

references/
linter_guide.md
references/scripts/
lint_script_template.sh
references/templates/
deptry_template.toml
directory_build_props_template.xml
editorconfig_template.ini
eslint_template.ts
importlinter_template.toml
mypy_template.toml
prettier_template.json
ruff_template.toml
vulture_template.toml

Details

From the project README

Paths: File paths (references/, ../ln-*) are relative to this skill directory.

ln-741-linter-configurator

Type: L3 Worker Category: 7XX Project Bootstrap

Configures code linting, formatting, and type checking tools for TypeScript, Python, and .NET 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 (always latest versions, no pinning)
  • Generates unified lint script (scripts/lint.sh)
  • Verifies all linters run without errors

Does NOT:

  • Configure pre-commit hooks (separate worker)
  • Set up test infrastructure (separate worker)
  • Modify source code

Supported Stacks

TechnologyLinterType CheckerFormatterConfig Files
TypeScriptESLint 9+ (flat config)TypeScript (tsc)Prettiereslint.config.ts, .prettierrc
.NETRoslyn AnalyzersRoslyndotnet format.editorconfig, Directory.Build.props
PythonRuffmypyRuff (built-in)ruff.toml, mypy.toml (or pyproject.toml)

Phase 1: Check Existing Configuration

Before generating configs, check what already exists.

Files to Check:

StackConfig FilesGlob Pattern
TypeScriptESLint configeslint.config.*, .eslintrc*
TypeScriptPrettier config.prettierrc*, prettier.config.*
.NETEditor config.editorconfig
.NETBuild propsDirectory.Build.props
PythonRuff configruff.toml, pyproject.toml
Pythonmypy configmypy.toml, mypy.ini, pyproject.toml [tool.mypy]

Decision Logic:

  1. If no config exists: CREATE from template
  2. If config exists but incomplete (fewer rules/tools than template): EXTEND to match template
  3. If config matches template: SKIP (inform user)

Completeness Check (Python):

AspectCheckTemplate Standard
Ruff rulesCount select entries23+ categories (see ruff_template.toml)
Ruff per-file-ignoresTests section existstests/**/*.py with S101,S105,S106,T201
Ruff advancedmccabe, flake8-bugbear, isortAll present
MyPystrict = trueEnabled
Advanced toolsimport-linter, deptry, vulture in dev depsAll installed
Lint scriptscripts/lint.sh with 7 checksAll 7 active
.editorconfigFile existsPresent

Phase 2: Generate Configuration

Use templates from references/ folder. Customize placeholders based on project.

TypeScript:

  1. Copy eslint_template.ts to project root as eslint.config.ts
  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 ."
    • "typecheck": "tsc --noEmit"
    • "lint:all": "npm run typecheck && npm run lint && npm run format:check"
  4. For React projects: uncomment React sections in template

.NET:

  1. Copy editorconfig_template.ini as .editorconfig
  2. Copy directory_build_props_template.xml as Directory.Build.props
  3. Ensure analyzers are included (SDK 5+ includes them by default)

Python:

  1. Copy ruff_template.toml as ruff.toml
    • OR merge into existing pyproject.toml under [tool.ruff]
  2. Copy mypy_template.toml as mypy.toml
    • OR merge into existing pyproject.toml under [tool.mypy]
  3. Update known-first-party in isort config to match project package name
  4. Update files in mypy config to match project source directories
  5. Generate advanced tool configs in pyproject.toml:
    • [tool.importlinter] from importlinter_template.toml -- adapt root_packages and contracts to project layer structure
    • [tool.vulture] from vulture_template.toml -- adapt paths to project source directory
    • [tool.deptry] from deptry_template.toml -- adapt extend_exclude
  6. Generate .editorconfig from editorconfig_template.ini -- adapt max_line_length to match ruff line-length

Phase 3: Install Dependencies

Install required packages. Always install latest versions — no version pinning.

TypeScript:

npm install -D eslint @eslint/js typescript-eslint eslint-config-prettier prettier eslint-plugin-unicorn jiti

For React projects, also install: npm install -D eslint-plugin-react eslint-plugin-react-hooks

Note on jiti: Required for eslint.config.ts on Node.js < 22.10. On Node.js 22.10+ TypeScript configs are supported natively.

.NET:

  • Analyzers included in SDK 5+ — no separate install needed

Python:

uv add --dev ruff mypy import-linter deptry vulture pip-audit
# OR without uv:
pip install ruff mypy import-linter deptry vulture pip-audit

Phase 4: Generate Lint Script

Generate scripts/lint.sh from lint_script_template.sh with ALL checks for the detected stack.

  1. Copy lint_script_template.sh to scripts/lint.sh
  2. Uncomment ALL check lines matching detected stack -- both basic AND advanced tools:
StackChecksTOTAL
Pythonruff check, ruff format, mypy, lint-imports, deptry, vulture, pip-audit7
TypeScripttypecheck, eslint, prettier, knip, depcruise5
.NETdotnet build, dotnet format2
  1. Set TOTAL to match active checks count
  2. Uncomment matching auto-fix commands in --fix block
  3. Make executable: chmod +x scripts/lint.sh
  4. For TypeScript: ensure "lint:all" script exists in package.json

Phase 5: Verify Setup

After configuration, verify everything works.

TypeScript:

npx tsc --noEmit
npx eslint .
npx prettier --check .

.NET:

dotnet format --verify-no-changes

Python:

ruff check .
ruff format --check .
mypy

Unified verification:

bash scripts/lint.sh

Expected: Exit code 0 for all checks.

On Failure: Check error output, adjust config, re-verify.


Phase 6: Fix Lint Errors

After generating all configs and installing tools, run bash scripts/lint.sh --all to see all violations.

  1. Run bash scripts/lint.sh --fix to auto-fix what ruff can
  2. Fix remaining errors manually (file by file)
  3. For C901 (complexity) on functions that cannot be refactored now: add # noqa: C901
  4. For deptry false positives: add [tool.deptry.per_rule_ignores] entries
  5. Repeat until bash scripts/lint.sh passes with 0 failures

Critical Rules

RULE 1: Always include eslint-config-prettier (last in config) when using ESLint + Prettier together.

RULE 2: Use ESLint flat config format (eslint.config.ts), 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.

RULE 5: Always run mypy alongside Ruff for Python projects. Ruff handles style/bugs, mypy handles type safety.

RULE 6: Use recommendedTypeChecked as ESLint default, not just recommended. Downgrade individual rules if needed.

RULE 7: Never pin dependency versions in install commands -- always install latest.

RULE 8: Advanced static analysis tools (import-linter, deptry, vulture, pip-audit) are MANDATORY for Python projects, not optional.


Monitor (2.1.98+): When lint/typecheck verification commands expected >30s, use Monitor. Fallback: Bash(run_in_background=true).

Definition of Done

  • Appropriate config files created for detected stack
  • Dependencies installed (latest versions)
  • scripts/lint.sh generated with correct checks for stack
  • Lint command runs without errors on project source
  • Format command runs without errors
  • Type checker runs without errors (mypy for Python, tsc for TypeScript)
  • No ESLint/Prettier conflicts (eslint-config-prettier installed)
  • Advanced tools installed and configured (import-linter, deptry, vulture, pip-audit)
  • scripts/lint.sh runs ALL checks (7 for Python) with exit code 0
  • .editorconfig created with settings matching ruff config
  • User informed of available lint/format commands

Reference Files

FilePurpose
eslint_template.tsESLint flat config template (TypeScript)
prettier_template.jsonPrettier config template
ruff_template.tomlPython Ruff config template
mypy_template.tomlPython mypy config template
lint_script_template.shUnified lint script template
editorconfig_template.ini.NET editorconfig template
directory_build_props_template.xml.NET analyzers template
importlinter_template.tomlPython import-linter config template
vulture_template.tomlPython vulture config template
deptry_template.tomlPython deptry config template
linter_guide.mdDetailed configuration guide

Error Handling

ErrorCauseResolution
ESLint/Prettier conflictMissing eslint-config-prettierInstall and add as last config
ESLint projectService errorConfig file not in tsconfigAdd to allowDefaultProject list
ESLint .ts config failsMissing jitinpm install -D jiti
TypeScript parse errorsParser version mismatchAlign typescript-eslint with TS version
mypy missing stubsThird-party library without typesAdd [[mypy.overrides]] with ignore_missing_imports
mypy strict too strictHundreds of errors on first runStart with relaxed config, enable strict gradually
Ruff not foundNot installedpip install ruff or uv add ruff
dotnet format failsMissing SDKInstall .NET SDK

Version: 4.0.0 Last Updated: 2026-03-18

Comments

Markdown supported