Outil CLI d'analyse automatique de code basé sur Claude (Anthropic). Il récupère le diff d'une Merge Request GitLab ou d'une Pull Request GitHub, l'analyse hunk par hunk via un LLM, et poste des commentaires de review directement sur la plateforme.
- Analyse de diffs locaux (fichier
.diff) ou de MR/PR distantes - Support GitLab (Merge Requests) et GitHub (Pull Requests)
- Commentaires inline classés par sévérité :
info,warning,error,critical - Score global de qualité (0–10) et recommandation merge/blocage
- Mode dry-run pour prévisualiser sans poster
- Parsing intelligent du diff : chunking par hunk, limite à 100 lignes par appel LLM
- Python 3.12+
- Un compte Anthropic avec une clé API
- Un token GitLab ou GitHub selon la plateforme cible
git clone <url-du-repo>
cd ai-code-reviewer
pip install -e .Créez un fichier .env à la racine du projet :
# Obligatoire
ANTHROPIC_API_KEY=sk-ant-xxxx
# GitLab (si vous utilisez GitLab)
GITLAB_URL=https://gitlab.com # ou votre instance self-hosted
GITLAB_TOKEN=glpat-xxxx
# GitHub (si vous utilisez GitHub)
GITHUB_TOKEN=ghp_xxxxreviewer review-file mon_diff.diffPour générer un diff depuis git :
git diff main...ma-branche > mon_diff.diff
reviewer review-file mon_diff.diff# Dry-run (affiche sans poster)
reviewer review-mr --project mongroupe/monrepo --mr 42
# Poster les commentaires sur la MR
reviewer review-mr --project mongroupe/monrepo --mr 42 --no-dry-run
# Avec un ID de projet numérique
reviewer review-mr --project 1234 --mr 42 --no-dry-run# Dry-run
reviewer review-mr --provider github --project owner/repo --mr 15
# Poster la review sur la PR
reviewer review-mr --provider github --project owner/repo --mr 15 --no-dry-run| Option | Description | Défaut |
|---|---|---|
--provider |
Plateforme : gitlab ou github |
gitlab |
--project / -p |
Namespace GitLab ou owner/repo GitHub |
— |
--mr |
Numéro de la MR (GitLab) ou PR (GitHub) | — |
--dry-run |
Affiche les commentaires sans les poster | true |
Chaque commentaire contient :
- Fichier et ligne concernés
- Sévérité :
info/warning/error/critical - Catégorie :
bug/security/style/performance/logic - Message : description précise du problème
- Suggestion : correction concrète proposée
Seuls les commentaires error et critical sont postés en inline sur la MR/PR. Un commentaire de synthèse global est toujours posté.
ai-code-reviewer/
├── main.py # CLI (Click) — point d'entrée
├── reviewer/
│ ├── models.py # Modèles Pydantic (ReviewComment, ReviewResult)
│ ├── diff_parser.py # Parse un git diff en DiffHunks
│ ├── llm_reviewer.py # Appels Claude via le SDK Anthropic
│ ├── gitlab_client.py # Lecture MR + post commentaires GitLab
│ └── github_client.py # Lecture PR + post review GitHub
└── tests/
└── test_diff_parser.py
diff (local ou distant)
└─> diff_parser.py — découpage en DiffHunks
└─> llm_reviewer.py — analyse hunk par hunk via Claude
└─> gitlab/github_client.py — post des résultats
pip install -e ".[dev]"
pytest# Toujours travailler en dry-run pendant les tests
DRY_RUN=true- Les commentaires inline GitHub nécessitent que la ligne cible soit dans le diff de la PR (contrainte API GitHub).
- Les très gros diffs (> 1000 lignes) peuvent générer beaucoup d'appels LLM et augmenter les coûts.
- Le modèle utilisé est
claude-opus-4-5— modifiable dansllm_reviewer.py.