Add SARIF (Static Analysis Results Interchange Format) output support
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 52/100
Piste de recherche
Commencez dans mypy/error_formatter.py en lisant ErrorFormatter, MypyError, le chemin de sortie JSON existant et OUTPUT_CHOICES. Examinez ensuite la spécification SARIF v2.1.0 et déterminez comment la sortie du formateur peut être agrégée dans un seul document. La tâche est terminée lorsque mypy accepte --output=sarif et émet un rapport compatible avec SARIF contenant les données de diagnostic disponibles.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Feature
Add support for SARIF (Static Analysis Results Interchange Format) output format to mypy, similar to the existing --output=json option.
Pitch
SARIF is an OASIS standard format for static analysis results that is widely supported by modern CI/CD platforms and security tools:
- GitHub Advanced Security natively ingests SARIF files for code scanning alerts
- Azure DevOps supports SARIF for displaying security and code quality results
- GitLab can process SARIF reports for vulnerability tracking
- Many other security and code quality platforms (SonarQube, CodeQL, etc.) support SARIF
Other Python type checkers like Pyre already support SARIF output. Adding this to mypy would:
- Improve integration with GitHub/Azure/GitLab security features
- Make it easier to use mypy in enterprise CI/CD pipelines
- Provide a standardized foundation for richer diagnostics supported by SARIF
- Enable consumption by security tools that require standardized formats
Example Usage
# Generate SARIF output
mypy myproject/ --output=sarif > results.sarif
# Upload to GitHub Code Scanning (requires gzip + base64 encoding)
gzip -c results.sarif | base64 -w0 > results.sarif.gz.b64
gh api /repos/owner/repo/code-scanning/sarifs --method POST \
--field commit_sha="$(git rev-parse HEAD)" \
--field ref="refs/heads/main" \
--field sarif="@results.sarif.gz.b64"
Implementation Notes
The implementation could likely build on the existing output formatter infrastructure:
- Add a new
SARIFFormatterclass inmypy/error_formatter.pyextendingErrorFormatter - Add "sarif" to the
OUTPUT_CHOICESdictionary - Implement the SARIF v2.1.0 JSON schema
The MypyError class already provides the necessary diagnostic data (file path, line, column, error code, message, severity). Note that SARIF requires aggregating results into a single document structure rather than line-by-line output like JSON, which may require some adjustments to the formatter interface.
Related Issues
- #10816 (closed) - discussed multiple output formats including SARIF in comments
- #17612 - GitHub Actions workflow commands format (similar motivation)
- #20212 - Include summary in JSON output
References
- Langage dominant
- Python
- Étoiles
- 20.6k
- Forks
- 3.3k
- Merge moyen
- 1 j 18 h
- PR mergées (30 j)
- 54
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de python/mypy
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
-
documentation
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
-
bug topic-configuration topic-error-reporting
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
Toutes les issues de python/mypy
Issues similaires
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 86/100
zostera/django-bootstrap4#894 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
use-agent-os/agent-os#3276 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
zephyrproject-rtos/zephyr#119726 ·
-
area/auth bug comp/agent P3 platform/discord type/security
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
NousResearch/hermes-agent#117848 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
zilliztech/memsearch#759 ·