docs: improve CLAUDE.md structure and clarity

This commit is contained in:
David Soria Parra 2025-01-24 18:42:52 +00:00
commit 57c3aa2f0d
No known key found for this signature in database

142
CLAUDE.md
View file

@ -1,73 +1,99 @@
# Tool Usage Learnings # Development Guidelines
This file is intended to be used by an LLM such as Claude. This document contains critical information about working with this codebase. Follow these guidelines precisely.
## UV Package Manager ## Core Development Rules
- Use `uv run` to run Python tools without activating virtual environments 1. Package Management
- For formatting: `uv run ruff format .` - ONLY use uv, NEVER pip
- For type checking: `uv run pyright` - Installation: `uv add package`
- For upgrading packages: - Running tools: `uv run tool`
- `uv add --dev package --upgrade-package package` to upgrade a specific package - Upgrading: `uv add --dev package --upgrade-package package`
- Don't use `@latest` syntax - it doesn't work - FORBIDDEN: `uv pip install`, `@latest` syntax
- Be careful with `uv pip install` as it may downgrade packages
## Git and GitHub CLI 2. Code Quality
- Type hints required for all code
- Public APIs must have docstrings
- Functions must be focused and small
- Follow existing patterns exactly
- Line length: 88 chars maximum
- When using gh CLI for PRs, always quote title and body: 3. Testing Requirements
- Framework: `uv run pytest`
- Async testing: use anyio, not asyncio
- Coverage: test edge cases and errors
- New features require tests
- Bug fixes require regression tests
4. Version Control
- Commit messages: conventional format (fix:, feat:)
- PR scope: minimal, focused changes
- PR requirements: description, test plan
- Always include issue numbers
- Quote handling:
```bash ```bash
gh pr create --title "\"my title\"" --body "\"my body\"" git commit -am "\"fix: message\""
``` gh pr create --title "\"title\"" --body "\"body\""
- For git commits, use double quotes and escape inner quotes:
```bash
git commit -am "\"fix: my commit message\""
``` ```
## Python Tools ## Code Formatting
### Ruff 1. Ruff
- Handles both formatting and linting - Format: `uv run ruff format .`
- For formatting: `uv run ruff format .` - Check: `uv run ruff check .`
- For checking: `uv run ruff check .` - Fix: `uv run ruff check . --fix`
- For auto-fixing: `uv run ruff check . --fix` - Critical issues:
- Common issues: - Line length (88 chars)
- Line length (default 88 chars) - Import sorting (I001)
- Import sorting (I001 errors)
- Unused imports - Unused imports
- When line length errors occur: - Line wrapping:
- For strings, use parentheses and line continuation - Strings: use parentheses
- For function calls, use multiple lines with proper indentation - Function calls: multi-line with proper indent
- For imports, split into multiple lines - Imports: split into multiple lines
### Pyright 2. Type Checking
- Type checker - Tool: `uv run pyright`
- Run with: `uv run pyright` - Requirements:
- Version warnings can be ignored if type checking passes - Explicit None checks for Optional
- Common issues: - Type narrowing for strings
- Optional types need explicit None checks - Version warnings can be ignored if checks pass
- String operations need type narrowing
## Pre-commit Hooks 3. Pre-commit
- Config: `.pre-commit-config.yaml`
- Runs: on git commit
- Tools: Prettier (YAML/JSON), Ruff (Python)
- Ruff updates:
- Check PyPI versions
- Update config rev
- Commit config first
- Configuration in `.pre-commit-config.yaml` ## Error Resolution
- Runs automatically on git commit
- Includes:
- Prettier for YAML/JSON formatting
- Ruff for Python formatting and linting
- When updating ruff version:
- Check available versions on PyPI
- Update `rev` in config to match available version
- Add and commit config changes before other changes
## Best Practices 1. CI Failures
- Fix order:
1. Formatting
2. Type errors
3. Linting
- Type errors:
- Get full line context
- Check Optional types
- Add type narrowing
- Verify function signatures
1. Always check git status and diff before committing 2. Common Issues
2. Run formatters before type checkers - Line length:
3. When fixing CI: - Break strings with parentheses
- Start with formatting issues - Multi-line function calls
- Then fix type errors - Split imports
- Then address any remaining linting issues - Types:
4. For type errors: - Add None checks
- Get full context around error lines - Narrow string types
- Consider optional types - Match existing patterns
- Add type narrowing checks when needed
3. Best Practices
- Check git status before commits
- Run formatters before type checks
- Keep changes minimal
- Follow existing patterns
- Document public APIs
- Test thoroughly