Skip to main content

code-quality

Maintain Python code quality using Black formatting, Ruff linting, and mypy type checking. Use when formatting code, running linters, fixing style issues, or adding type hints.

Aller à l'installation

Informations de source

Dépôt
AutumnsGrove/Lattice
Dernière activité de la source
25 décembre 2025 à 17:12
Langue détectée de SKILL.md
anglais
Étoiles
6
Forks
0

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
code-quality
description
Maintain Python code quality using Black formatting, Ruff linting, and mypy type checking. Use when formatting code, running linters, fixing style issues, or adding type hints.
# Code Quality Skill ## When to Activate Activate this skill when: - Formatting Python code - Running linters - Adding type annotations - Fixing code style issues - Setting up quality tools ## Quick Commands ```bash # Format with Black uv run black . uv run black --check . # Dry run # Lint with Ruff uv run ruff check . uv run ruff check --fix . # Auto-fix # Type check with mypy uv run mypy . # All checks uv run black . && uv run ruff check . && uv run mypy . ``` ## Tool Overview | Tool | Purpose | Speed | Auto-fix | |------|---------|-------|----------| | **Black** | Code formatting | Fast | Yes | | **Ruff** | Linting & imports | Very Fast | Most rules | | **mypy** | Type checking | Moderate | No | ## Installation ```bash uv add --dev black ruff mypy ``` ## Black - Code Formatting Zero-config formatting with consistent style. ```bash uv run black . # Format all uv run black --check . # Dry run uv run black --diff . # Show changes ``` ### Configuration ```toml [tool.black] line-length = 88 target-version = ['py311'] ``` ## Ruff - Fast Linting Rust-based linter replacing flake8, isort, pylint, and 50+ tools. ```bash uv run ruff check . # Check uv run ruff check --fix . # Auto-fix uv run ruff check --show-source . # Show context ``` ### Configuration ```toml [tool.ruff] line-length = 88 target-version = "py311" select = ["E", "W", "F", "I", "B", "SIM"] ignore = ["E501"] # Black handles line length [tool.ruff.per-file-ignores] "__init__.py" = ["F401"] "tests/*" = ["S101"] ``` ### Common Issues - **F401**: Unused import (auto-fixable) - **F841**: Unused variable - **I001**: Import sorting (auto-fixable) - **B008**: Mutable default argument ## mypy - Type Checking Static type checker for Python. ```python def greet(name: str) -> str: return f"Hello, {name}" greet(123) # mypy error: incompatible type "int" ``` ### Configuration ```toml [tool.mypy] python_version = "3.11" warn_return_any = true disallow_untyped_defs = false # Enable gradually check_untyped_defs = true ``` ### Common Type Hints ```python from typing import Optional, List, Dict def find_user(user_id: int) -> Optional[Dict[str, str]]: return database.get(user_id) def process_items(items: List[str]) -> int: return len(items) ``` ## Unified Configuration ```toml # pyproject.toml [tool.black] line-length = 88 target-version = ['py311'] [tool.ruff] line-length = 88 target-version = "py311" select = ["E", "W", "F", "I", "B", "SIM"] [tool.mypy] python_version = "3.11" warn_return_any = true ``` ## Skipping Rules ```python import os # noqa: F401 # Ignore Ruff rule # fmt: off # Disable Black matrix = [[1, 2, 3], [4, 5, 6]] # fmt: on ``` ## Workflow Best Practices ### Development (before commit) ```bash uv run black . && uv run ruff check --fix . && uv run mypy . ``` ### CI/CD (strict, no auto-fix) ```bash uv run black --check . && uv run ruff check . && uv run mypy --strict . ``` ## Gradual Adoption 1. **Start with Black** - Zero config, immediate benefits 2. **Add Ruff** - Basic rules first, expand gradually 3. **Introduce mypy** - Lenient initially, increase strictness ## Code Style Principles ### Clarity Over Cleverness ```python # ❌ Clever but unclear result = [x for x in range(10) if x % 2 == 0 if x > 5] # ✅ Clear and readable even_numbers = [x for x in range(10) if x % 2 == 0] result = [x for x in even_numbers if x > 5] ``` ### Meaningful Names ```python # ❌ Unclear def proc(d, x): return d[x] if x in d else None # ✅ Clear def get_user_by_id(users_dict, user_id): return users_dict.get(user_id) ``` ### Early Returns ```python # ❌ Nested def process(amount, user): if amount > 0: if user.has_payment(): return charge(user, amount) # ✅ Early returns def process(amount, user): if amount <= 0: return "Invalid amount" if not user.has_payment(): return "No payment method" return charge(user, amount) ``` ## Related Resources See `AgentUsage/code_quality.md` and `AgentUsage/code_style_guide.md` for: - IDE integration - Pre-commit hook setup - Comprehensive style guidelines - Error handling patterns
Voir sur GitHub