| nav_exclude | true |
|---|---|
| lang | fr |
| permalink | /fr/labs/lab-02-linting/ |
| title | Lab 02 : Analyse de lint |
| description | Exécuter des linters par langage sur les 5 applications de démonstration et comprendre le format de sortie SARIF pour les résultats de qualité du code. |
| Durée | Niveau | Prérequis |
|---|---|---|
| 45 min | Intermédiaire | Lab 01 |
- Exécuter ESLint sur du code TypeScript et interpréter les résultats de lint
- Exécuter Ruff sur du code Python et comprendre les catégories de règles
- Exécuter .NET Analyzers sur du code C#
- Exécuter Checkstyle sur du code Java
- Exécuter golangci-lint sur du code Go
- Comprendre le format de sortie SARIF pour les résultats des linters
- Lab 01 : Explorer les applications de démonstration terminé
- Tous les outils d'analyse installés (ESLint, Ruff, golangci-lint)
Répertoire de travail : Exécutez les commandes suivantes depuis la racine du dépôt
code-quality-scan-demo-app.
Naviguez vers l'application de démonstration TypeScript et installez les dépendances :
cd cq-demo-app-001
npm installExécutez ESLint avec le formateur stylish par défaut pour obtenir une sortie lisible :
npx eslint src/ --format stylishVous devriez voir des violations telles que :
prefer-const— variables déclarées avecletqui ne sont jamais réassignées@typescript-eslint/no-unused-vars— variables déclarées mais non utilisées@typescript-eslint/no-explicit-any— utilisation du typeanyau lieu de types spécifiques
Exécutez maintenant ESLint avec une sortie SARIF pour voir le format lisible par machine :
npx eslint src/ --format @microsoft/eslint-formatter-sarif --output-file eslint-results.sarifRemarque : Si le formateur SARIF n'est pas installé, installez-le d'abord :
npm install -D @microsoft/eslint-formatter-sarif
Examinez la sortie SARIF :
Get-Content eslint-results.sarif | ConvertFrom-Json | ConvertTo-Json -Depth 10 | Select-Object -First 60cd ..Naviguez vers l'application de démonstration Python et exécutez Ruff :
cd cq-demo-app-002
ruff check src/Ruff organise les règles par préfixe de catégorie :
| Préfixe | Catégorie | Exemple |
|---|---|---|
F |
Pyflakes — erreurs de logique | F401 (import inutilisé), F841 (variable inutilisée) |
E |
pycodestyle — erreurs de style | E501 (ligne trop longue) |
W |
pycodestyle — avertissements | W291 (espace blanc en fin de ligne) |
I |
isort — ordre des imports | I001 (imports non triés) |
N |
pep8-naming — conventions de nommage | N802 (le nom de fonction doit être en minuscules) |
Exécutez Ruff avec une sortie SARIF :
ruff check src/ --output-format sarif --output-file ruff-results.sarifcd ..Naviguez vers l'application de démonstration C# et compilez avec les analyseurs activés :
cd cq-demo-app-003
dotnet build /p:TreatWarningsAsErrors=false -warnaserror- 2>&1 | Select-String "warning CA|error CA"Les résultats courants de .NET Analyzers incluent :
| Règle | Description |
|---|---|
| CA1822 | Marquer les membres comme statiques |
| CA2007 | Envisager l'appel à ConfigureAwait |
| CA1062 | Valider les arguments des méthodes publiques |
| CA1031 | Ne pas intercepter les types d'exception généraux |
| IDE0060 | Supprimer le paramètre inutilisé |
Pour générer une sortie SARIF à partir de la compilation .NET :
dotnet build /p:ErrorLog=dotnet-results.sarif,version=2.1cd ..Naviguez vers l'application de démonstration Java et exécutez Checkstyle via Maven :
cd cq-demo-app-004
.\mvnw.cmd checkstyle:check 2>&1 | Select-Object -Last 30Remarque sur la compatibilité multiplateforme : Sur Linux/macOS, utilisez
./mvnwau lieu de.\mvnw.cmd.
Résultats courants de Checkstyle :
| Règle | Description |
|---|---|
NamingConvention |
Violations de convention de nommage des méthodes/variables |
LineLength |
Lignes dépassant 120 caractères |
MagicNumber |
Littéraux numériques codés en dur |
JavadocMethod |
Javadoc manquant sur les méthodes publiques |
CyclomaticComplexity |
Méthodes avec une complexité > 10 |
cd ..Naviguez vers l'application de démonstration Go et exécutez golangci-lint :
cd cq-demo-app-005
golangci-lint run ./...Résultats courants de golangci-lint :
| Linter | Description |
|---|---|
errcheck |
Valeurs de retour d'erreur non vérifiées |
ineffassign |
Affectations à des variables jamais utilisées par la suite |
staticcheck |
Analyse statique avancée |
govet |
Signale les constructions suspectes |
unused |
Variables, fonctions ou types inutilisés |
Exécutez avec une sortie SARIF (golangci-lint ne produit pas nativement du SARIF, mais vous pouvez utiliser JSON et convertir) :
golangci-lint run ./... --out-format json > golangci-lint-results.jsoncd ..Ouvrez l'un des fichiers SARIF générés lors des exercices précédents. Un résultat SARIF ressemble à ceci :
{
"$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/main/sarif-2.1/schema/sarif-schema-2.1.0.json",
"version": "2.1.0",
"runs": [
{
"tool": {
"driver": {
"name": "ESLint",
"rules": [
{
"id": "prefer-const",
"shortDescription": { "text": "Require const for variables that are never reassigned" },
"helpUri": "https://eslint.org/docs/rules/prefer-const"
}
]
}
},
"results": [
{
"ruleId": "prefer-const",
"level": "warning",
"message": { "text": "'x' is never reassigned. Use 'const' instead." },
"locations": [
{
"physicalLocation": {
"artifactLocation": { "uri": "src/utils/helpers.ts" },
"region": { "startLine": 15, "startColumn": 7 }
}
}
]
}
]
}
]
}Concepts clés du format SARIF :
| Élément | Objectif |
|---|---|
tool.driver.name |
Identifie l'outil d'analyse |
tool.driver.rules |
Définitions des règles avec descriptions |
results[].ruleId |
Relie le résultat à sa définition de règle |
results[].level |
Sévérité : error, warning ou note |
results[].locations |
Chemin du fichier, numéro de ligne et colonne |
results[].message |
Description lisible du résultat |
Vérifiez votre travail avant de continuer :
- ESLint a produit des avertissements/erreurs pour
cq-demo-app-001 - Ruff a trouvé des violations dans
cq-demo-app-002 - .NET Analyzers a signalé des résultats pour
cq-demo-app-003 - Checkstyle a identifié des violations dans
cq-demo-app-004 - golangci-lint a trouvé des problèmes dans
cq-demo-app-005 - Vous avez généré au moins un fichier de sortie SARIF
- Vous pouvez expliquer les champs clés d'un résultat SARIF
Les linters par langage constituent la première ligne de défense en matière de qualité du code. Chaque outil se spécialise dans son écosystème de langage — ESLint pour TypeScript/JavaScript, Ruff pour Python, .NET Analyzers pour C#, Checkstyle pour Java et golangci-lint pour Go. En produisant les résultats au format SARIF, tous les résultats peuvent être agrégés dans une vue unifiée dans l'onglet Sécurité de GitHub ou ADO Advanced Security.
Passez au Lab 03 : Analyse de complexité.






