@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.
- package/README.md +346 -0
- package/dist/client.d.ts +307 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +299 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +299 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +381 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/base-provider.d.ts +139 -0
- package/dist/providers/base-provider.d.ts.map +1 -0
- package/dist/providers/base-provider.js +246 -0
- package/dist/providers/base-provider.js.map +1 -0
- package/dist/providers/error-handler.d.ts +51 -0
- package/dist/providers/error-handler.d.ts.map +1 -0
- package/dist/providers/error-handler.js +170 -0
- package/dist/providers/error-handler.js.map +1 -0
- package/dist/providers/gitea-provider.d.ts +68 -0
- package/dist/providers/gitea-provider.d.ts.map +1 -0
- package/dist/providers/gitea-provider.js +515 -0
- package/dist/providers/gitea-provider.js.map +1 -0
- package/dist/providers/github-provider.d.ts +68 -0
- package/dist/providers/github-provider.d.ts.map +1 -0
- package/dist/providers/github-provider.js +518 -0
- package/dist/providers/github-provider.js.map +1 -0
- package/dist/providers/index.d.ts +13 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +41 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/provider-factory.d.ts +75 -0
- package/dist/providers/provider-factory.d.ts.map +1 -0
- package/dist/providers/provider-factory.js +298 -0
- package/dist/providers/provider-factory.js.map +1 -0
- package/dist/providers/types.d.ts +276 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +7 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/server.d.ts +77 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +262 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/actions.d.ts +272 -0
- package/dist/tools/actions.d.ts.map +1 -0
- package/dist/tools/actions.js +428 -0
- package/dist/tools/actions.js.map +1 -0
- package/dist/tools/analytics.d.ts +326 -0
- package/dist/tools/analytics.d.ts.map +1 -0
- package/dist/tools/analytics.js +473 -0
- package/dist/tools/analytics.js.map +1 -0
- package/dist/tools/branches.d.ts +461 -0
- package/dist/tools/branches.d.ts.map +1 -0
- package/dist/tools/branches.js +525 -0
- package/dist/tools/branches.js.map +1 -0
- package/dist/tools/code-review.d.ts +323 -0
- package/dist/tools/code-review.d.ts.map +1 -0
- package/dist/tools/code-review.js +552 -0
- package/dist/tools/code-review.js.map +1 -0
- package/dist/tools/commits.d.ts +488 -0
- package/dist/tools/commits.d.ts.map +1 -0
- package/dist/tools/commits.js +578 -0
- package/dist/tools/commits.js.map +1 -0
- package/dist/tools/deployments.d.ts +319 -0
- package/dist/tools/deployments.d.ts.map +1 -0
- package/dist/tools/deployments.js +355 -0
- package/dist/tools/deployments.js.map +1 -0
- package/dist/tools/files.d.ts +456 -0
- package/dist/tools/files.d.ts.map +1 -0
- package/dist/tools/files.js +531 -0
- package/dist/tools/files.js.map +1 -0
- package/dist/tools/git-sync.d.ts +177 -0
- package/dist/tools/git-sync.d.ts.map +1 -0
- package/dist/tools/git-sync.js +112 -0
- package/dist/tools/git-sync.js.map +1 -0
- package/dist/tools/issues.d.ts +579 -0
- package/dist/tools/issues.d.ts.map +1 -0
- package/dist/tools/issues.js +631 -0
- package/dist/tools/issues.js.map +1 -0
- package/dist/tools/pulls.d.ts +702 -0
- package/dist/tools/pulls.d.ts.map +1 -0
- package/dist/tools/pulls.js +730 -0
- package/dist/tools/pulls.js.map +1 -0
- package/dist/tools/releases.d.ts +495 -0
- package/dist/tools/releases.d.ts.map +1 -0
- package/dist/tools/releases.js +551 -0
- package/dist/tools/releases.js.map +1 -0
- package/dist/tools/repositories.d.ts +513 -0
- package/dist/tools/repositories.d.ts.map +1 -0
- package/dist/tools/repositories.js +634 -0
- package/dist/tools/repositories.js.map +1 -0
- package/dist/tools/security.d.ts +341 -0
- package/dist/tools/security.d.ts.map +1 -0
- package/dist/tools/security.js +394 -0
- package/dist/tools/security.js.map +1 -0
- package/dist/tools/tags.d.ts +419 -0
- package/dist/tools/tags.d.ts.map +1 -0
- package/dist/tools/tags.js +479 -0
- package/dist/tools/tags.js.map +1 -0
- package/dist/tools/users.d.ts +376 -0
- package/dist/tools/users.d.ts.map +1 -0
- package/dist/tools/users.js +495 -0
- package/dist/tools/users.js.map +1 -0
- package/dist/tools/validator.d.ts +192 -0
- package/dist/tools/validator.d.ts.map +1 -0
- package/dist/tools/validator.js +198 -0
- package/dist/tools/validator.js.map +1 -0
- package/dist/tools/version-control.d.ts +247 -0
- package/dist/tools/version-control.d.ts.map +1 -0
- package/dist/tools/version-control.js +521 -0
- package/dist/tools/version-control.js.map +1 -0
- package/dist/tools/webhooks.d.ts +478 -0
- package/dist/tools/webhooks.d.ts.map +1 -0
- package/dist/tools/webhooks.js +541 -0
- package/dist/tools/webhooks.js.map +1 -0
- package/dist/tools/workflows.d.ts +313 -0
- package/dist/tools/workflows.d.ts.map +1 -0
- package/dist/tools/workflows.js +430 -0
- package/dist/tools/workflows.js.map +1 -0
- 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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"}
|