@oalacea/daemon 0.6.4 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +268 -58
- package/bin/Dockerfile +158 -16
- package/dist/cli/cli.d.ts.map +1 -1
- package/dist/cli/cli.js +22 -2
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/commands/command.types.d.ts +216 -0
- package/dist/cli/commands/command.types.d.ts.map +1 -0
- package/dist/cli/commands/command.types.js +64 -0
- package/dist/cli/commands/command.types.js.map +1 -0
- package/dist/cli/commands/history.command.d.ts +91 -0
- package/dist/cli/commands/history.command.d.ts.map +1 -0
- package/dist/cli/commands/history.command.js +336 -0
- package/dist/cli/commands/history.command.js.map +1 -0
- package/dist/cli/commands/index.d.ts +14 -3
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +7 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/optimize.command.d.ts +110 -0
- package/dist/cli/commands/optimize.command.d.ts.map +1 -0
- package/dist/cli/commands/optimize.command.js +497 -0
- package/dist/cli/commands/optimize.command.js.map +1 -0
- package/dist/cli/commands/report.command.d.ts +110 -0
- package/dist/cli/commands/report.command.d.ts.map +1 -0
- package/dist/cli/commands/report.command.js +532 -0
- package/dist/cli/commands/report.command.js.map +1 -0
- package/dist/cli/commands/review.command.d.ts +110 -0
- package/dist/cli/commands/review.command.d.ts.map +1 -0
- package/dist/cli/commands/review.command.js +520 -0
- package/dist/cli/commands/review.command.js.map +1 -0
- package/dist/cli/commands/score.command.d.ts +47 -0
- package/dist/cli/commands/score.command.d.ts.map +1 -0
- package/dist/cli/commands/score.command.js +261 -0
- package/dist/cli/commands/score.command.js.map +1 -0
- package/dist/cli/utils/index.d.ts +10 -0
- package/dist/cli/utils/index.d.ts.map +1 -0
- package/dist/cli/utils/index.js +10 -0
- package/dist/cli/utils/index.js.map +1 -0
- package/dist/cli/utils/output.d.ts +192 -0
- package/dist/cli/utils/output.d.ts.map +1 -0
- package/dist/cli/utils/output.js +411 -0
- package/dist/cli/utils/output.js.map +1 -0
- package/dist/cli/utils/progress.d.ts +204 -0
- package/dist/cli/utils/progress.d.ts.map +1 -0
- package/dist/cli/utils/progress.js +396 -0
- package/dist/cli/utils/progress.js.map +1 -0
- package/dist/core/types/index.d.ts +1 -0
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/project.types.d.ts +3 -3
- package/dist/core/types/project.types.d.ts.map +1 -1
- package/dist/core/types/scoring.types.d.ts +301 -0
- package/dist/core/types/scoring.types.d.ts.map +1 -0
- package/dist/core/types/scoring.types.js +8 -0
- package/dist/core/types/scoring.types.js.map +1 -0
- package/dist/services/detection/framework-detector.d.ts.map +1 -1
- package/dist/services/detection/framework-detector.js +74 -5
- package/dist/services/detection/framework-detector.js.map +1 -1
- package/dist/services/index.d.ts +12 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +14 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/optimization/detectors/bug-detector.d.ts +82 -0
- package/dist/services/optimization/detectors/bug-detector.d.ts.map +1 -0
- package/dist/services/optimization/detectors/bug-detector.js +443 -0
- package/dist/services/optimization/detectors/bug-detector.js.map +1 -0
- package/dist/services/optimization/detectors/code-smell-detector.d.ts +108 -0
- package/dist/services/optimization/detectors/code-smell-detector.d.ts.map +1 -0
- package/dist/services/optimization/detectors/code-smell-detector.js +569 -0
- package/dist/services/optimization/detectors/code-smell-detector.js.map +1 -0
- package/dist/services/optimization/detectors/index.d.ts +7 -0
- package/dist/services/optimization/detectors/index.d.ts.map +1 -0
- package/dist/services/optimization/detectors/index.js +7 -0
- package/dist/services/optimization/detectors/index.js.map +1 -0
- package/dist/services/optimization/detectors/perf-detector.d.ts +80 -0
- package/dist/services/optimization/detectors/perf-detector.d.ts.map +1 -0
- package/dist/services/optimization/detectors/perf-detector.js +451 -0
- package/dist/services/optimization/detectors/perf-detector.js.map +1 -0
- package/dist/services/optimization/index.d.ts +61 -0
- package/dist/services/optimization/index.d.ts.map +1 -0
- package/dist/services/optimization/index.js +69 -0
- package/dist/services/optimization/index.js.map +1 -0
- package/dist/services/optimization/optimization.service.d.ts +65 -0
- package/dist/services/optimization/optimization.service.d.ts.map +1 -0
- package/dist/services/optimization/optimization.service.js +511 -0
- package/dist/services/optimization/optimization.service.js.map +1 -0
- package/dist/services/optimization/optimization.types.d.ts +343 -0
- package/dist/services/optimization/optimization.types.d.ts.map +1 -0
- package/dist/services/optimization/optimization.types.js +8 -0
- package/dist/services/optimization/optimization.types.js.map +1 -0
- package/dist/services/optimization/optimizers/code-optimizer.d.ts +87 -0
- package/dist/services/optimization/optimizers/code-optimizer.d.ts.map +1 -0
- package/dist/services/optimization/optimizers/code-optimizer.js +436 -0
- package/dist/services/optimization/optimizers/code-optimizer.js.map +1 -0
- package/dist/services/optimization/optimizers/index.d.ts +7 -0
- package/dist/services/optimization/optimizers/index.d.ts.map +1 -0
- package/dist/services/optimization/optimizers/index.js +7 -0
- package/dist/services/optimization/optimizers/index.js.map +1 -0
- package/dist/services/optimization/optimizers/perf-optimizer.d.ts +64 -0
- package/dist/services/optimization/optimizers/perf-optimizer.d.ts.map +1 -0
- package/dist/services/optimization/optimizers/perf-optimizer.js +330 -0
- package/dist/services/optimization/optimizers/perf-optimizer.js.map +1 -0
- package/dist/services/optimization/optimizers/refact-optimizer.d.ts +82 -0
- package/dist/services/optimization/optimizers/refact-optimizer.d.ts.map +1 -0
- package/dist/services/optimization/optimizers/refact-optimizer.js +354 -0
- package/dist/services/optimization/optimizers/refact-optimizer.js.map +1 -0
- package/dist/services/optimization/patterns/anti-patterns.d.ts +31 -0
- package/dist/services/optimization/patterns/anti-patterns.d.ts.map +1 -0
- package/dist/services/optimization/patterns/anti-patterns.js +501 -0
- package/dist/services/optimization/patterns/anti-patterns.js.map +1 -0
- package/dist/services/optimization/patterns/index.d.ts +5 -0
- package/dist/services/optimization/patterns/index.d.ts.map +1 -0
- package/dist/services/optimization/patterns/index.js +5 -0
- package/dist/services/optimization/patterns/index.js.map +1 -0
- package/dist/services/reporting/export/chart.exporter.d.ts +59 -0
- package/dist/services/reporting/export/chart.exporter.d.ts.map +1 -0
- package/dist/services/reporting/export/chart.exporter.js +350 -0
- package/dist/services/reporting/export/chart.exporter.js.map +1 -0
- package/dist/services/reporting/export/index.d.ts +9 -0
- package/dist/services/reporting/export/index.d.ts.map +1 -0
- package/dist/services/reporting/export/index.js +10 -0
- package/dist/services/reporting/export/index.js.map +1 -0
- package/dist/services/reporting/export/pdf.exporter.d.ts +133 -0
- package/dist/services/reporting/export/pdf.exporter.d.ts.map +1 -0
- package/dist/services/reporting/export/pdf.exporter.js +270 -0
- package/dist/services/reporting/export/pdf.exporter.js.map +1 -0
- package/dist/services/reporting/history.service.d.ts +93 -0
- package/dist/services/reporting/history.service.d.ts.map +1 -0
- package/dist/services/reporting/history.service.js +285 -0
- package/dist/services/reporting/history.service.js.map +1 -0
- package/dist/services/reporting/index.d.ts +15 -0
- package/dist/services/reporting/index.d.ts.map +1 -0
- package/dist/services/reporting/index.js +16 -0
- package/dist/services/reporting/index.js.map +1 -0
- package/dist/services/reporting/report.service.d.ts +102 -0
- package/dist/services/reporting/report.service.d.ts.map +1 -0
- package/dist/services/reporting/report.service.js +240 -0
- package/dist/services/reporting/report.service.js.map +1 -0
- package/dist/services/reporting/reporting.types.d.ts +329 -0
- package/dist/services/reporting/reporting.types.d.ts.map +1 -0
- package/dist/services/reporting/reporting.types.js +8 -0
- package/dist/services/reporting/reporting.types.js.map +1 -0
- package/dist/services/reporting/templates/html.template.d.ts +81 -0
- package/dist/services/reporting/templates/html.template.d.ts.map +1 -0
- package/dist/services/reporting/templates/html.template.js +741 -0
- package/dist/services/reporting/templates/html.template.js.map +1 -0
- package/dist/services/reporting/templates/json.template.d.ts +85 -0
- package/dist/services/reporting/templates/json.template.d.ts.map +1 -0
- package/dist/services/reporting/templates/json.template.js +308 -0
- package/dist/services/reporting/templates/json.template.js.map +1 -0
- package/dist/services/reporting/templates/markdown.template.d.ts +69 -0
- package/dist/services/reporting/templates/markdown.template.d.ts.map +1 -0
- package/dist/services/reporting/templates/markdown.template.js +311 -0
- package/dist/services/reporting/templates/markdown.template.js.map +1 -0
- package/dist/services/reporting/trend-analyzer.d.ts +73 -0
- package/dist/services/reporting/trend-analyzer.d.ts.map +1 -0
- package/dist/services/reporting/trend-analyzer.js +291 -0
- package/dist/services/reporting/trend-analyzer.js.map +1 -0
- package/dist/services/review/analyzers/dependency-analyzer.d.ts +87 -0
- package/dist/services/review/analyzers/dependency-analyzer.d.ts.map +1 -0
- package/dist/services/review/analyzers/dependency-analyzer.js +458 -0
- package/dist/services/review/analyzers/dependency-analyzer.js.map +1 -0
- package/dist/services/review/analyzers/index.d.ts +13 -0
- package/dist/services/review/analyzers/index.d.ts.map +1 -0
- package/dist/services/review/analyzers/index.js +13 -0
- package/dist/services/review/analyzers/index.js.map +1 -0
- package/dist/services/review/analyzers/nestjs-analyzer.d.ts +210 -0
- package/dist/services/review/analyzers/nestjs-analyzer.d.ts.map +1 -0
- package/dist/services/review/analyzers/nestjs-analyzer.js +571 -0
- package/dist/services/review/analyzers/nestjs-analyzer.js.map +1 -0
- package/dist/services/review/analyzers/performance-analyzer.d.ts +91 -0
- package/dist/services/review/analyzers/performance-analyzer.d.ts.map +1 -0
- package/dist/services/review/analyzers/performance-analyzer.js +589 -0
- package/dist/services/review/analyzers/performance-analyzer.js.map +1 -0
- package/dist/services/review/analyzers/security-analyzer.d.ts +96 -0
- package/dist/services/review/analyzers/security-analyzer.d.ts.map +1 -0
- package/dist/services/review/analyzers/security-analyzer.js +512 -0
- package/dist/services/review/analyzers/security-analyzer.js.map +1 -0
- package/dist/services/review/analyzers/static-analyzer.d.ts +90 -0
- package/dist/services/review/analyzers/static-analyzer.d.ts.map +1 -0
- package/dist/services/review/analyzers/static-analyzer.js +423 -0
- package/dist/services/review/analyzers/static-analyzer.js.map +1 -0
- package/dist/services/review/fixers/auto-fixer.d.ts +94 -0
- package/dist/services/review/fixers/auto-fixer.d.ts.map +1 -0
- package/dist/services/review/fixers/auto-fixer.js +404 -0
- package/dist/services/review/fixers/auto-fixer.js.map +1 -0
- package/dist/services/review/fixers/index.d.ts +11 -0
- package/dist/services/review/fixers/index.d.ts.map +1 -0
- package/dist/services/review/fixers/index.js +11 -0
- package/dist/services/review/fixers/index.js.map +1 -0
- package/dist/services/review/fixers/refactor-suggester.d.ts +100 -0
- package/dist/services/review/fixers/refactor-suggester.d.ts.map +1 -0
- package/dist/services/review/fixers/refactor-suggester.js +555 -0
- package/dist/services/review/fixers/refactor-suggester.js.map +1 -0
- package/dist/services/review/fixers/test-generator.d.ts +99 -0
- package/dist/services/review/fixers/test-generator.d.ts.map +1 -0
- package/dist/services/review/fixers/test-generator.js +458 -0
- package/dist/services/review/fixers/test-generator.js.map +1 -0
- package/dist/services/review/index.d.ts +14 -0
- package/dist/services/review/index.d.ts.map +1 -0
- package/dist/services/review/index.js +14 -0
- package/dist/services/review/index.js.map +1 -0
- package/dist/services/review/reporters/fix-reporter.d.ts +67 -0
- package/dist/services/review/reporters/fix-reporter.d.ts.map +1 -0
- package/dist/services/review/reporters/fix-reporter.js +437 -0
- package/dist/services/review/reporters/fix-reporter.js.map +1 -0
- package/dist/services/review/reporters/index.d.ts +10 -0
- package/dist/services/review/reporters/index.d.ts.map +1 -0
- package/dist/services/review/reporters/index.js +10 -0
- package/dist/services/review/reporters/index.js.map +1 -0
- package/dist/services/review/reporters/score-reporter.d.ts +84 -0
- package/dist/services/review/reporters/score-reporter.d.ts.map +1 -0
- package/dist/services/review/reporters/score-reporter.js +560 -0
- package/dist/services/review/reporters/score-reporter.js.map +1 -0
- package/dist/services/review/review.service.d.ts +129 -0
- package/dist/services/review/review.service.d.ts.map +1 -0
- package/dist/services/review/review.service.js +396 -0
- package/dist/services/review/review.service.js.map +1 -0
- package/dist/services/review/review.types.d.ts +443 -0
- package/dist/services/review/review.types.d.ts.map +1 -0
- package/dist/services/review/review.types.js +11 -0
- package/dist/services/review/review.types.js.map +1 -0
- package/dist/services/scoring/dimensions/accessibility.analyzer.d.ts +53 -0
- package/dist/services/scoring/dimensions/accessibility.analyzer.d.ts.map +1 -0
- package/dist/services/scoring/dimensions/accessibility.analyzer.js +260 -0
- package/dist/services/scoring/dimensions/accessibility.analyzer.js.map +1 -0
- package/dist/services/scoring/dimensions/backend-logic.analyzer.d.ts +138 -0
- package/dist/services/scoring/dimensions/backend-logic.analyzer.d.ts.map +1 -0
- package/dist/services/scoring/dimensions/backend-logic.analyzer.js +713 -0
- package/dist/services/scoring/dimensions/backend-logic.analyzer.js.map +1 -0
- package/dist/services/scoring/dimensions/business-logic.analyzer.d.ts +142 -0
- package/dist/services/scoring/dimensions/business-logic.analyzer.d.ts.map +1 -0
- package/dist/services/scoring/dimensions/business-logic.analyzer.js +747 -0
- package/dist/services/scoring/dimensions/business-logic.analyzer.js.map +1 -0
- package/dist/services/scoring/dimensions/code-quality.analyzer.d.ts +142 -0
- package/dist/services/scoring/dimensions/code-quality.analyzer.d.ts.map +1 -0
- package/dist/services/scoring/dimensions/code-quality.analyzer.js +685 -0
- package/dist/services/scoring/dimensions/code-quality.analyzer.js.map +1 -0
- package/dist/services/scoring/dimensions/index.d.ts +18 -0
- package/dist/services/scoring/dimensions/index.d.ts.map +1 -0
- package/dist/services/scoring/dimensions/index.js +27 -0
- package/dist/services/scoring/dimensions/index.js.map +1 -0
- package/dist/services/scoring/dimensions/performance.analyzer.d.ts +125 -0
- package/dist/services/scoring/dimensions/performance.analyzer.d.ts.map +1 -0
- package/dist/services/scoring/dimensions/performance.analyzer.js +615 -0
- package/dist/services/scoring/dimensions/performance.analyzer.js.map +1 -0
- package/dist/services/scoring/dimensions/security.analyzer.d.ts +53 -0
- package/dist/services/scoring/dimensions/security.analyzer.d.ts.map +1 -0
- package/dist/services/scoring/dimensions/security.analyzer.js +327 -0
- package/dist/services/scoring/dimensions/security.analyzer.js.map +1 -0
- package/dist/services/scoring/dimensions/seo.analyzer.d.ts +77 -0
- package/dist/services/scoring/dimensions/seo.analyzer.d.ts.map +1 -0
- package/dist/services/scoring/dimensions/seo.analyzer.js +502 -0
- package/dist/services/scoring/dimensions/seo.analyzer.js.map +1 -0
- package/dist/services/scoring/dimensions/test-coverage.analyzer.d.ts +106 -0
- package/dist/services/scoring/dimensions/test-coverage.analyzer.d.ts.map +1 -0
- package/dist/services/scoring/dimensions/test-coverage.analyzer.js +496 -0
- package/dist/services/scoring/dimensions/test-coverage.analyzer.js.map +1 -0
- package/dist/services/scoring/dimensions/ui-ux.analyzer.d.ts +126 -0
- package/dist/services/scoring/dimensions/ui-ux.analyzer.d.ts.map +1 -0
- package/dist/services/scoring/dimensions/ui-ux.analyzer.js +665 -0
- package/dist/services/scoring/dimensions/ui-ux.analyzer.js.map +1 -0
- package/dist/services/scoring/index.d.ts +10 -0
- package/dist/services/scoring/index.d.ts.map +1 -0
- package/dist/services/scoring/index.js +10 -0
- package/dist/services/scoring/index.js.map +1 -0
- package/dist/services/scoring/scoring-service.d.ts +222 -0
- package/dist/services/scoring/scoring-service.d.ts.map +1 -0
- package/dist/services/scoring/scoring-service.js +636 -0
- package/dist/services/scoring/scoring-service.js.map +1 -0
- package/package.json +11 -3
- package/templates/README.md +183 -0
- package/templates/nestjs/controller.spec.ts +203 -0
- package/templates/nestjs/e2e/api.e2e-spec.ts +451 -0
- package/templates/nestjs/e2e/auth.e2e-spec.ts +533 -0
- package/templates/nestjs/fixtures/test-module.ts +311 -0
- package/templates/nestjs/guard.spec.ts +314 -0
- package/templates/nestjs/interceptor.spec.ts +458 -0
- package/templates/nestjs/module.spec.ts +173 -0
- package/templates/nestjs/pipe.spec.ts +474 -0
- package/templates/nestjs/service.spec.ts +296 -0
- package/templates/rust/Cargo.toml +72 -0
- package/templates/rust/actix-controller.test.rs +114 -0
- package/templates/rust/axum-handler.test.rs +117 -0
- package/templates/rust/integration.test.rs +63 -0
- package/templates/rust/rocket-route.test.rs +106 -0
- package/templates/rust/unit.test.rs +38 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static Code Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Analyse statique de code utilisant ESLint et TypeScript.
|
|
5
|
+
* Détecte les erreurs de syntaxe, les unused imports/variables,
|
|
6
|
+
* et le code mort.
|
|
7
|
+
*
|
|
8
|
+
* @module services/review/analyzers/static-analyzer
|
|
9
|
+
*/
|
|
10
|
+
import type { Issue, StaticAnalyzerConfig } from '../review.types.js';
|
|
11
|
+
import { DockerManager } from '../../docker/docker-manager.js';
|
|
12
|
+
/**
|
|
13
|
+
* Analyseur de code statique
|
|
14
|
+
*/
|
|
15
|
+
export declare class StaticAnalyzer {
|
|
16
|
+
private readonly docker;
|
|
17
|
+
private readonly logger;
|
|
18
|
+
private config;
|
|
19
|
+
constructor(config?: StaticAnalyzerConfig, docker?: DockerManager);
|
|
20
|
+
/**
|
|
21
|
+
* Configure l'analyseur
|
|
22
|
+
*/
|
|
23
|
+
configure(config: Partial<StaticAnalyzerConfig>): void;
|
|
24
|
+
/**
|
|
25
|
+
* Analyse un projet complet
|
|
26
|
+
*
|
|
27
|
+
* @param projectPath - Chemin du projet à analyser
|
|
28
|
+
* @param exclude - Patterns à exclure
|
|
29
|
+
* @returns Liste des issues détectées
|
|
30
|
+
*/
|
|
31
|
+
analyze(projectPath: string, exclude?: string[]): Promise<Issue[]>;
|
|
32
|
+
/**
|
|
33
|
+
* Exécute ESLint sur le projet
|
|
34
|
+
*/
|
|
35
|
+
private runEslint;
|
|
36
|
+
/**
|
|
37
|
+
* Exécute le compilateur TypeScript
|
|
38
|
+
*/
|
|
39
|
+
private runTsc;
|
|
40
|
+
/**
|
|
41
|
+
* Détecte les imports inutilisés
|
|
42
|
+
*/
|
|
43
|
+
private detectUnusedImports;
|
|
44
|
+
/**
|
|
45
|
+
* Détecte le code mort (fonctions/classes non utilisées)
|
|
46
|
+
*/
|
|
47
|
+
private detectDeadCode;
|
|
48
|
+
/**
|
|
49
|
+
* Convertit un message ESLint en Issue
|
|
50
|
+
*/
|
|
51
|
+
private eslintMessageToIssue;
|
|
52
|
+
/**
|
|
53
|
+
* Parse une ligne de sortie TypeScript en Issue
|
|
54
|
+
*/
|
|
55
|
+
private parseTSCLine;
|
|
56
|
+
/**
|
|
57
|
+
* Obtient la catégorie à partir d'une règle ESLint
|
|
58
|
+
*/
|
|
59
|
+
private getCategoryFromRule;
|
|
60
|
+
/**
|
|
61
|
+
* Estime l'effort de correction pour une règle ESLint
|
|
62
|
+
*/
|
|
63
|
+
private estimateEffort;
|
|
64
|
+
/**
|
|
65
|
+
* Estime l'effort de correction pour une erreur TypeScript
|
|
66
|
+
*/
|
|
67
|
+
private estimateTSCEffort;
|
|
68
|
+
/**
|
|
69
|
+
* Obtient la sévérité d'une erreur TypeScript
|
|
70
|
+
*/
|
|
71
|
+
private getTSCSeverity;
|
|
72
|
+
/**
|
|
73
|
+
* Vérifie si une commande existe dans le projet
|
|
74
|
+
*/
|
|
75
|
+
private checkCommandExists;
|
|
76
|
+
/**
|
|
77
|
+
* Exécute une commande dans le conteneur Docker
|
|
78
|
+
*/
|
|
79
|
+
private executeInContainer;
|
|
80
|
+
/**
|
|
81
|
+
* Obtient les statistiques d'analyse
|
|
82
|
+
*/
|
|
83
|
+
getStats(projectPath: string): Promise<{
|
|
84
|
+
fileCount: number;
|
|
85
|
+
lineCount: number;
|
|
86
|
+
eslintConfig: boolean;
|
|
87
|
+
tsconfig: boolean;
|
|
88
|
+
}>;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=static-analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-analyzer.d.ts","sourceRoot":"","sources":["../../../../src/services/review/analyzers/static-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EACV,KAAK,EAIL,oBAAoB,EACrB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAsE/D;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,MAAM,CAAuB;gBAEzB,MAAM,GAAE,oBAAyB,EAAE,MAAM,CAAC,EAAE,aAAa;IAMrE;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI;IAItD;;;;;;OAMG;IACG,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAwD5E;;OAEG;YACW,SAAS;IA6CvB;;OAEG;YACW,MAAM;IAgCpB;;OAEG;YACW,mBAAmB;IA8CjC;;OAEG;YACW,cAAc;IAc5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAuC5B;;OAEG;IACH,OAAO,CAAC,YAAY;IAkCpB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAc3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAkCtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;OAEG;YACW,kBAAkB;IAUhC;;OAEG;YACW,kBAAkB;IAuBhC;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QACrC,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,OAAO,CAAC;QACtB,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;CASH"}
|
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static Code Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Analyse statique de code utilisant ESLint et TypeScript.
|
|
5
|
+
* Détecte les erreurs de syntaxe, les unused imports/variables,
|
|
6
|
+
* et le code mort.
|
|
7
|
+
*
|
|
8
|
+
* @module services/review/analyzers/static-analyzer
|
|
9
|
+
*/
|
|
10
|
+
import { exec } from 'node:child_process';
|
|
11
|
+
import { promisify } from 'node:util';
|
|
12
|
+
import { DockerManager } from '../../docker/docker-manager.js';
|
|
13
|
+
import { createLogger } from '../../../shared/utils/logger.js';
|
|
14
|
+
const execAsync = promisify(exec);
|
|
15
|
+
/**
|
|
16
|
+
* Mapping des catégories ESLint vers nos catégories
|
|
17
|
+
*/
|
|
18
|
+
const ESLINT_CATEGORY_MAP = {
|
|
19
|
+
'possible-errors': 'static',
|
|
20
|
+
'best-practices': 'code-quality',
|
|
21
|
+
'variables': 'static',
|
|
22
|
+
'eslint-comments': 'code-quality',
|
|
23
|
+
'nodejs-and-commonjs': 'code-quality',
|
|
24
|
+
'stylistic-issues': 'code-quality',
|
|
25
|
+
'import': 'static',
|
|
26
|
+
'ecmascript': 'code-quality',
|
|
27
|
+
'typescript': 'static',
|
|
28
|
+
'react': 'static',
|
|
29
|
+
'react-hooks': 'static',
|
|
30
|
+
'jsx-a11y': 'static',
|
|
31
|
+
'promise': 'code-quality',
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Configuration par défaut de l'analyseur
|
|
35
|
+
*/
|
|
36
|
+
const DEFAULT_CONFIG = {
|
|
37
|
+
useEslint: true,
|
|
38
|
+
useTsc: true,
|
|
39
|
+
detectUnusedImports: true,
|
|
40
|
+
detectUnusedVars: true,
|
|
41
|
+
detectDeadCode: true,
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Analyseur de code statique
|
|
45
|
+
*/
|
|
46
|
+
export class StaticAnalyzer {
|
|
47
|
+
docker;
|
|
48
|
+
logger;
|
|
49
|
+
config;
|
|
50
|
+
constructor(config = {}, docker) {
|
|
51
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
52
|
+
this.docker = docker ?? new DockerManager();
|
|
53
|
+
this.logger = createLogger('StaticAnalyzer');
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Configure l'analyseur
|
|
57
|
+
*/
|
|
58
|
+
configure(config) {
|
|
59
|
+
this.config = { ...this.config, ...config };
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Analyse un projet complet
|
|
63
|
+
*
|
|
64
|
+
* @param projectPath - Chemin du projet à analyser
|
|
65
|
+
* @param exclude - Patterns à exclure
|
|
66
|
+
* @returns Liste des issues détectées
|
|
67
|
+
*/
|
|
68
|
+
async analyze(projectPath, exclude = []) {
|
|
69
|
+
const issues = [];
|
|
70
|
+
const startTime = performance.now();
|
|
71
|
+
this.logger.info(`Starting static analysis for: ${projectPath}`);
|
|
72
|
+
// Analyse ESLint
|
|
73
|
+
if (this.config.useEslint) {
|
|
74
|
+
try {
|
|
75
|
+
const eslintIssues = await this.runEslint(projectPath, exclude);
|
|
76
|
+
issues.push(...eslintIssues);
|
|
77
|
+
this.logger.debug(`Found ${eslintIssues.length} ESLint issues`);
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
this.logger.warn('ESLint analysis failed', error);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Analyse TypeScript
|
|
84
|
+
if (this.config.useTsc) {
|
|
85
|
+
try {
|
|
86
|
+
const tscIssues = await this.runTsc(projectPath);
|
|
87
|
+
issues.push(...tscIssues);
|
|
88
|
+
this.logger.debug(`Found ${tscIssues.length} TypeScript issues`);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
this.logger.warn('TypeScript analysis failed', error);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Détection des imports inutilisés
|
|
95
|
+
if (this.config.detectUnusedImports) {
|
|
96
|
+
try {
|
|
97
|
+
const unusedImports = await this.detectUnusedImports(projectPath);
|
|
98
|
+
issues.push(...unusedImports);
|
|
99
|
+
this.logger.debug(`Found ${unusedImports.length} unused imports`);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
this.logger.warn('Unused imports detection failed', error);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Détection du code mort
|
|
106
|
+
if (this.config.detectDeadCode) {
|
|
107
|
+
try {
|
|
108
|
+
const deadCode = await this.detectDeadCode(projectPath);
|
|
109
|
+
issues.push(...deadCode);
|
|
110
|
+
this.logger.debug(`Found ${deadCode.length} dead code issues`);
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
this.logger.warn('Dead code detection failed', error);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const duration = Math.round(performance.now() - startTime);
|
|
117
|
+
this.logger.info(`Static analysis completed in ${duration}ms (${issues.length} issues found)`);
|
|
118
|
+
return issues;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Exécute ESLint sur le projet
|
|
122
|
+
*/
|
|
123
|
+
async runEslint(projectPath, exclude = []) {
|
|
124
|
+
const issues = [];
|
|
125
|
+
// Vérifier si ESLint est disponible
|
|
126
|
+
const hasEslint = await this.checkCommandExists('eslint', projectPath);
|
|
127
|
+
if (!hasEslint) {
|
|
128
|
+
this.logger.debug('ESLint not available, skipping');
|
|
129
|
+
return issues;
|
|
130
|
+
}
|
|
131
|
+
// Construire la commande ESLint
|
|
132
|
+
const excludeArgs = exclude.map((e) => `--ignore-pattern '${e}'`).join(' ');
|
|
133
|
+
const command = `npx eslint ${projectPath} --format json --no-error-on-unmatched-pattern ${excludeArgs}`;
|
|
134
|
+
const result = await this.executeInContainer(command, {
|
|
135
|
+
cwd: projectPath,
|
|
136
|
+
timeout: 60000,
|
|
137
|
+
});
|
|
138
|
+
if (!result.success || !result.stdout) {
|
|
139
|
+
return issues;
|
|
140
|
+
}
|
|
141
|
+
try {
|
|
142
|
+
const eslintOutput = JSON.parse(result.stdout);
|
|
143
|
+
for (const fileResult of eslintOutput) {
|
|
144
|
+
for (const message of fileResult.messages) {
|
|
145
|
+
const issue = this.eslintMessageToIssue(fileResult.filePath, message, projectPath);
|
|
146
|
+
if (issue) {
|
|
147
|
+
issues.push(issue);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
// Parsing JSON échoué, ignorer
|
|
154
|
+
}
|
|
155
|
+
return issues;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Exécute le compilateur TypeScript
|
|
159
|
+
*/
|
|
160
|
+
async runTsc(projectPath) {
|
|
161
|
+
const issues = [];
|
|
162
|
+
// Vérifier si tsc est disponible
|
|
163
|
+
const hasTsc = await this.checkCommandExists('tsc', projectPath);
|
|
164
|
+
if (!hasTsc) {
|
|
165
|
+
this.logger.debug('TypeScript compiler not available, skipping');
|
|
166
|
+
return issues;
|
|
167
|
+
}
|
|
168
|
+
const command = 'npx tsc --noEmit --pretty false';
|
|
169
|
+
const result = await this.executeInContainer(command, {
|
|
170
|
+
cwd: projectPath,
|
|
171
|
+
timeout: 60000,
|
|
172
|
+
});
|
|
173
|
+
if (result.success) {
|
|
174
|
+
return issues; // Pas d'erreurs
|
|
175
|
+
}
|
|
176
|
+
// Parser la sortie de tsc
|
|
177
|
+
const lines = result.stderr.split('\n').filter((l) => l.trim().length > 0);
|
|
178
|
+
for (const line of lines) {
|
|
179
|
+
const issue = this.parseTSCLine(line, projectPath);
|
|
180
|
+
if (issue) {
|
|
181
|
+
issues.push(issue);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return issues;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Détecte les imports inutilisés
|
|
188
|
+
*/
|
|
189
|
+
async detectUnusedImports(projectPath) {
|
|
190
|
+
const issues = [];
|
|
191
|
+
// Utiliser ESLint pour détecter les imports inutilisés
|
|
192
|
+
// (règle no-unused-vars ou @typescript-eslint/no-unused-vars)
|
|
193
|
+
const command = `npx eslint ${projectPath} --format json --rule '{ "@typescript-eslint/no-unused-vars": "error", "no-unused-vars": "error" }' --no-error-on-unmatched-pattern`;
|
|
194
|
+
const result = await this.executeInContainer(command, {
|
|
195
|
+
cwd: projectPath,
|
|
196
|
+
timeout: 60000,
|
|
197
|
+
});
|
|
198
|
+
if (!result.success || !result.stdout) {
|
|
199
|
+
return issues;
|
|
200
|
+
}
|
|
201
|
+
try {
|
|
202
|
+
const eslintOutput = JSON.parse(result.stdout);
|
|
203
|
+
for (const fileResult of eslintOutput) {
|
|
204
|
+
for (const message of fileResult.messages) {
|
|
205
|
+
// Filtrer uniquement les imports/variables inutilisées
|
|
206
|
+
if (message.ruleId?.includes('no-unused-vars') ||
|
|
207
|
+
message.message.includes('is assigned a value but never used') ||
|
|
208
|
+
message.message.includes('is defined but never used')) {
|
|
209
|
+
const issue = this.eslintMessageToIssue(fileResult.filePath, message, projectPath);
|
|
210
|
+
if (issue) {
|
|
211
|
+
issue.category = 'static';
|
|
212
|
+
issues.push(issue);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
// Parsing échoué
|
|
220
|
+
}
|
|
221
|
+
return issues;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Détecte le code mort (fonctions/classes non utilisées)
|
|
225
|
+
*/
|
|
226
|
+
async detectDeadCode(projectPath) {
|
|
227
|
+
const issues = [];
|
|
228
|
+
// Cette analyse est plus complexe et nécessite une inspection AST
|
|
229
|
+
// Pour l'instant, on utilise des heuristiques simples
|
|
230
|
+
// Rechercher les exports qui ne sont importés nulle part
|
|
231
|
+
// (analyse inter-fichiers)
|
|
232
|
+
// Cette fonctionnalité pourrait être étendue avec ts-morphir ou babel
|
|
233
|
+
return issues;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Convertit un message ESLint en Issue
|
|
237
|
+
*/
|
|
238
|
+
eslintMessageToIssue(filePath, message, projectPath) {
|
|
239
|
+
const severity = message.severity === 2 ? 'high' : 'medium';
|
|
240
|
+
const ruleId = message.ruleId ?? 'unknown';
|
|
241
|
+
// Déterminer la catégorie
|
|
242
|
+
const category = this.getCategoryFromRule(ruleId);
|
|
243
|
+
// Construire l'ID unique
|
|
244
|
+
const id = `eslint-${filePath.replace(projectPath, '')}-${message.line}-${message.column}-${ruleId}`.replace(/[^a-zA-Z0-9-]/g, '-');
|
|
245
|
+
const location = {
|
|
246
|
+
file: filePath,
|
|
247
|
+
line: message.line,
|
|
248
|
+
column: message.column,
|
|
249
|
+
endLine: message.endLine,
|
|
250
|
+
endColumn: message.endColumn,
|
|
251
|
+
};
|
|
252
|
+
return {
|
|
253
|
+
id,
|
|
254
|
+
category,
|
|
255
|
+
severity,
|
|
256
|
+
description: message.message,
|
|
257
|
+
message: `[${ruleId}] ${message.message}`,
|
|
258
|
+
location,
|
|
259
|
+
fixable: message.fix !== undefined,
|
|
260
|
+
effort: this.estimateEffort(ruleId, message),
|
|
261
|
+
ruleId,
|
|
262
|
+
suggestions: message.fix ? ['Can be auto-fixed with --fix'] : [],
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Parse une ligne de sortie TypeScript en Issue
|
|
267
|
+
*/
|
|
268
|
+
parseTSCLine(line, projectPath) {
|
|
269
|
+
// Format: file.ts(line,col): error TS123: message
|
|
270
|
+
const match = line.match(/^(.+?)\((\d+),(\d+)\): error (TS\d+): (.+)$/);
|
|
271
|
+
if (!match) {
|
|
272
|
+
return null;
|
|
273
|
+
}
|
|
274
|
+
const [, filePath, lineStr, colStr, code, message] = match;
|
|
275
|
+
const lineNum = parseInt(lineStr, 10);
|
|
276
|
+
const colNum = parseInt(colStr, 10);
|
|
277
|
+
const severity = this.getTSCSeverity(code);
|
|
278
|
+
const id = `tsc-${filePath.replace(projectPath, '')}-${lineNum}-${colNum}-${code}`.replace(/[^a-zA-Z0-9-]/g, '-');
|
|
279
|
+
return {
|
|
280
|
+
id,
|
|
281
|
+
category: 'static',
|
|
282
|
+
severity,
|
|
283
|
+
description: message,
|
|
284
|
+
message: `[${code}] ${message}`,
|
|
285
|
+
location: {
|
|
286
|
+
file: filePath,
|
|
287
|
+
line: lineNum,
|
|
288
|
+
column: colNum,
|
|
289
|
+
},
|
|
290
|
+
fixable: false,
|
|
291
|
+
effort: this.estimateTSCEffort(code),
|
|
292
|
+
ruleId: code,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Obtient la catégorie à partir d'une règle ESLint
|
|
297
|
+
*/
|
|
298
|
+
getCategoryFromRule(ruleId) {
|
|
299
|
+
// Extraire la catégorie de la règle (ex: 'react-hooks/rules-of-hooks')
|
|
300
|
+
const parts = ruleId.split('/');
|
|
301
|
+
const mainCategory = parts[0] ?? ruleId;
|
|
302
|
+
// Mapping direct
|
|
303
|
+
if (mainCategory in ESLINT_CATEGORY_MAP) {
|
|
304
|
+
return ESLINT_CATEGORY_MAP[mainCategory];
|
|
305
|
+
}
|
|
306
|
+
// Par défaut, retourner 'code-quality'
|
|
307
|
+
return 'code-quality';
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Estime l'effort de correction pour une règle ESLint
|
|
311
|
+
*/
|
|
312
|
+
estimateEffort(ruleId, message) {
|
|
313
|
+
// Corrections automatiques = 1
|
|
314
|
+
if (message.fix) {
|
|
315
|
+
return 1;
|
|
316
|
+
}
|
|
317
|
+
// Règles courantes simples
|
|
318
|
+
const simpleRules = [
|
|
319
|
+
'no-console',
|
|
320
|
+
'no-var',
|
|
321
|
+
'prefer-const',
|
|
322
|
+
'eqeqeq',
|
|
323
|
+
'curly',
|
|
324
|
+
'no-else-return',
|
|
325
|
+
];
|
|
326
|
+
if (simpleRules.some((r) => ruleId.includes(r))) {
|
|
327
|
+
return 2;
|
|
328
|
+
}
|
|
329
|
+
// Règles moyennes
|
|
330
|
+
const mediumRules = [
|
|
331
|
+
'complexity',
|
|
332
|
+
'max-lines-per-function',
|
|
333
|
+
'max-depth',
|
|
334
|
+
'no-unused-vars',
|
|
335
|
+
];
|
|
336
|
+
if (mediumRules.some((r) => ruleId.includes(r))) {
|
|
337
|
+
return 4;
|
|
338
|
+
}
|
|
339
|
+
// Par défaut
|
|
340
|
+
return 3;
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Estime l'effort de correction pour une erreur TypeScript
|
|
344
|
+
*/
|
|
345
|
+
estimateTSCEffort(code) {
|
|
346
|
+
// Erreurs de type simples
|
|
347
|
+
const simpleCodes = ['TS2339', 'TS2304', 'TS2345', 'TS2571'];
|
|
348
|
+
if (simpleCodes.includes(code)) {
|
|
349
|
+
return 2;
|
|
350
|
+
}
|
|
351
|
+
// Erreurs de définition
|
|
352
|
+
if (code.startsWith('TS23')) {
|
|
353
|
+
return 3;
|
|
354
|
+
}
|
|
355
|
+
// Erreurs de configuration
|
|
356
|
+
if (code.startsWith('TS50') || code.startsWith('TS60')) {
|
|
357
|
+
return 2;
|
|
358
|
+
}
|
|
359
|
+
return 4;
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Obtient la sévérité d'une erreur TypeScript
|
|
363
|
+
*/
|
|
364
|
+
getTSCSeverity(code) {
|
|
365
|
+
// Erreurs critiques qui empêchent la compilation
|
|
366
|
+
const criticalCodes = [
|
|
367
|
+
'TS2307', // Cannot find module
|
|
368
|
+
'TS2304', // Cannot find name
|
|
369
|
+
'TS2345', // Type mismatch
|
|
370
|
+
'TS2694', // Namespace error
|
|
371
|
+
];
|
|
372
|
+
if (criticalCodes.includes(code)) {
|
|
373
|
+
return 'critical';
|
|
374
|
+
}
|
|
375
|
+
return 'high';
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Vérifie si une commande existe dans le projet
|
|
379
|
+
*/
|
|
380
|
+
async checkCommandExists(command, projectPath) {
|
|
381
|
+
const checkCommand = `cd ${projectPath} && command -v ${command} || npx ${command} --version`;
|
|
382
|
+
const result = await this.executeInContainer(checkCommand, {
|
|
383
|
+
cwd: projectPath,
|
|
384
|
+
timeout: 10000,
|
|
385
|
+
});
|
|
386
|
+
return result.success;
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Exécute une commande dans le conteneur Docker
|
|
390
|
+
*/
|
|
391
|
+
async executeInContainer(command, options) {
|
|
392
|
+
try {
|
|
393
|
+
const execOptions = {
|
|
394
|
+
workingDir: options.cwd,
|
|
395
|
+
timeout: options.timeout ?? 60000,
|
|
396
|
+
};
|
|
397
|
+
return await this.docker.exec(command, execOptions);
|
|
398
|
+
}
|
|
399
|
+
catch (error) {
|
|
400
|
+
this.logger.error(`Command execution failed: ${command}`, error);
|
|
401
|
+
return {
|
|
402
|
+
success: false,
|
|
403
|
+
stdout: '',
|
|
404
|
+
stderr: error instanceof Error ? error.message : String(error),
|
|
405
|
+
exitCode: 1,
|
|
406
|
+
duration: 0,
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Obtient les statistiques d'analyse
|
|
412
|
+
*/
|
|
413
|
+
getStats(projectPath) {
|
|
414
|
+
// Implémentation pour récupérer les stats du projet
|
|
415
|
+
return Promise.resolve({
|
|
416
|
+
fileCount: 0,
|
|
417
|
+
lineCount: 0,
|
|
418
|
+
eslintConfig: false,
|
|
419
|
+
tsconfig: false,
|
|
420
|
+
});
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
//# sourceMappingURL=static-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-analyzer.js","sourceRoot":"","sources":["../../../../src/services/review/analyzers/static-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto Fixer
|
|
3
|
+
*
|
|
4
|
+
* Application automatique des corrections:
|
|
5
|
+
* - ESLint --fix
|
|
6
|
+
* - Organisation des imports
|
|
7
|
+
* - Refactorings simples
|
|
8
|
+
* - Suppression sécurisée de code mort
|
|
9
|
+
*
|
|
10
|
+
* @module services/review/fixers/auto-fixer
|
|
11
|
+
*/
|
|
12
|
+
import type { Issue, Fix } from '../review.types.js';
|
|
13
|
+
import { DockerManager } from '../../docker/docker-manager.js';
|
|
14
|
+
/**
|
|
15
|
+
* Correcteur automatique
|
|
16
|
+
*/
|
|
17
|
+
export declare class AutoFixer {
|
|
18
|
+
private readonly docker;
|
|
19
|
+
private readonly logger;
|
|
20
|
+
private appliedFixes;
|
|
21
|
+
private failedFixes;
|
|
22
|
+
constructor(docker?: DockerManager);
|
|
23
|
+
/**
|
|
24
|
+
* Applique les corrections automatiques sur une liste d'issues
|
|
25
|
+
*
|
|
26
|
+
* @param issues - Liste des issues à corriger
|
|
27
|
+
* @param projectPath - Chemin du projet
|
|
28
|
+
* @param options - Options de correction
|
|
29
|
+
* @returns Résultat des corrections appliquées
|
|
30
|
+
*/
|
|
31
|
+
applyFixes(issues: Issue[], projectPath: string, options?: {
|
|
32
|
+
dryRun?: boolean;
|
|
33
|
+
maxSeverity?: 'critical' | 'high' | 'medium' | 'low' | 'info';
|
|
34
|
+
maxEffort?: number;
|
|
35
|
+
createBackup?: boolean;
|
|
36
|
+
}): Promise<Fix[]>;
|
|
37
|
+
/**
|
|
38
|
+
* Applique ESLint --fix sur les fichiers concernés
|
|
39
|
+
*/
|
|
40
|
+
private applyEslintFix;
|
|
41
|
+
/**
|
|
42
|
+
* Applique les corrections d'imports (organisation, suppression)
|
|
43
|
+
*/
|
|
44
|
+
private applyImportFixes;
|
|
45
|
+
/**
|
|
46
|
+
* Applique une correction individuelle
|
|
47
|
+
*/
|
|
48
|
+
private applySingleFix;
|
|
49
|
+
/**
|
|
50
|
+
* Organise les imports d'un fichier
|
|
51
|
+
*/
|
|
52
|
+
private organizeImports;
|
|
53
|
+
/**
|
|
54
|
+
* Supprime un console.log spécifique
|
|
55
|
+
*/
|
|
56
|
+
private removeConsoleLog;
|
|
57
|
+
/**
|
|
58
|
+
* Convertit var en const
|
|
59
|
+
*/
|
|
60
|
+
private varToConst;
|
|
61
|
+
/**
|
|
62
|
+
* Convertit == en ===
|
|
63
|
+
*/
|
|
64
|
+
private equalityToStrict;
|
|
65
|
+
/**
|
|
66
|
+
* Crée un backup du projet
|
|
67
|
+
*/
|
|
68
|
+
private createBackup;
|
|
69
|
+
/**
|
|
70
|
+
* Génère un diff entre deux contenus
|
|
71
|
+
*/
|
|
72
|
+
private generateDiff;
|
|
73
|
+
/**
|
|
74
|
+
* Compare les sévérités
|
|
75
|
+
*/
|
|
76
|
+
private compareSeverity;
|
|
77
|
+
/**
|
|
78
|
+
* S'assure que le répertoire existe
|
|
79
|
+
*/
|
|
80
|
+
private ensureDirectoryExists;
|
|
81
|
+
/**
|
|
82
|
+
* Retourne les corrections appliquées
|
|
83
|
+
*/
|
|
84
|
+
getAppliedFixes(): Fix[];
|
|
85
|
+
/**
|
|
86
|
+
* Retourne les corrections échouées
|
|
87
|
+
*/
|
|
88
|
+
getFailedFixes(): Fix[];
|
|
89
|
+
/**
|
|
90
|
+
* Réinitialise l'état
|
|
91
|
+
*/
|
|
92
|
+
reset(): void;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=auto-fixer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-fixer.d.ts","sourceRoot":"","sources":["../../../../src/services/review/fixers/auto-fixer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAa/D;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,WAAW,CAAa;gBAEpB,MAAM,CAAC,EAAE,aAAa;IAKlC;;;;;;;OAOG;IACG,UAAU,CACd,MAAM,EAAE,KAAK,EAAE,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;QACP,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,WAAW,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;QAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,OAAO,CAAC;KACnB,GACL,OAAO,CAAC,GAAG,EAAE,CAAC;IA8CjB;;OAEG;YACW,cAAc;IAqD5B;;OAEG;YACW,gBAAgB;IAmD9B;;OAEG;YACW,cAAc;IA8C5B;;OAEG;YACW,eAAe;IAkE7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;YACW,YAAY;IAiB1B;;OAEG;IACH,OAAO,CAAC,YAAY;IAuBpB;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;YACW,qBAAqB;IASnC;;OAEG;IACH,eAAe,IAAI,GAAG,EAAE;IAIxB;;OAEG;IACH,cAAc,IAAI,GAAG,EAAE;IAIvB;;OAEG;IACH,KAAK,IAAI,IAAI;CAId"}
|