@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.
Files changed (285) hide show
  1. package/README.md +268 -58
  2. package/bin/Dockerfile +158 -16
  3. package/dist/cli/cli.d.ts.map +1 -1
  4. package/dist/cli/cli.js +22 -2
  5. package/dist/cli/cli.js.map +1 -1
  6. package/dist/cli/commands/command.types.d.ts +216 -0
  7. package/dist/cli/commands/command.types.d.ts.map +1 -0
  8. package/dist/cli/commands/command.types.js +64 -0
  9. package/dist/cli/commands/command.types.js.map +1 -0
  10. package/dist/cli/commands/history.command.d.ts +91 -0
  11. package/dist/cli/commands/history.command.d.ts.map +1 -0
  12. package/dist/cli/commands/history.command.js +336 -0
  13. package/dist/cli/commands/history.command.js.map +1 -0
  14. package/dist/cli/commands/index.d.ts +14 -3
  15. package/dist/cli/commands/index.d.ts.map +1 -1
  16. package/dist/cli/commands/index.js +7 -0
  17. package/dist/cli/commands/index.js.map +1 -1
  18. package/dist/cli/commands/optimize.command.d.ts +110 -0
  19. package/dist/cli/commands/optimize.command.d.ts.map +1 -0
  20. package/dist/cli/commands/optimize.command.js +497 -0
  21. package/dist/cli/commands/optimize.command.js.map +1 -0
  22. package/dist/cli/commands/report.command.d.ts +110 -0
  23. package/dist/cli/commands/report.command.d.ts.map +1 -0
  24. package/dist/cli/commands/report.command.js +532 -0
  25. package/dist/cli/commands/report.command.js.map +1 -0
  26. package/dist/cli/commands/review.command.d.ts +110 -0
  27. package/dist/cli/commands/review.command.d.ts.map +1 -0
  28. package/dist/cli/commands/review.command.js +520 -0
  29. package/dist/cli/commands/review.command.js.map +1 -0
  30. package/dist/cli/commands/score.command.d.ts +47 -0
  31. package/dist/cli/commands/score.command.d.ts.map +1 -0
  32. package/dist/cli/commands/score.command.js +261 -0
  33. package/dist/cli/commands/score.command.js.map +1 -0
  34. package/dist/cli/utils/index.d.ts +10 -0
  35. package/dist/cli/utils/index.d.ts.map +1 -0
  36. package/dist/cli/utils/index.js +10 -0
  37. package/dist/cli/utils/index.js.map +1 -0
  38. package/dist/cli/utils/output.d.ts +192 -0
  39. package/dist/cli/utils/output.d.ts.map +1 -0
  40. package/dist/cli/utils/output.js +411 -0
  41. package/dist/cli/utils/output.js.map +1 -0
  42. package/dist/cli/utils/progress.d.ts +204 -0
  43. package/dist/cli/utils/progress.d.ts.map +1 -0
  44. package/dist/cli/utils/progress.js +396 -0
  45. package/dist/cli/utils/progress.js.map +1 -0
  46. package/dist/core/types/index.d.ts +1 -0
  47. package/dist/core/types/index.d.ts.map +1 -1
  48. package/dist/core/types/project.types.d.ts +3 -3
  49. package/dist/core/types/project.types.d.ts.map +1 -1
  50. package/dist/core/types/scoring.types.d.ts +301 -0
  51. package/dist/core/types/scoring.types.d.ts.map +1 -0
  52. package/dist/core/types/scoring.types.js +8 -0
  53. package/dist/core/types/scoring.types.js.map +1 -0
  54. package/dist/services/detection/framework-detector.d.ts.map +1 -1
  55. package/dist/services/detection/framework-detector.js +74 -5
  56. package/dist/services/detection/framework-detector.js.map +1 -1
  57. package/dist/services/index.d.ts +12 -0
  58. package/dist/services/index.d.ts.map +1 -1
  59. package/dist/services/index.js +14 -0
  60. package/dist/services/index.js.map +1 -1
  61. package/dist/services/optimization/detectors/bug-detector.d.ts +82 -0
  62. package/dist/services/optimization/detectors/bug-detector.d.ts.map +1 -0
  63. package/dist/services/optimization/detectors/bug-detector.js +443 -0
  64. package/dist/services/optimization/detectors/bug-detector.js.map +1 -0
  65. package/dist/services/optimization/detectors/code-smell-detector.d.ts +108 -0
  66. package/dist/services/optimization/detectors/code-smell-detector.d.ts.map +1 -0
  67. package/dist/services/optimization/detectors/code-smell-detector.js +569 -0
  68. package/dist/services/optimization/detectors/code-smell-detector.js.map +1 -0
  69. package/dist/services/optimization/detectors/index.d.ts +7 -0
  70. package/dist/services/optimization/detectors/index.d.ts.map +1 -0
  71. package/dist/services/optimization/detectors/index.js +7 -0
  72. package/dist/services/optimization/detectors/index.js.map +1 -0
  73. package/dist/services/optimization/detectors/perf-detector.d.ts +80 -0
  74. package/dist/services/optimization/detectors/perf-detector.d.ts.map +1 -0
  75. package/dist/services/optimization/detectors/perf-detector.js +451 -0
  76. package/dist/services/optimization/detectors/perf-detector.js.map +1 -0
  77. package/dist/services/optimization/index.d.ts +61 -0
  78. package/dist/services/optimization/index.d.ts.map +1 -0
  79. package/dist/services/optimization/index.js +69 -0
  80. package/dist/services/optimization/index.js.map +1 -0
  81. package/dist/services/optimization/optimization.service.d.ts +65 -0
  82. package/dist/services/optimization/optimization.service.d.ts.map +1 -0
  83. package/dist/services/optimization/optimization.service.js +511 -0
  84. package/dist/services/optimization/optimization.service.js.map +1 -0
  85. package/dist/services/optimization/optimization.types.d.ts +343 -0
  86. package/dist/services/optimization/optimization.types.d.ts.map +1 -0
  87. package/dist/services/optimization/optimization.types.js +8 -0
  88. package/dist/services/optimization/optimization.types.js.map +1 -0
  89. package/dist/services/optimization/optimizers/code-optimizer.d.ts +87 -0
  90. package/dist/services/optimization/optimizers/code-optimizer.d.ts.map +1 -0
  91. package/dist/services/optimization/optimizers/code-optimizer.js +436 -0
  92. package/dist/services/optimization/optimizers/code-optimizer.js.map +1 -0
  93. package/dist/services/optimization/optimizers/index.d.ts +7 -0
  94. package/dist/services/optimization/optimizers/index.d.ts.map +1 -0
  95. package/dist/services/optimization/optimizers/index.js +7 -0
  96. package/dist/services/optimization/optimizers/index.js.map +1 -0
  97. package/dist/services/optimization/optimizers/perf-optimizer.d.ts +64 -0
  98. package/dist/services/optimization/optimizers/perf-optimizer.d.ts.map +1 -0
  99. package/dist/services/optimization/optimizers/perf-optimizer.js +330 -0
  100. package/dist/services/optimization/optimizers/perf-optimizer.js.map +1 -0
  101. package/dist/services/optimization/optimizers/refact-optimizer.d.ts +82 -0
  102. package/dist/services/optimization/optimizers/refact-optimizer.d.ts.map +1 -0
  103. package/dist/services/optimization/optimizers/refact-optimizer.js +354 -0
  104. package/dist/services/optimization/optimizers/refact-optimizer.js.map +1 -0
  105. package/dist/services/optimization/patterns/anti-patterns.d.ts +31 -0
  106. package/dist/services/optimization/patterns/anti-patterns.d.ts.map +1 -0
  107. package/dist/services/optimization/patterns/anti-patterns.js +501 -0
  108. package/dist/services/optimization/patterns/anti-patterns.js.map +1 -0
  109. package/dist/services/optimization/patterns/index.d.ts +5 -0
  110. package/dist/services/optimization/patterns/index.d.ts.map +1 -0
  111. package/dist/services/optimization/patterns/index.js +5 -0
  112. package/dist/services/optimization/patterns/index.js.map +1 -0
  113. package/dist/services/reporting/export/chart.exporter.d.ts +59 -0
  114. package/dist/services/reporting/export/chart.exporter.d.ts.map +1 -0
  115. package/dist/services/reporting/export/chart.exporter.js +350 -0
  116. package/dist/services/reporting/export/chart.exporter.js.map +1 -0
  117. package/dist/services/reporting/export/index.d.ts +9 -0
  118. package/dist/services/reporting/export/index.d.ts.map +1 -0
  119. package/dist/services/reporting/export/index.js +10 -0
  120. package/dist/services/reporting/export/index.js.map +1 -0
  121. package/dist/services/reporting/export/pdf.exporter.d.ts +133 -0
  122. package/dist/services/reporting/export/pdf.exporter.d.ts.map +1 -0
  123. package/dist/services/reporting/export/pdf.exporter.js +270 -0
  124. package/dist/services/reporting/export/pdf.exporter.js.map +1 -0
  125. package/dist/services/reporting/history.service.d.ts +93 -0
  126. package/dist/services/reporting/history.service.d.ts.map +1 -0
  127. package/dist/services/reporting/history.service.js +285 -0
  128. package/dist/services/reporting/history.service.js.map +1 -0
  129. package/dist/services/reporting/index.d.ts +15 -0
  130. package/dist/services/reporting/index.d.ts.map +1 -0
  131. package/dist/services/reporting/index.js +16 -0
  132. package/dist/services/reporting/index.js.map +1 -0
  133. package/dist/services/reporting/report.service.d.ts +102 -0
  134. package/dist/services/reporting/report.service.d.ts.map +1 -0
  135. package/dist/services/reporting/report.service.js +240 -0
  136. package/dist/services/reporting/report.service.js.map +1 -0
  137. package/dist/services/reporting/reporting.types.d.ts +329 -0
  138. package/dist/services/reporting/reporting.types.d.ts.map +1 -0
  139. package/dist/services/reporting/reporting.types.js +8 -0
  140. package/dist/services/reporting/reporting.types.js.map +1 -0
  141. package/dist/services/reporting/templates/html.template.d.ts +81 -0
  142. package/dist/services/reporting/templates/html.template.d.ts.map +1 -0
  143. package/dist/services/reporting/templates/html.template.js +741 -0
  144. package/dist/services/reporting/templates/html.template.js.map +1 -0
  145. package/dist/services/reporting/templates/json.template.d.ts +85 -0
  146. package/dist/services/reporting/templates/json.template.d.ts.map +1 -0
  147. package/dist/services/reporting/templates/json.template.js +308 -0
  148. package/dist/services/reporting/templates/json.template.js.map +1 -0
  149. package/dist/services/reporting/templates/markdown.template.d.ts +69 -0
  150. package/dist/services/reporting/templates/markdown.template.d.ts.map +1 -0
  151. package/dist/services/reporting/templates/markdown.template.js +311 -0
  152. package/dist/services/reporting/templates/markdown.template.js.map +1 -0
  153. package/dist/services/reporting/trend-analyzer.d.ts +73 -0
  154. package/dist/services/reporting/trend-analyzer.d.ts.map +1 -0
  155. package/dist/services/reporting/trend-analyzer.js +291 -0
  156. package/dist/services/reporting/trend-analyzer.js.map +1 -0
  157. package/dist/services/review/analyzers/dependency-analyzer.d.ts +87 -0
  158. package/dist/services/review/analyzers/dependency-analyzer.d.ts.map +1 -0
  159. package/dist/services/review/analyzers/dependency-analyzer.js +458 -0
  160. package/dist/services/review/analyzers/dependency-analyzer.js.map +1 -0
  161. package/dist/services/review/analyzers/index.d.ts +13 -0
  162. package/dist/services/review/analyzers/index.d.ts.map +1 -0
  163. package/dist/services/review/analyzers/index.js +13 -0
  164. package/dist/services/review/analyzers/index.js.map +1 -0
  165. package/dist/services/review/analyzers/nestjs-analyzer.d.ts +210 -0
  166. package/dist/services/review/analyzers/nestjs-analyzer.d.ts.map +1 -0
  167. package/dist/services/review/analyzers/nestjs-analyzer.js +571 -0
  168. package/dist/services/review/analyzers/nestjs-analyzer.js.map +1 -0
  169. package/dist/services/review/analyzers/performance-analyzer.d.ts +91 -0
  170. package/dist/services/review/analyzers/performance-analyzer.d.ts.map +1 -0
  171. package/dist/services/review/analyzers/performance-analyzer.js +589 -0
  172. package/dist/services/review/analyzers/performance-analyzer.js.map +1 -0
  173. package/dist/services/review/analyzers/security-analyzer.d.ts +96 -0
  174. package/dist/services/review/analyzers/security-analyzer.d.ts.map +1 -0
  175. package/dist/services/review/analyzers/security-analyzer.js +512 -0
  176. package/dist/services/review/analyzers/security-analyzer.js.map +1 -0
  177. package/dist/services/review/analyzers/static-analyzer.d.ts +90 -0
  178. package/dist/services/review/analyzers/static-analyzer.d.ts.map +1 -0
  179. package/dist/services/review/analyzers/static-analyzer.js +423 -0
  180. package/dist/services/review/analyzers/static-analyzer.js.map +1 -0
  181. package/dist/services/review/fixers/auto-fixer.d.ts +94 -0
  182. package/dist/services/review/fixers/auto-fixer.d.ts.map +1 -0
  183. package/dist/services/review/fixers/auto-fixer.js +404 -0
  184. package/dist/services/review/fixers/auto-fixer.js.map +1 -0
  185. package/dist/services/review/fixers/index.d.ts +11 -0
  186. package/dist/services/review/fixers/index.d.ts.map +1 -0
  187. package/dist/services/review/fixers/index.js +11 -0
  188. package/dist/services/review/fixers/index.js.map +1 -0
  189. package/dist/services/review/fixers/refactor-suggester.d.ts +100 -0
  190. package/dist/services/review/fixers/refactor-suggester.d.ts.map +1 -0
  191. package/dist/services/review/fixers/refactor-suggester.js +555 -0
  192. package/dist/services/review/fixers/refactor-suggester.js.map +1 -0
  193. package/dist/services/review/fixers/test-generator.d.ts +99 -0
  194. package/dist/services/review/fixers/test-generator.d.ts.map +1 -0
  195. package/dist/services/review/fixers/test-generator.js +458 -0
  196. package/dist/services/review/fixers/test-generator.js.map +1 -0
  197. package/dist/services/review/index.d.ts +14 -0
  198. package/dist/services/review/index.d.ts.map +1 -0
  199. package/dist/services/review/index.js +14 -0
  200. package/dist/services/review/index.js.map +1 -0
  201. package/dist/services/review/reporters/fix-reporter.d.ts +67 -0
  202. package/dist/services/review/reporters/fix-reporter.d.ts.map +1 -0
  203. package/dist/services/review/reporters/fix-reporter.js +437 -0
  204. package/dist/services/review/reporters/fix-reporter.js.map +1 -0
  205. package/dist/services/review/reporters/index.d.ts +10 -0
  206. package/dist/services/review/reporters/index.d.ts.map +1 -0
  207. package/dist/services/review/reporters/index.js +10 -0
  208. package/dist/services/review/reporters/index.js.map +1 -0
  209. package/dist/services/review/reporters/score-reporter.d.ts +84 -0
  210. package/dist/services/review/reporters/score-reporter.d.ts.map +1 -0
  211. package/dist/services/review/reporters/score-reporter.js +560 -0
  212. package/dist/services/review/reporters/score-reporter.js.map +1 -0
  213. package/dist/services/review/review.service.d.ts +129 -0
  214. package/dist/services/review/review.service.d.ts.map +1 -0
  215. package/dist/services/review/review.service.js +396 -0
  216. package/dist/services/review/review.service.js.map +1 -0
  217. package/dist/services/review/review.types.d.ts +443 -0
  218. package/dist/services/review/review.types.d.ts.map +1 -0
  219. package/dist/services/review/review.types.js +11 -0
  220. package/dist/services/review/review.types.js.map +1 -0
  221. package/dist/services/scoring/dimensions/accessibility.analyzer.d.ts +53 -0
  222. package/dist/services/scoring/dimensions/accessibility.analyzer.d.ts.map +1 -0
  223. package/dist/services/scoring/dimensions/accessibility.analyzer.js +260 -0
  224. package/dist/services/scoring/dimensions/accessibility.analyzer.js.map +1 -0
  225. package/dist/services/scoring/dimensions/backend-logic.analyzer.d.ts +138 -0
  226. package/dist/services/scoring/dimensions/backend-logic.analyzer.d.ts.map +1 -0
  227. package/dist/services/scoring/dimensions/backend-logic.analyzer.js +713 -0
  228. package/dist/services/scoring/dimensions/backend-logic.analyzer.js.map +1 -0
  229. package/dist/services/scoring/dimensions/business-logic.analyzer.d.ts +142 -0
  230. package/dist/services/scoring/dimensions/business-logic.analyzer.d.ts.map +1 -0
  231. package/dist/services/scoring/dimensions/business-logic.analyzer.js +747 -0
  232. package/dist/services/scoring/dimensions/business-logic.analyzer.js.map +1 -0
  233. package/dist/services/scoring/dimensions/code-quality.analyzer.d.ts +142 -0
  234. package/dist/services/scoring/dimensions/code-quality.analyzer.d.ts.map +1 -0
  235. package/dist/services/scoring/dimensions/code-quality.analyzer.js +685 -0
  236. package/dist/services/scoring/dimensions/code-quality.analyzer.js.map +1 -0
  237. package/dist/services/scoring/dimensions/index.d.ts +18 -0
  238. package/dist/services/scoring/dimensions/index.d.ts.map +1 -0
  239. package/dist/services/scoring/dimensions/index.js +27 -0
  240. package/dist/services/scoring/dimensions/index.js.map +1 -0
  241. package/dist/services/scoring/dimensions/performance.analyzer.d.ts +125 -0
  242. package/dist/services/scoring/dimensions/performance.analyzer.d.ts.map +1 -0
  243. package/dist/services/scoring/dimensions/performance.analyzer.js +615 -0
  244. package/dist/services/scoring/dimensions/performance.analyzer.js.map +1 -0
  245. package/dist/services/scoring/dimensions/security.analyzer.d.ts +53 -0
  246. package/dist/services/scoring/dimensions/security.analyzer.d.ts.map +1 -0
  247. package/dist/services/scoring/dimensions/security.analyzer.js +327 -0
  248. package/dist/services/scoring/dimensions/security.analyzer.js.map +1 -0
  249. package/dist/services/scoring/dimensions/seo.analyzer.d.ts +77 -0
  250. package/dist/services/scoring/dimensions/seo.analyzer.d.ts.map +1 -0
  251. package/dist/services/scoring/dimensions/seo.analyzer.js +502 -0
  252. package/dist/services/scoring/dimensions/seo.analyzer.js.map +1 -0
  253. package/dist/services/scoring/dimensions/test-coverage.analyzer.d.ts +106 -0
  254. package/dist/services/scoring/dimensions/test-coverage.analyzer.d.ts.map +1 -0
  255. package/dist/services/scoring/dimensions/test-coverage.analyzer.js +496 -0
  256. package/dist/services/scoring/dimensions/test-coverage.analyzer.js.map +1 -0
  257. package/dist/services/scoring/dimensions/ui-ux.analyzer.d.ts +126 -0
  258. package/dist/services/scoring/dimensions/ui-ux.analyzer.d.ts.map +1 -0
  259. package/dist/services/scoring/dimensions/ui-ux.analyzer.js +665 -0
  260. package/dist/services/scoring/dimensions/ui-ux.analyzer.js.map +1 -0
  261. package/dist/services/scoring/index.d.ts +10 -0
  262. package/dist/services/scoring/index.d.ts.map +1 -0
  263. package/dist/services/scoring/index.js +10 -0
  264. package/dist/services/scoring/index.js.map +1 -0
  265. package/dist/services/scoring/scoring-service.d.ts +222 -0
  266. package/dist/services/scoring/scoring-service.d.ts.map +1 -0
  267. package/dist/services/scoring/scoring-service.js +636 -0
  268. package/dist/services/scoring/scoring-service.js.map +1 -0
  269. package/package.json +11 -3
  270. package/templates/README.md +183 -0
  271. package/templates/nestjs/controller.spec.ts +203 -0
  272. package/templates/nestjs/e2e/api.e2e-spec.ts +451 -0
  273. package/templates/nestjs/e2e/auth.e2e-spec.ts +533 -0
  274. package/templates/nestjs/fixtures/test-module.ts +311 -0
  275. package/templates/nestjs/guard.spec.ts +314 -0
  276. package/templates/nestjs/interceptor.spec.ts +458 -0
  277. package/templates/nestjs/module.spec.ts +173 -0
  278. package/templates/nestjs/pipe.spec.ts +474 -0
  279. package/templates/nestjs/service.spec.ts +296 -0
  280. package/templates/rust/Cargo.toml +72 -0
  281. package/templates/rust/actix-controller.test.rs +114 -0
  282. package/templates/rust/axum-handler.test.rs +117 -0
  283. package/templates/rust/integration.test.rs +63 -0
  284. package/templates/rust/rocket-route.test.rs +106 -0
  285. 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"}