Initial upload with CI/CD workflow
This commit is contained in:
224
README.md
224
README.md
@@ -1,3 +1,223 @@
|
||||
# codesnap
|
||||
# CodeSnap - Codebase Summarization CLI
|
||||
|
||||
A CLI tool that analyzes codebases and generates concise, human-readable summaries including file structure, key functions/classes, dependencies, and architectural patterns. Useful for onboarding, understanding legacy code, and providing context to AI assistants.
|
||||
A CLI tool that analyzes codebases and generates concise, human-readable summaries including file structure, key functions/classes, dependencies, and architectural patterns. Useful for onboarding, understanding legacy code, and providing context to AI assistants.
|
||||
|
||||
## Features
|
||||
|
||||
- **Multi-language Support**: Python, JavaScript, TypeScript, Go, Rust, Java, C/C++, Ruby, PHP
|
||||
- **Dependency Analysis**: Build import/dependency graphs using NetworkX
|
||||
- **Complexity Scoring**: Calculate cyclomatic complexity with ratings (low/medium/high/critical)
|
||||
- **Multiple Output Formats**: JSON, Markdown, and LLM-optimized output
|
||||
- **Tree-sitter Parsing**: Accurate code parsing for extraction
|
||||
- **Configuration**: YAML-based configuration with environment variable overrides
|
||||
|
||||
## Installation
|
||||
|
||||
### From PyPI (Recommended)
|
||||
|
||||
```bash
|
||||
pip install codesnap
|
||||
```
|
||||
|
||||
### From Source
|
||||
|
||||
```bash
|
||||
git clone https://7000pct.gitea.bloupla.net/7000pctAUTO/codesnap.git
|
||||
cd codesnap
|
||||
pip install -e .
|
||||
```
|
||||
|
||||
### Development Installation
|
||||
|
||||
```bash
|
||||
pip install -e ".[dev]"
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
### Basic Analysis
|
||||
|
||||
Analyze a directory and generate a summary:
|
||||
|
||||
```bash
|
||||
codesnap analyze /path/to/project
|
||||
```
|
||||
|
||||
### Output Formats
|
||||
|
||||
#### Markdown (Default)
|
||||
|
||||
```bash
|
||||
codesnap analyze /path/to/project --output markdown
|
||||
```
|
||||
|
||||
Generates a human-readable report with:
|
||||
- Language breakdown
|
||||
- File structure (tree view)
|
||||
- Key functions and classes
|
||||
- Dependencies
|
||||
- Complexity metrics
|
||||
|
||||
#### JSON
|
||||
|
||||
```bash
|
||||
codesnap analyze /path/to/project --output json
|
||||
```
|
||||
|
||||
Generates structured JSON output suitable for programmatic processing.
|
||||
|
||||
#### LLM-Optimized
|
||||
|
||||
```bash
|
||||
codesnap analyze /path/to/project --output llm --max-tokens 4000
|
||||
```
|
||||
|
||||
Optimized output for AI assistants with token limiting.
|
||||
|
||||
### Dependency Analysis
|
||||
|
||||
Show dependency graph for a codebase:
|
||||
|
||||
```bash
|
||||
codesnap deps /path/to/project
|
||||
```
|
||||
|
||||
Shows:
|
||||
- Graph statistics
|
||||
- Circular dependencies
|
||||
- Most depended-on files
|
||||
- Most dependent files
|
||||
|
||||
### Complexity Analysis
|
||||
|
||||
Calculate complexity metrics:
|
||||
|
||||
```bash
|
||||
codesnap complexity /path/to/project
|
||||
```
|
||||
|
||||
Shows complexity ratings (low/medium/high/critical) for each file.
|
||||
|
||||
### List Supported Languages
|
||||
|
||||
```bash
|
||||
codesnap languages
|
||||
```
|
||||
|
||||
Shows all supported programming languages and file extensions.
|
||||
|
||||
## Configuration
|
||||
|
||||
Create a `.codesnaprc` file in your project root:
|
||||
|
||||
```yaml
|
||||
max_files: 1000
|
||||
max_tokens: 8000
|
||||
|
||||
include_patterns:
|
||||
- "**/*.py"
|
||||
- "**/*.js"
|
||||
- "**/*.ts"
|
||||
|
||||
exclude_patterns:
|
||||
- "**/node_modules/**"
|
||||
- "**/.git/**"
|
||||
- "**/venv/**"
|
||||
|
||||
complexity:
|
||||
low: 10
|
||||
medium: 20
|
||||
high: 50
|
||||
```
|
||||
|
||||
### Environment Variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
|----------|-------------|---------|
|
||||
| `CODSNAP_MAX_FILES` | Maximum files to analyze | 1000 |
|
||||
| `CODSNAP_MAX_TOKENS` | Maximum output tokens | 8000 |
|
||||
| `CODSNAP_GRCACHE` | Tree-sitter grammar cache | `~/.cache/codesnap/grammars` |
|
||||
|
||||
## Output Formats
|
||||
|
||||
### JSON Schema
|
||||
|
||||
```json
|
||||
{
|
||||
"timestamp": "2024-01-01T00:00:00Z",
|
||||
"version": "0.1.0",
|
||||
"directory": "/path/to/project",
|
||||
"file_count": 10,
|
||||
"language_breakdown": {
|
||||
"python": 5,
|
||||
"javascript": 3,
|
||||
"typescript": 2
|
||||
},
|
||||
"files": [
|
||||
{
|
||||
"path": "/path/to/project/main.py",
|
||||
"language": "python",
|
||||
"functions": [...],
|
||||
"classes": [...]
|
||||
}
|
||||
],
|
||||
"dependencies": {
|
||||
"main.py": ["utils.py", "config.py"]
|
||||
},
|
||||
"metrics": {
|
||||
"total_functions": 25,
|
||||
"total_classes": 5,
|
||||
"cycles_found": 0
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
### Analyze a Python Project
|
||||
|
||||
```bash
|
||||
codesnap analyze ./my-python-app --output markdown
|
||||
```
|
||||
|
||||
### Analyze with Token Limit for LLM
|
||||
|
||||
```bash
|
||||
codesnap analyze ./large-project --output llm --max-tokens 4000 > summary.txt
|
||||
```
|
||||
|
||||
### Find Circular Dependencies
|
||||
|
||||
```bash
|
||||
codesnap deps ./project
|
||||
```
|
||||
|
||||
### Quick Complexity Check
|
||||
|
||||
```bash
|
||||
codesnap complexity ./project --format markdown
|
||||
```
|
||||
|
||||
## Supported Languages
|
||||
|
||||
- Python (.py, .pyw, .pyi)
|
||||
- JavaScript (.js, .mjs, .cjs)
|
||||
- TypeScript (.ts, .tsx)
|
||||
- Go (.go)
|
||||
- Rust (.rs)
|
||||
- Java (.java)
|
||||
- C/C++ (.c, .cpp, .cc, .h, .hpp)
|
||||
- Ruby (.rb)
|
||||
- PHP (.php)
|
||||
|
||||
## Contributing
|
||||
|
||||
1. Fork the repository
|
||||
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
|
||||
3. Commit your changes (`git commit -m 'Add amazing feature'`)
|
||||
4. Push to the branch (`git push origin feature/amazing-feature`)
|
||||
5. Open a Pull Request
|
||||
|
||||
## License
|
||||
|
||||
MIT License - see LICENSE file for details.
|
||||
Reference in New Issue
Block a user