Code Formatter & Linter Installer
Establish consistent code formatting and linting across your project.
Core Workflow Detect stack: Identify language/framework (JS/TS, Python, Go, Rust) Choose tools: Select appropriate formatters and linters Generate configs: Create config files with best-practice rules Add scripts: Include npm/package scripts for format/lint Configure editor: Provide VS Code, IntelliJ, Vim settings Setup pre-commit: Add git hooks for automatic formatting CI integration: Suggest GitHub Actions or CI config Tool Selection by Stack JavaScript/TypeScript Formatter: Prettier Linter: ESLint + typescript-eslint Editor: EditorConfig Hooks: Husky + lint-staged Python Formatter: Black + isort Linter: Ruff or Flake8 + mypy Hooks: pre-commit Go Formatter: gofmt + goimports Linter: golangci-lint Rust Formatter: rustfmt Linter: clippy Configuration Templates Prettier (.prettierrc.json) { "semi": true, "trailingComma": "es5", "singleQuote": true, "printWidth": 100, "tabWidth": 2, "arrowParens": "avoid" }
ESLint (.eslintrc.json) { "extends": [ "eslint:recommended", "plugin:@typescript-eslint/recommended", "plugin:react/recommended", "prettier" ], "rules": { "no-console": "warn", "@typescript-eslint/no-unused-vars": "error" } }
EditorConfig (.editorconfig) root = true
[*] indent_style = space indent_size = 2 end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true
[*.py] indent_size = 4
[*.md] trim_trailing_whitespace = false
Python (pyproject.toml) [ tool.black ] line-length = 100 target-version = ['py311']
[ tool.isort ] profile = "black" line_length = 100
[ tool.mypy ] strict = true warn_return_any = true
Package Scripts JavaScript/TypeScript (package.json) { "scripts": { "format": "prettier --write .", "format:check": "prettier --check .", "lint": "eslint . --ext .ts,.tsx,.js,.jsx", "lint:fix": "eslint . --ext .ts,.tsx,.js,.jsx --fix", "typecheck": "tsc --noEmit" } }
Python
Makefile or scripts
format: black . isort .
lint: ruff check . mypy .
format-check: black --check . isort --check .
Git Hooks Setup Husky + lint-staged (Node.js) Install dependencies: npm install --save-dev husky lint-staged npx husky init
Configure lint-staged (.lintstagedrc.json): { ".{ts,tsx,js,jsx}": ["eslint --fix", "prettier --write"], ".{json,md,yml}": ["prettier --write"] }
Add pre-commit hook (.husky/pre-commit):
!/bin/sh
npx lint-staged
pre-commit (Python) Create .pre-commit-config.yaml: repos: - repo: https://github.com/psf/black rev: 24.1.1 hooks: - id: black
-
repo: https://github.com/pycqa/isort rev: 5.13.2 hooks:
- id: isort
-
repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.2.0 hooks:
- id: ruff args: [--fix]
-
repo: https://github.com/pre-commit/mirrors-mypy rev: v1.8.0 hooks:
- id: mypy
Install: pip install pre-commit pre-commit install
Editor Configuration VS Code (settings.json) { "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true, "editor.codeActionsOnSave": { "source.fixAll.eslint": true }, "[python]": { "editor.defaultFormatter": "ms-python.black-formatter" } }
VS Code Extensions (.vscode/extensions.json) { "recommendations": [ "esbenp.prettier-vscode", "dbaeumer.vscode-eslint", "editorconfig.editorconfig", "ms-python.black-formatter" ] }
IntelliJ/WebStorm Enable: Settings → Languages & Frameworks → JavaScript → Prettier → On save Enable: Settings → Tools → Actions on Save → Reformat code CI Integration GitHub Actions (.github/workflows/lint.yml) name: Lint
on: [push, pull_request]
jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 20 - run: npm ci - run: npm run format:check - run: npm run lint - run: npm run typecheck
Pre-merge checks
.github/workflows/pr-checks.yml
- name: Check formatting run: | npm run format:check || { echo "Code is not formatted. Run 'npm run format' locally." exit 1 }
Installation Checklist
For every setup, provide:
Config files (.prettierrc, .eslintrc, .editorconfig, etc.) Ignore files (.prettierignore, .eslintignore) Package scripts (format, lint, format:check, lint:fix) Git hooks (husky/pre-commit) Editor settings (.vscode/settings.json) CI workflow (.github/workflows/lint.yml) Documentation (README section on running lint/format) Best Practices Run formatter last: Prettier should override other formatting rules Extend configs: Use popular presets (Airbnb, Standard, etc.) Ignore generated files: Add build outputs to ignore files Make hooks skippable: Allow git commit --no-verify for emergencies Document process: Add "Code Style" section to CONTRIBUTING.md Test on clean install: Ensure configs work without local editor setup Keep rules minimal: Start strict, relax if needed Common Configurations
See assets/configs/ for ready-to-use config files:
Next.js + TypeScript React + TypeScript Node.js + TypeScript Python FastAPI Python Django Bypass Instructions (Emergencies)
Skip pre-commit hooks
git commit --no-verify
Skip CI checks (not recommended)
git push --no-verify
Document when bypass is acceptable (hotfixes, emergencies only).