Files
wtismycode/README.md

200 lines
6.6 KiB
Markdown

# ArchDoc
![Rust](https://img.shields.io/badge/Rust-1.85%2B-orange?logo=rust)
![License](https://img.shields.io/badge/License-MIT-blue)
![Tests](https://img.shields.io/badge/Tests-50%20passing-brightgreen)
**Automatic architecture documentation generator for Python projects.**
ArchDoc analyzes your Python codebase using AST parsing and generates comprehensive Markdown documentation covering module structure, dependencies, integration points, and critical hotspots.
## Features
- **AST-Based Analysis** — Full Python AST traversal for imports, classes, functions, calls, and docstrings
- **Dependency Graph** — Module-level and file-level dependency tracking with cycle detection
- **Integration Detection** — Automatically identifies HTTP, database, and message queue integrations
- **Diff-Aware Updates** — Preserves manually written sections while regenerating docs
- **Caching** — Content-hash based caching for fast incremental regeneration
- **Config Validation** — Comprehensive validation of `archdoc.toml` with helpful error messages
- **Statistics** — Project-level stats: file counts, symbol counts, fan-in/fan-out metrics
- **Consistency Checks** — Verify documentation stays in sync with code changes
## Installation
Requires Rust 1.85+:
```bash
cargo install --path archdoc-cli
```
## Quick Start
```bash
# Initialize config in your Python project
archdoc init
# Generate architecture docs
archdoc generate
# View project statistics
archdoc stats
# Check docs are up-to-date
archdoc check
```
## Commands
### `archdoc generate`
Scans the project, analyzes Python files, and generates documentation:
```
$ archdoc generate
🔍 Scanning project...
📂 Found 24 Python files in 6 modules
🔬 Analyzing dependencies...
📝 Generating documentation...
✅ Generated docs/architecture/ARCHITECTURE.md
✅ Generated 6 module docs
```
Output includes:
- **ARCHITECTURE.md** — Top-level overview with module index, dependency graph, and critical points
- **Per-module docs** — Detailed documentation for each module with symbols, imports, and metrics
- **Integration map** — HTTP, database, and queue integration points
- **Critical points** — High fan-in/fan-out symbols and dependency cycles
### `archdoc stats`
Displays project statistics without generating docs:
```
$ archdoc stats
📊 Project Statistics
Files: 24
Modules: 6
Classes: 12
Functions: 47
Imports: 89
Edges: 134
```
### `archdoc check`
Verifies documentation consistency with the current codebase:
```
$ archdoc check
✅ Documentation is up-to-date
```
Returns non-zero exit code if docs are stale — useful in CI pipelines.
### `archdoc init`
Creates a default `archdoc.toml` configuration file:
```
$ archdoc init
✅ Created archdoc.toml with default settings
```
## Configuration Reference
ArchDoc is configured via `archdoc.toml`:
| Section | Key | Default | Description |
|---------|-----|---------|-------------|
| `project` | `root` | `"."` | Project root directory |
| `project` | `out_dir` | `"docs/architecture"` | Output directory for generated docs |
| `project` | `entry_file` | `"ARCHITECTURE.md"` | Main documentation file name |
| `project` | `language` | `"python"` | Project language (only `python` supported) |
| `scan` | `include` | `["src", "app", "tests"]` | Directories to scan |
| `scan` | `exclude` | `[".venv", "__pycache__", ...]` | Directories to skip |
| `scan` | `max_file_size` | `"10MB"` | Skip files larger than this (supports KB, MB, GB) |
| `scan` | `follow_symlinks` | `false` | Whether to follow symbolic links |
| `python` | `src_roots` | `["src", "."]` | Python source roots for import resolution |
| `python` | `include_tests` | `true` | Include test files in analysis |
| `python` | `parse_docstrings` | `true` | Extract docstrings from symbols |
| `python` | `max_parse_errors` | `10` | Max parse errors before aborting |
| `analysis` | `resolve_calls` | `true` | Resolve function call targets |
| `analysis` | `detect_integrations` | `true` | Detect HTTP/DB/queue integrations |
| `output` | `single_file` | `false` | Generate everything in one file |
| `output` | `per_file_docs` | `true` | Generate per-module documentation |
| `thresholds` | `critical_fan_in` | `20` | Fan-in threshold for critical symbols |
| `thresholds` | `critical_fan_out` | `20` | Fan-out threshold for critical symbols |
| `caching` | `enabled` | `true` | Enable analysis caching |
| `caching` | `cache_dir` | `".archdoc/cache"` | Cache directory |
| `caching` | `max_cache_age` | `"24h"` | Cache TTL (supports s, m, h, d, w) |
### Example Configuration
```toml
[project]
root = "."
out_dir = "docs/architecture"
language = "python"
[scan]
include = ["src", "app"]
exclude = [".venv", "__pycache__", ".git"]
max_file_size = "10MB"
[python]
src_roots = ["src"]
include_tests = true
parse_docstrings = true
[analysis]
resolve_calls = true
detect_integrations = true
integration_patterns = [
{ type = "http", patterns = ["requests", "httpx", "aiohttp"] },
{ type = "db", patterns = ["sqlalchemy", "psycopg", "sqlite3"] },
{ type = "queue", patterns = ["celery", "kafka", "redis"] }
]
[caching]
enabled = true
max_cache_age = "24h"
```
## How It Works
1. **Scan** — Walks the project tree, filtering by include/exclude patterns
2. **Parse** — Parses each Python file with a full AST traversal (via `rustpython-parser`)
3. **Analyze** — Builds a project model with modules, symbols, edges, and metrics
4. **Detect** — Identifies integration points (HTTP, DB, queues) and dependency cycles
5. **Render** — Generates Markdown using Handlebars templates
6. **Write** — Outputs files with diff-aware updates preserving manual sections
## Architecture
```
archdoc/
├── archdoc-cli/ # CLI binary (commands, output formatting)
│ └── src/
│ ├── main.rs
│ └── commands/ # generate, check, stats, init
├── archdoc-core/ # Core library
│ └── src/
│ ├── config.rs # Config loading & validation
│ ├── scanner.rs # File discovery
│ ├── python_analyzer.rs # AST analysis
│ ├── model.rs # Project IR (modules, symbols, edges)
│ ├── cycle_detector.rs # Dependency cycle detection
│ ├── renderer.rs # Markdown generation
│ ├── writer.rs # File output with diff awareness
│ └── cache.rs # Analysis caching
└── test-project/ # Example Python project for testing
```
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
## License
This project is licensed under the MIT License — see the LICENSE file for details.