# Laurigates Claude Plugins Python Code Quality

> Python Code Quality

- Skill: `tomevault-io/laurigates-claude-plugins-python-code-quality` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/laurigates-claude-plugins-python-code-quality`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/laurigates-claude-plugins-python-code-quality/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/laurigates-claude-plugins-python-code-quality

---


# Python Code Quality

Quick reference for Python code quality tools: ruff (linting & formatting), ty (type checking).

## When This Skill Applies

- Linting Python code
- Code formatting
- Type checking
- Pre-commit hooks
- CI/CD quality gates
- Code style enforcement

## Quick Reference

### Ruff (Linter & Formatter)

```bash
# Lint code
uv run ruff check .

# Auto-fix issues
uv run ruff check --fix .

# Format code
uv run ruff format .

# Check and format
uv run ruff check --fix . && uv run ruff format .

# Show specific rule
uv run ruff check --select E501  # Line too long

# Ignore specific rule
uv run ruff check --ignore E501
```

### ty (Type Checking)

```bash
# Type check project
uv run ty check

# Type check specific file
uv run ty check src/module.py

# Check with explicit Python version
uv run ty check --python 3.11

# Verbose output
uv run ty check --verbose
```

## pyproject.toml Configuration

```toml
[tool.ruff]
line-length = 88
target-version = "py311"

[tool.ruff.lint]
select = [
    "E",   # pycodestyle errors
    "W",   # pycodestyle warnings
    "F",   # pyflakes
    "I",   # isort
    "N",   # pep8-naming
    "UP",  # pyupgrade
    "B",   # flake8-bugbear
]
ignore = [
    "E501",  # line too long (handled by formatter)
]

[tool.ruff.lint.isort]
known-first-party = ["myproject"]

[tool.ty]
python-version = "3.11"
exclude = [
    "**/__pycache__",
    "**/.venv",
    "tests",
]

[tool.ty.rules]
possibly-unbound = "warn"
```

## Type Hints

```python
# Modern type hints (Python 3.10+)
def process_data(
    items: list[str],                    # Not List[str]
    config: dict[str, int],              # Not Dict[str, int]
    optional: str | None = None,         # Not Optional[str]
) -> tuple[bool, str]:                   # Not Tuple[bool, str]
    return True, "success"

# Type aliases
from typing import TypeAlias

UserId: TypeAlias = int
UserDict: TypeAlias = dict[str, str | int]

def get_user(user_id: UserId) -> UserDict:
    return {"id": user_id, "name": "Alice"}
```

## Pre-commit Configuration

```yaml
# .pre-commit-config.yaml
repos:
  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.1.9
    hooks:
      - id: ruff
        args: [--fix]
      - id: ruff-format

  - repo: https://github.com/astral-sh/ty
    rev: v0.0.10
    hooks:
      - id: ty
```

## Common Ruff Rules

- **E501**: Line too long
- **F401**: Unused import
- **F841**: Unused variable
- **I001**: Import not sorted
- **N806**: Variable should be lowercase
- **B008**: Function call in argument defaults

## See Also

- `python-testing` - Testing code quality
- `uv-project-management` - Adding quality tools to projects
- `python-development` - Core Python patterns

## References

- Ruff: https://docs.astral.sh/ruff/
- ty: https://docs.astral.sh/ty/
- Detailed guide: See REFERENCE.md

---
> Converted and distributed by [TomeVault](https://tomevault.io/claim/laurigates) — claim your Tome and manage your conversions.
<!-- tomevault:4.0:skill_md:2026-04-11 -->

