fix: resolve CI issues - push complete implementation with tests
This commit is contained in:
149
README.md
149
README.md
@@ -1,19 +1,27 @@
|
|||||||
# git-diff-explainer-cli
|
# Git Diff Explainer CLI
|
||||||
|
|
||||||
A CLI tool that uses LLMs to explain git diffs in natural language.
|
A CLI tool that parses git diffs and provides intelligent, contextual explanations of code changes. Identifies programming language, summarizes changes, flags potential issues, and suggests improvements - all running locally without external API dependencies.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- Explain git diffs using AI (OpenAI, Anthropic, or local LLMs)
|
- **Parse git diffs/patches**: Extract file names, hunks, and code changes from unified diff format
|
||||||
- Support for multiple diff formats (unified, side-by-side, stats)
|
- **Identify programming language**: Detect language from file extensions and code patterns
|
||||||
- Configurable explanation depth (brief, detailed, comprehensive)
|
- **Summarize changes**: Generate human-readable summaries of what each change does
|
||||||
- Interactive mode for follow-up questions
|
- **Flag potential issues**: Detect bugs, security vulnerabilities, and code smells
|
||||||
- Batch processing of multiple files
|
- **Suggest improvements**: Provide specific refactoring suggestions
|
||||||
|
- **Local execution**: Runs entirely offline using local libraries
|
||||||
|
- **Color-coded output**: Terminal output with ANSI colors for better readability
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
# Using pip
|
||||||
pip install git-diff-explainer-cli
|
pip install git-diff-explainer-cli
|
||||||
|
|
||||||
|
# From source
|
||||||
|
git clone <repository>
|
||||||
|
cd git-diff-explainer-cli
|
||||||
|
pip install -e .
|
||||||
```
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
@@ -21,29 +29,136 @@ pip install git-diff-explainer-cli
|
|||||||
### Basic Usage
|
### Basic Usage
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
gdiffer explain
|
# Explain a diff from stdin
|
||||||
|
git diff | gdiffer explain --stdin
|
||||||
|
|
||||||
|
# Explain a diff file
|
||||||
|
gdiffer explain --file changes.diff
|
||||||
|
|
||||||
|
# Pass diff as argument
|
||||||
|
gdiffer explain "diff --git a/file.py b/file.py..."
|
||||||
|
|
||||||
|
# Get just the summary
|
||||||
|
gdiffer summarize --file changes.diff
|
||||||
|
|
||||||
|
# Check for issues only
|
||||||
|
gdiffer issues --file changes.diff
|
||||||
```
|
```
|
||||||
|
|
||||||
### Options
|
### Options
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
--format TEXT Output format (text, json, markdown) [default: text]
|
# Output format: terminal (default), json, plain
|
||||||
--depth TEXT Explanation depth (brief, detailed, comprehensive) [default: detailed]
|
gdiffer explain --output json
|
||||||
--model TEXT LLM model to use (gpt-4, claude-3-opus, etc.)
|
|
||||||
--interactive Enable interactive mode
|
# Verbose output
|
||||||
--batch Batch process multiple files
|
gdiffer explain --verbose
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
### Simple Diff Explanation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ git diff | gdiffer explain
|
||||||
|
=== Git Diff Analysis Summary ===
|
||||||
|
Total files changed: 1
|
||||||
|
Files added: 0
|
||||||
|
Files deleted: 0
|
||||||
|
Files modified: 1
|
||||||
|
Total changes: 3
|
||||||
|
|
||||||
|
Languages:
|
||||||
|
- python: 1 files
|
||||||
|
|
||||||
|
=== File Changes ===
|
||||||
|
|
||||||
|
1. src/main.py
|
||||||
|
Status: modify
|
||||||
|
Changes: 3 lines
|
||||||
|
Hunk 1:
|
||||||
|
+import os
|
||||||
|
+import sys
|
||||||
|
def main():
|
||||||
|
print("Hello, World!")
|
||||||
|
```
|
||||||
|
|
||||||
|
### JSON Output
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ gdiffer explain --output json "diff --git a/test.py..."
|
||||||
|
{
|
||||||
|
"summary": {
|
||||||
|
"total_files": 1,
|
||||||
|
"files_added": 0,
|
||||||
|
"files_deleted": 0,
|
||||||
|
"files_modified": 1,
|
||||||
|
"total_changes": 2
|
||||||
|
},
|
||||||
|
"files": [...]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Issue Detection
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ gdiffer issues --file sql_injection.diff
|
||||||
|
[CRITICAL] Potential SQL Injection
|
||||||
|
File: db.py:5
|
||||||
|
Description: String concatenation or interpolation used in SQL query
|
||||||
|
Suggestion: Use parameterized queries or ORM methods
|
||||||
|
```
|
||||||
|
|
||||||
|
## Supported Languages
|
||||||
|
|
||||||
|
- Python
|
||||||
|
- JavaScript / TypeScript
|
||||||
|
- Java
|
||||||
|
- Go
|
||||||
|
- Rust
|
||||||
|
- C / C++
|
||||||
|
- Ruby
|
||||||
|
- PHP
|
||||||
|
- And more...
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
Set your API key:
|
Environment variables:
|
||||||
|
|
||||||
|
| Variable | Description | Default |
|
||||||
|
|----------|-------------|---------|
|
||||||
|
| `GDIFF_OUTPUT` | Output format: terminal, json, plain | terminal |
|
||||||
|
| `GDIFF_VERBOSE` | Enable verbose output | false |
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
export OPENAI_API_KEY="your-key"
|
# Install development dependencies
|
||||||
# or
|
pip install -e ".[dev]"
|
||||||
export ANTHROPIC_API_KEY="your-key"
|
|
||||||
|
# Run tests
|
||||||
|
pytest tests/ -v
|
||||||
|
|
||||||
|
# Run with coverage
|
||||||
|
pytest tests/ --cov=src/gdiffer
|
||||||
|
|
||||||
|
# Type checking
|
||||||
|
mypy src/gdiffer/
|
||||||
|
|
||||||
|
# Linting
|
||||||
|
ruff check src/gdiffer/
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Error Handling
|
||||||
|
|
||||||
|
Common errors and solutions:
|
||||||
|
|
||||||
|
| Error | Solution |
|
||||||
|
|-------|----------|
|
||||||
|
| Invalid git diff format | Provide a valid unified diff format |
|
||||||
|
| No changes detected | Ensure the diff contains actual code changes |
|
||||||
|
| Unsupported language | Use a supported language or file extension |
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
MIT
|
MIT
|
||||||
|
|||||||
Reference in New Issue
Block a user