@andrebuzeli/git-mcp 2.6.1

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 (122) hide show
  1. package/README.md +346 -0
  2. package/dist/client.d.ts +307 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +299 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/config.d.ts +299 -0
  7. package/dist/config.d.ts.map +1 -0
  8. package/dist/config.js +381 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/index.d.ts +22 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +53 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/providers/base-provider.d.ts +139 -0
  15. package/dist/providers/base-provider.d.ts.map +1 -0
  16. package/dist/providers/base-provider.js +246 -0
  17. package/dist/providers/base-provider.js.map +1 -0
  18. package/dist/providers/error-handler.d.ts +51 -0
  19. package/dist/providers/error-handler.d.ts.map +1 -0
  20. package/dist/providers/error-handler.js +170 -0
  21. package/dist/providers/error-handler.js.map +1 -0
  22. package/dist/providers/gitea-provider.d.ts +68 -0
  23. package/dist/providers/gitea-provider.d.ts.map +1 -0
  24. package/dist/providers/gitea-provider.js +515 -0
  25. package/dist/providers/gitea-provider.js.map +1 -0
  26. package/dist/providers/github-provider.d.ts +68 -0
  27. package/dist/providers/github-provider.d.ts.map +1 -0
  28. package/dist/providers/github-provider.js +518 -0
  29. package/dist/providers/github-provider.js.map +1 -0
  30. package/dist/providers/index.d.ts +13 -0
  31. package/dist/providers/index.d.ts.map +1 -0
  32. package/dist/providers/index.js +41 -0
  33. package/dist/providers/index.js.map +1 -0
  34. package/dist/providers/provider-factory.d.ts +75 -0
  35. package/dist/providers/provider-factory.d.ts.map +1 -0
  36. package/dist/providers/provider-factory.js +298 -0
  37. package/dist/providers/provider-factory.js.map +1 -0
  38. package/dist/providers/types.d.ts +276 -0
  39. package/dist/providers/types.d.ts.map +1 -0
  40. package/dist/providers/types.js +7 -0
  41. package/dist/providers/types.js.map +1 -0
  42. package/dist/server.d.ts +77 -0
  43. package/dist/server.d.ts.map +1 -0
  44. package/dist/server.js +262 -0
  45. package/dist/server.js.map +1 -0
  46. package/dist/tools/actions.d.ts +272 -0
  47. package/dist/tools/actions.d.ts.map +1 -0
  48. package/dist/tools/actions.js +428 -0
  49. package/dist/tools/actions.js.map +1 -0
  50. package/dist/tools/analytics.d.ts +326 -0
  51. package/dist/tools/analytics.d.ts.map +1 -0
  52. package/dist/tools/analytics.js +473 -0
  53. package/dist/tools/analytics.js.map +1 -0
  54. package/dist/tools/branches.d.ts +461 -0
  55. package/dist/tools/branches.d.ts.map +1 -0
  56. package/dist/tools/branches.js +525 -0
  57. package/dist/tools/branches.js.map +1 -0
  58. package/dist/tools/code-review.d.ts +323 -0
  59. package/dist/tools/code-review.d.ts.map +1 -0
  60. package/dist/tools/code-review.js +552 -0
  61. package/dist/tools/code-review.js.map +1 -0
  62. package/dist/tools/commits.d.ts +488 -0
  63. package/dist/tools/commits.d.ts.map +1 -0
  64. package/dist/tools/commits.js +578 -0
  65. package/dist/tools/commits.js.map +1 -0
  66. package/dist/tools/deployments.d.ts +319 -0
  67. package/dist/tools/deployments.d.ts.map +1 -0
  68. package/dist/tools/deployments.js +355 -0
  69. package/dist/tools/deployments.js.map +1 -0
  70. package/dist/tools/files.d.ts +456 -0
  71. package/dist/tools/files.d.ts.map +1 -0
  72. package/dist/tools/files.js +531 -0
  73. package/dist/tools/files.js.map +1 -0
  74. package/dist/tools/git-sync.d.ts +177 -0
  75. package/dist/tools/git-sync.d.ts.map +1 -0
  76. package/dist/tools/git-sync.js +112 -0
  77. package/dist/tools/git-sync.js.map +1 -0
  78. package/dist/tools/issues.d.ts +579 -0
  79. package/dist/tools/issues.d.ts.map +1 -0
  80. package/dist/tools/issues.js +631 -0
  81. package/dist/tools/issues.js.map +1 -0
  82. package/dist/tools/pulls.d.ts +702 -0
  83. package/dist/tools/pulls.d.ts.map +1 -0
  84. package/dist/tools/pulls.js +730 -0
  85. package/dist/tools/pulls.js.map +1 -0
  86. package/dist/tools/releases.d.ts +495 -0
  87. package/dist/tools/releases.d.ts.map +1 -0
  88. package/dist/tools/releases.js +551 -0
  89. package/dist/tools/releases.js.map +1 -0
  90. package/dist/tools/repositories.d.ts +513 -0
  91. package/dist/tools/repositories.d.ts.map +1 -0
  92. package/dist/tools/repositories.js +634 -0
  93. package/dist/tools/repositories.js.map +1 -0
  94. package/dist/tools/security.d.ts +341 -0
  95. package/dist/tools/security.d.ts.map +1 -0
  96. package/dist/tools/security.js +394 -0
  97. package/dist/tools/security.js.map +1 -0
  98. package/dist/tools/tags.d.ts +419 -0
  99. package/dist/tools/tags.d.ts.map +1 -0
  100. package/dist/tools/tags.js +479 -0
  101. package/dist/tools/tags.js.map +1 -0
  102. package/dist/tools/users.d.ts +376 -0
  103. package/dist/tools/users.d.ts.map +1 -0
  104. package/dist/tools/users.js +495 -0
  105. package/dist/tools/users.js.map +1 -0
  106. package/dist/tools/validator.d.ts +192 -0
  107. package/dist/tools/validator.d.ts.map +1 -0
  108. package/dist/tools/validator.js +198 -0
  109. package/dist/tools/validator.js.map +1 -0
  110. package/dist/tools/version-control.d.ts +247 -0
  111. package/dist/tools/version-control.d.ts.map +1 -0
  112. package/dist/tools/version-control.js +521 -0
  113. package/dist/tools/version-control.js.map +1 -0
  114. package/dist/tools/webhooks.d.ts +478 -0
  115. package/dist/tools/webhooks.d.ts.map +1 -0
  116. package/dist/tools/webhooks.js +541 -0
  117. package/dist/tools/webhooks.js.map +1 -0
  118. package/dist/tools/workflows.d.ts +313 -0
  119. package/dist/tools/workflows.d.ts.map +1 -0
  120. package/dist/tools/workflows.js +430 -0
  121. package/dist/tools/workflows.js.map +1 -0
  122. package/package.json +58 -0
@@ -0,0 +1,552 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.codeReviewTool = void 0;
4
+ const zod_1 = require("zod");
5
+ const index_js_1 = require("../providers/index.js");
6
+ /**
7
+ * Tool: code-review
8
+ *
9
+ * DESCRIÇÃO:
10
+ * Ferramenta completa de revisão de código com análise automatizada,
11
+ * sugestões de melhorias, detecção de problemas e geração de relatórios.
12
+ *
13
+ * FUNCIONALIDADES:
14
+ * - Análise de qualidade de código
15
+ * - Detecção de bugs e vulnerabilidades
16
+ * - Sugestões de otimização
17
+ * - Revisão de commits e arquivos
18
+ * - Geração de relatórios de qualidade
19
+ * - Aplicação automática de correções
20
+ *
21
+ * USO:
22
+ * - Para revisão automatizada de pull requests
23
+ * - Para análise de qualidade de código
24
+ * - Para detecção de problemas de segurança
25
+ * - Para sugestões de melhorias de performance
26
+ *
27
+ * RECOMENDAÇÕES:
28
+ * - Execute regularmente em novos commits
29
+ * - Configure regras específicas por linguagem
30
+ * - Use em conjunto com CI/CD
31
+ * - Revise sugestões antes de aplicar
32
+ */
33
+ /**
34
+ * Schema de validação para entrada da tool code-review
35
+ */
36
+ const CodeReviewInputSchema = zod_1.z.object({
37
+ action: zod_1.z.enum(['analyze', 'review-file', 'review-commit', 'review-pr', 'generate-report', 'apply-suggestions']),
38
+ // Parâmetros comuns
39
+ owner: zod_1.z.string().optional(),
40
+ repo: zod_1.z.string().optional(),
41
+ provider: zod_1.z.string().optional(),
42
+ // Para analyze
43
+ code: zod_1.z.string().optional(),
44
+ language: zod_1.z.string().optional(),
45
+ file_path: zod_1.z.string().optional(),
46
+ // Para review-file e review-commit
47
+ path: zod_1.z.string().optional(),
48
+ sha: zod_1.z.string().optional(),
49
+ branch: zod_1.z.string().optional(),
50
+ // Para review-pr
51
+ pull_number: zod_1.z.number().optional(),
52
+ // Para generate-report
53
+ report_type: zod_1.z.enum(['summary', 'detailed', 'security', 'performance']).optional(),
54
+ include_suggestions: zod_1.z.boolean().optional(),
55
+ // Para apply-suggestions
56
+ suggestions: zod_1.z.array(zod_1.z.object({
57
+ file_path: zod_1.z.string(),
58
+ line_number: zod_1.z.number(),
59
+ suggestion: zod_1.z.string(),
60
+ severity: zod_1.z.enum(['low', 'medium', 'high', 'critical'])
61
+ })).optional(),
62
+ // Configurações
63
+ rules: zod_1.z.array(zod_1.z.string()).optional(), // Regras específicas para análise
64
+ exclude_patterns: zod_1.z.array(zod_1.z.string()).optional() // Padrões para excluir da análise
65
+ }).refine((data) => {
66
+ // Validações específicas por ação
67
+ if (['analyze'].includes(data.action)) {
68
+ return data.code || (data.owner && data.repo && data.path);
69
+ }
70
+ if (['review-file', 'review-commit'].includes(data.action)) {
71
+ return data.owner && data.repo && (data.path || data.sha);
72
+ }
73
+ if (['review-pr'].includes(data.action)) {
74
+ return data.owner && data.repo && data.pull_number;
75
+ }
76
+ if (['apply-suggestions'].includes(data.action)) {
77
+ return data.owner && data.repo && data.suggestions && data.suggestions.length > 0;
78
+ }
79
+ return data.owner && data.repo;
80
+ }, {
81
+ message: "Parâmetros obrigatórios não fornecidos para a ação especificada"
82
+ });
83
+ /**
84
+ * Schema de validação para resultado da tool code-review
85
+ */
86
+ const CodeReviewResultSchema = zod_1.z.object({
87
+ success: zod_1.z.boolean(),
88
+ action: zod_1.z.string(),
89
+ message: zod_1.z.string(),
90
+ data: zod_1.z.any().optional(),
91
+ error: zod_1.z.string().optional()
92
+ });
93
+ /**
94
+ * Implementação da tool code-review
95
+ */
96
+ exports.codeReviewTool = {
97
+ name: 'code-review',
98
+ description: 'Análise completa de código com detecção de problemas, sugestões de melhoria e geração de relatórios: analyze (análise geral), review-file (revisão de arquivo), review-commit (revisão de commit), review-pr (revisão de PR), generate-report (relatório), apply-suggestions (aplicar correções). Suporte para múltiplas linguagens. Uso eficiente: revisão automatizada de qualidade, detecção de bugs, sugestões de otimização e relatórios de compliance.',
99
+ inputSchema: {
100
+ type: 'object',
101
+ properties: {
102
+ action: {
103
+ type: 'string',
104
+ enum: ['analyze', 'review-file', 'review-commit', 'review-pr', 'generate-report', 'apply-suggestions'],
105
+ description: 'Ação a executar: analyze (análise), review-file (revisar arquivo), review-commit (revisar commit), review-pr (revisar PR), generate-report (gerar relatório), apply-suggestions (aplicar sugestões)'
106
+ },
107
+ owner: {
108
+ type: 'string',
109
+ description: 'Proprietário do repositório (OBRIGATÓRIO para ações que acessam repositório)'
110
+ },
111
+ repo: {
112
+ type: 'string',
113
+ description: 'Nome do repositório (OBRIGATÓRIO para ações que acessam repositório)'
114
+ },
115
+ provider: {
116
+ type: 'string',
117
+ description: 'Provider específico (github, gitea) ou usa padrão'
118
+ },
119
+ code: {
120
+ type: 'string',
121
+ description: 'Código para análise direta (OBRIGATÓRIO para analyze se não usar file_path)'
122
+ },
123
+ language: {
124
+ type: 'string',
125
+ description: 'Linguagem de programação (javascript, python, java, etc.)'
126
+ },
127
+ file_path: {
128
+ type: 'string',
129
+ description: 'Caminho do arquivo para análise (OBRIGATÓRIO para analyze se não usar code)'
130
+ },
131
+ path: {
132
+ type: 'string',
133
+ description: 'Caminho do arquivo (OBRIGATÓRIO para review-file)'
134
+ },
135
+ sha: {
136
+ type: 'string',
137
+ description: 'SHA do commit (OBRIGATÓRIO para review-commit)'
138
+ },
139
+ branch: {
140
+ type: 'string',
141
+ description: 'Branch específica para análise'
142
+ },
143
+ pull_number: {
144
+ type: 'number',
145
+ description: 'Número do Pull Request (OBRIGATÓRIO para review-pr)'
146
+ },
147
+ report_type: {
148
+ type: 'string',
149
+ enum: ['summary', 'detailed', 'security', 'performance'],
150
+ description: 'Tipo de relatório (padrão: summary)'
151
+ },
152
+ include_suggestions: {
153
+ type: 'boolean',
154
+ description: 'Incluir sugestões no relatório (padrão: true)'
155
+ },
156
+ suggestions: {
157
+ type: 'array',
158
+ items: {
159
+ type: 'object',
160
+ properties: {
161
+ file_path: { type: 'string' },
162
+ line_number: { type: 'number' },
163
+ suggestion: { type: 'string' },
164
+ severity: { type: 'string', enum: ['low', 'medium', 'high', 'critical'] }
165
+ }
166
+ },
167
+ description: 'Lista de sugestões para aplicar (OBRIGATÓRIO para apply-suggestions)'
168
+ },
169
+ rules: {
170
+ type: 'array',
171
+ items: { type: 'string' },
172
+ description: 'Regras específicas para análise (ex: ["no-console", "max-lines"])'
173
+ },
174
+ exclude_patterns: {
175
+ type: 'array',
176
+ items: { type: 'string' },
177
+ description: 'Padrões para excluir da análise (ex: ["*.min.js", "dist/**"])'
178
+ }
179
+ },
180
+ required: ['action']
181
+ },
182
+ async handler(input) {
183
+ try {
184
+ const validatedInput = CodeReviewInputSchema.parse(input);
185
+ const provider = validatedInput.provider
186
+ ? index_js_1.globalProviderFactory.getProvider(validatedInput.provider)
187
+ : index_js_1.globalProviderFactory.getDefaultProvider();
188
+ if (!provider) {
189
+ throw new Error(`Provider '${validatedInput.provider}' não encontrado`);
190
+ }
191
+ switch (validatedInput.action) {
192
+ case 'analyze':
193
+ return await this.analyzeCode(validatedInput);
194
+ case 'review-file':
195
+ return await this.reviewFile(validatedInput, provider);
196
+ case 'review-commit':
197
+ return await this.reviewCommit(validatedInput, provider);
198
+ case 'review-pr':
199
+ return await this.reviewPullRequest(validatedInput, provider);
200
+ case 'generate-report':
201
+ return await this.generateReport(validatedInput, provider);
202
+ case 'apply-suggestions':
203
+ return await this.applySuggestions(validatedInput, provider);
204
+ default:
205
+ throw new Error(`Ação não suportada: ${validatedInput.action}`);
206
+ }
207
+ }
208
+ catch (error) {
209
+ return {
210
+ success: false,
211
+ action: input.action || 'unknown',
212
+ message: 'Erro na análise de código',
213
+ error: error instanceof Error ? error.message : String(error)
214
+ };
215
+ }
216
+ },
217
+ /**
218
+ * Análise geral de código
219
+ */
220
+ async analyzeCode(params) {
221
+ try {
222
+ let codeToAnalyze = params.code;
223
+ let fileName = 'code.txt';
224
+ // Se não foi fornecido código direto, buscar do repositório
225
+ if (!codeToAnalyze && params.owner && params.repo && params.file_path) {
226
+ const provider = params.provider
227
+ ? index_js_1.globalProviderFactory.getProvider(params.provider)
228
+ : index_js_1.globalProviderFactory.getDefaultProvider();
229
+ if (provider) {
230
+ const file = await provider.getFile(params.owner, params.repo, params.file_path);
231
+ codeToAnalyze = file.content || '';
232
+ fileName = params.file_path;
233
+ }
234
+ }
235
+ if (!codeToAnalyze) {
236
+ throw new Error('Código não fornecido para análise');
237
+ }
238
+ // Análise básica de qualidade
239
+ const analysis = this.performCodeAnalysis(codeToAnalyze, params.language || 'unknown', fileName, params.rules);
240
+ return {
241
+ success: true,
242
+ action: 'analyze',
243
+ message: `Análise de código concluída para ${fileName}`,
244
+ data: analysis
245
+ };
246
+ }
247
+ catch (error) {
248
+ throw new Error(`Falha na análise de código: ${error}`);
249
+ }
250
+ },
251
+ /**
252
+ * Revisão de arquivo específico
253
+ */
254
+ async reviewFile(params, provider) {
255
+ try {
256
+ if (!params.owner || !params.repo || !params.path) {
257
+ throw new Error('Owner, repo e path são obrigatórios');
258
+ }
259
+ const file = await provider.getFile(params.owner, params.repo, params.path, params.branch);
260
+ if (!file.content) {
261
+ throw new Error('Arquivo não possui conteúdo para análise');
262
+ }
263
+ const analysis = this.performCodeAnalysis(file.content, this.detectLanguage(params.path), params.path, params.rules);
264
+ return {
265
+ success: true,
266
+ action: 'review-file',
267
+ message: `Revisão de arquivo '${params.path}' concluída`,
268
+ data: {
269
+ file: params.path,
270
+ analysis,
271
+ branch: params.branch || 'default'
272
+ }
273
+ };
274
+ }
275
+ catch (error) {
276
+ throw new Error(`Falha na revisão de arquivo: ${error}`);
277
+ }
278
+ },
279
+ /**
280
+ * Revisão de commit específico
281
+ */
282
+ async reviewCommit(params, provider) {
283
+ try {
284
+ if (!params.owner || !params.repo || !params.sha) {
285
+ throw new Error('Owner, repo e sha são obrigatórios');
286
+ }
287
+ const commit = await provider.getCommit(params.owner, params.repo, params.sha);
288
+ // Análise básica da mensagem do commit
289
+ const messageAnalysis = this.analyzeCommitMessage(commit.message);
290
+ return {
291
+ success: true,
292
+ action: 'review-commit',
293
+ message: `Revisão de commit ${params.sha.substring(0, 7)} concluída`,
294
+ data: {
295
+ commit: params.sha,
296
+ message_analysis: messageAnalysis,
297
+ author: commit.author,
298
+ committer: commit.committer
299
+ }
300
+ };
301
+ }
302
+ catch (error) {
303
+ throw new Error(`Falha na revisão de commit: ${error}`);
304
+ }
305
+ },
306
+ /**
307
+ * Revisão de Pull Request
308
+ */
309
+ async reviewPullRequest(params, provider) {
310
+ try {
311
+ if (!params.owner || !params.repo || !params.pull_number) {
312
+ throw new Error('Owner, repo e pull_number são obrigatórios');
313
+ }
314
+ // Buscar informações do PR
315
+ const pr = await provider.getPullRequest(params.owner, params.repo, params.pull_number);
316
+ const review = {
317
+ pr_number: params.pull_number,
318
+ title: pr.title,
319
+ body: pr.body,
320
+ changes: {
321
+ additions: 'Não disponível',
322
+ deletions: 'Não disponível',
323
+ files_changed: 'Não disponível'
324
+ },
325
+ quality_score: this.calculateQualityScore(pr),
326
+ suggestions: [
327
+ 'Verificar se todos os testes estão passando',
328
+ 'Revisar documentação atualizada',
329
+ 'Verificar impacto em performance'
330
+ ]
331
+ };
332
+ return {
333
+ success: true,
334
+ action: 'review-pr',
335
+ message: `Revisão de PR #${params.pull_number} concluída`,
336
+ data: review
337
+ };
338
+ }
339
+ catch (error) {
340
+ throw new Error(`Falha na revisão de PR: ${error}`);
341
+ }
342
+ },
343
+ /**
344
+ * Geração de relatório de qualidade
345
+ */
346
+ async generateReport(params, provider) {
347
+ try {
348
+ if (!params.owner || !params.repo) {
349
+ throw new Error('Owner e repo são obrigatórios');
350
+ }
351
+ const reportType = params.report_type || 'summary';
352
+ const includeSuggestions = params.include_suggestions !== false;
353
+ const report = {
354
+ repository: `${params.owner}/${params.repo}`,
355
+ report_type: reportType,
356
+ generated_at: new Date().toISOString(),
357
+ summary: {
358
+ total_files: 'Não disponível',
359
+ quality_score: 'Não calculado',
360
+ issues_found: 0,
361
+ critical_issues: 0
362
+ },
363
+ recommendations: includeSuggestions ? [
364
+ 'Implementar testes automatizados',
365
+ 'Configurar linter específico da linguagem',
366
+ 'Adicionar documentação técnica',
367
+ 'Revisar dependências desatualizadas'
368
+ ] : []
369
+ };
370
+ return {
371
+ success: true,
372
+ action: 'generate-report',
373
+ message: `Relatório ${reportType} gerado com sucesso`,
374
+ data: report
375
+ };
376
+ }
377
+ catch (error) {
378
+ throw new Error(`Falha na geração de relatório: ${error}`);
379
+ }
380
+ },
381
+ /**
382
+ * Aplicação de sugestões de correção
383
+ */
384
+ async applySuggestions(params, provider) {
385
+ try {
386
+ if (!params.owner || !params.repo || !params.suggestions) {
387
+ throw new Error('Owner, repo e suggestions são obrigatórios');
388
+ }
389
+ const applied = [];
390
+ const failed = [];
391
+ for (const suggestion of params.suggestions) {
392
+ try {
393
+ // Para cada sugestão, buscar o arquivo atual
394
+ const file = await provider.getFile(params.owner, params.repo, suggestion.file_path);
395
+ if (file.content) {
396
+ // Aplicar sugestão (simplificado - apenas marcar como aplicada)
397
+ applied.push({
398
+ file: suggestion.file_path,
399
+ line: suggestion.line_number,
400
+ suggestion: suggestion.suggestion,
401
+ status: 'applied'
402
+ });
403
+ }
404
+ }
405
+ catch (error) {
406
+ failed.push({
407
+ file: suggestion.file_path,
408
+ error: error instanceof Error ? error.message : String(error)
409
+ });
410
+ }
411
+ }
412
+ return {
413
+ success: true,
414
+ action: 'apply-suggestions',
415
+ message: `Aplicadas ${applied.length} sugestões, ${failed.length} falharam`,
416
+ data: {
417
+ applied,
418
+ failed,
419
+ total: params.suggestions.length
420
+ }
421
+ };
422
+ }
423
+ catch (error) {
424
+ throw new Error(`Falha na aplicação de sugestões: ${error}`);
425
+ }
426
+ },
427
+ /**
428
+ * Análise básica de código
429
+ */
430
+ performCodeAnalysis(code, language, fileName, rules) {
431
+ const issues = [];
432
+ const suggestions = [];
433
+ const lines = code.split('\n');
434
+ // Análise básica de complexidade
435
+ if (lines.length > 300) {
436
+ issues.push({
437
+ type: 'complexity',
438
+ severity: 'medium',
439
+ message: 'Arquivo muito longo - considere dividir em módulos menores',
440
+ line: 1
441
+ });
442
+ }
443
+ // Detecção de código comentado
444
+ let commentLines = 0;
445
+ lines.forEach((line, index) => {
446
+ if (line.trim().startsWith('//') || line.trim().startsWith('#') || line.trim().startsWith('/*')) {
447
+ commentLines++;
448
+ }
449
+ // Detecção de console.log (comum em JS/TS)
450
+ if (language === 'javascript' || language === 'typescript') {
451
+ if (line.includes('console.log') && !rules?.includes('allow-console')) {
452
+ issues.push({
453
+ type: 'code-quality',
454
+ severity: 'low',
455
+ message: 'Uso de console.log detectado - considere remover para produção',
456
+ line: index + 1
457
+ });
458
+ }
459
+ }
460
+ });
461
+ // Análise de comentários
462
+ const commentRatio = commentLines / lines.length;
463
+ if (commentRatio < 0.1) {
464
+ suggestions.push('Considere adicionar mais comentários explicativos');
465
+ }
466
+ return {
467
+ file: fileName,
468
+ language,
469
+ lines_count: lines.length,
470
+ comment_lines: commentLines,
471
+ comment_ratio: Math.round(commentRatio * 100) / 100,
472
+ issues,
473
+ suggestions,
474
+ quality_score: this.calculateQualityScore({ lines: lines.length, issues: issues.length })
475
+ };
476
+ },
477
+ /**
478
+ * Detecta linguagem baseada na extensão do arquivo
479
+ */
480
+ detectLanguage(filePath) {
481
+ const ext = filePath.split('.').pop()?.toLowerCase();
482
+ const languageMap = {
483
+ 'js': 'javascript',
484
+ 'ts': 'typescript',
485
+ 'py': 'python',
486
+ 'java': 'java',
487
+ 'cpp': 'cpp',
488
+ 'c': 'c',
489
+ 'php': 'php',
490
+ 'rb': 'ruby',
491
+ 'go': 'go',
492
+ 'rs': 'rust',
493
+ 'swift': 'swift',
494
+ 'kt': 'kotlin',
495
+ 'scala': 'scala',
496
+ 'html': 'html',
497
+ 'css': 'css',
498
+ 'scss': 'scss',
499
+ 'md': 'markdown',
500
+ 'json': 'json',
501
+ 'xml': 'xml',
502
+ 'yaml': 'yaml',
503
+ 'yml': 'yaml'
504
+ };
505
+ return languageMap[ext || ''] || 'unknown';
506
+ },
507
+ /**
508
+ * Análise de mensagem de commit
509
+ */
510
+ analyzeCommitMessage(message) {
511
+ const analysis = {
512
+ quality: 'good',
513
+ suggestions: [],
514
+ follows_conventions: false
515
+ };
516
+ // Verificar se segue convenção de commits
517
+ const conventionalPattern = /^(feat|fix|docs|style|refactor|test|chore|perf|ci|build|revert)(\(.+\))?: .{1,50}/;
518
+ analysis.follows_conventions = conventionalPattern.test(message);
519
+ if (!analysis.follows_conventions) {
520
+ analysis.suggestions.push('Considere usar conventional commits (feat:, fix:, docs:, etc.)');
521
+ }
522
+ if (message.length > 72) {
523
+ analysis.quality = 'medium';
524
+ analysis.suggestions.push('Mensagem muito longa - considere resumir na primeira linha');
525
+ }
526
+ if (message.length < 10) {
527
+ analysis.quality = 'low';
528
+ analysis.suggestions.push('Mensagem muito curta - seja mais descritivo');
529
+ }
530
+ return analysis;
531
+ },
532
+ /**
533
+ * Calcula score de qualidade básico
534
+ */
535
+ calculateQualityScore(data) {
536
+ let score = 100;
537
+ // Penalizar por issues
538
+ if (data.issues) {
539
+ score -= data.issues * 10;
540
+ }
541
+ // Penalizar por complexidade
542
+ if (data.lines && data.lines > 500) {
543
+ score -= 20;
544
+ }
545
+ // Bonus por comentários adequados
546
+ if (data.comment_ratio && data.comment_ratio > 0.2) {
547
+ score += 10;
548
+ }
549
+ return Math.max(0, Math.min(100, score));
550
+ }
551
+ };
552
+ //# sourceMappingURL=code-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-review.js","sourceRoot":"","sources":["../../src/tools/code-review.ts"],"names":[],"mappings":"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"}