@probelabs/visor 0.1.19 → 0.1.21

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 (107) hide show
  1. package/dist/action-cli-bridge.d.ts +0 -1
  2. package/dist/action-cli-bridge.d.ts.map +1 -1
  3. package/dist/ai-review-service.d.ts +0 -1
  4. package/dist/ai-review-service.d.ts.map +1 -1
  5. package/dist/check-execution-engine.d.ts +0 -1
  6. package/dist/check-execution-engine.d.ts.map +1 -1
  7. package/dist/cli-main.d.ts +0 -2
  8. package/dist/cli-main.d.ts.map +1 -1
  9. package/dist/cli.d.ts +0 -1
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/commands.d.ts +0 -1
  12. package/dist/commands.d.ts.map +1 -1
  13. package/dist/config.d.ts +0 -1
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/dependency-resolver.d.ts +0 -1
  16. package/dist/dependency-resolver.d.ts.map +1 -1
  17. package/dist/event-mapper.d.ts +0 -1
  18. package/dist/event-mapper.d.ts.map +1 -1
  19. package/dist/failure-condition-evaluator.d.ts +0 -1
  20. package/dist/failure-condition-evaluator.d.ts.map +1 -1
  21. package/dist/git-repository-analyzer.d.ts +0 -1
  22. package/dist/git-repository-analyzer.d.ts.map +1 -1
  23. package/dist/github-check-service.d.ts +0 -1
  24. package/dist/github-check-service.d.ts.map +1 -1
  25. package/dist/github-comments.d.ts +0 -1
  26. package/dist/github-comments.d.ts.map +1 -1
  27. package/dist/index.d.ts +0 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +127704 -805
  30. package/dist/output-formatters.d.ts +0 -1
  31. package/dist/output-formatters.d.ts.map +1 -1
  32. package/dist/pr-analyzer.d.ts +0 -1
  33. package/dist/pr-analyzer.d.ts.map +1 -1
  34. package/dist/pr-detector.d.ts +0 -1
  35. package/dist/pr-detector.d.ts.map +1 -1
  36. package/dist/providers/ai-check-provider.d.ts.map +1 -1
  37. package/dist/providers/check-provider-registry.d.ts.map +1 -1
  38. package/dist/providers/check-provider.interface.d.ts.map +1 -1
  39. package/dist/providers/index.d.ts.map +1 -1
  40. package/dist/providers/noop-check-provider.d.ts.map +1 -1
  41. package/dist/providers/tool-check-provider.d.ts.map +1 -1
  42. package/dist/providers/webhook-check-provider.d.ts.map +1 -1
  43. package/dist/reviewer.d.ts +0 -1
  44. package/dist/reviewer.d.ts.map +1 -1
  45. package/dist/session-registry.d.ts +0 -1
  46. package/dist/session-registry.d.ts.map +1 -1
  47. package/dist/types/cli.d.ts.map +1 -1
  48. package/dist/types/config.d.ts.map +1 -1
  49. package/dist/utils/env-resolver.d.ts.map +1 -1
  50. package/package.json +3 -3
  51. package/dist/action-cli-bridge.js +0 -380
  52. package/dist/action-cli-bridge.js.map +0 -1
  53. package/dist/ai-review-service.js +0 -854
  54. package/dist/ai-review-service.js.map +0 -1
  55. package/dist/check-execution-engine.js +0 -1720
  56. package/dist/check-execution-engine.js.map +0 -1
  57. package/dist/cli-main.js +0 -249
  58. package/dist/cli-main.js.map +0 -1
  59. package/dist/cli.js +0 -241
  60. package/dist/cli.js.map +0 -1
  61. package/dist/commands.js +0 -53
  62. package/dist/commands.js.map +0 -1
  63. package/dist/config.js +0 -437
  64. package/dist/config.js.map +0 -1
  65. package/dist/dependency-resolver.js +0 -163
  66. package/dist/dependency-resolver.js.map +0 -1
  67. package/dist/event-mapper.js +0 -316
  68. package/dist/event-mapper.js.map +0 -1
  69. package/dist/failure-condition-evaluator.js +0 -481
  70. package/dist/failure-condition-evaluator.js.map +0 -1
  71. package/dist/git-repository-analyzer.js +0 -285
  72. package/dist/git-repository-analyzer.js.map +0 -1
  73. package/dist/github-check-service.js +0 -369
  74. package/dist/github-check-service.js.map +0 -1
  75. package/dist/github-comments.js +0 -289
  76. package/dist/github-comments.js.map +0 -1
  77. package/dist/index.js.map +0 -1
  78. package/dist/output-formatters.js +0 -624
  79. package/dist/output-formatters.js.map +0 -1
  80. package/dist/pr-analyzer.js +0 -195
  81. package/dist/pr-analyzer.js.map +0 -1
  82. package/dist/pr-detector.js +0 -357
  83. package/dist/pr-detector.js.map +0 -1
  84. package/dist/providers/ai-check-provider.js +0 -437
  85. package/dist/providers/ai-check-provider.js.map +0 -1
  86. package/dist/providers/check-provider-registry.js +0 -138
  87. package/dist/providers/check-provider-registry.js.map +0 -1
  88. package/dist/providers/check-provider.interface.js +0 -11
  89. package/dist/providers/check-provider.interface.js.map +0 -1
  90. package/dist/providers/index.js +0 -19
  91. package/dist/providers/index.js.map +0 -1
  92. package/dist/providers/noop-check-provider.js +0 -55
  93. package/dist/providers/noop-check-provider.js.map +0 -1
  94. package/dist/providers/tool-check-provider.js +0 -174
  95. package/dist/providers/tool-check-provider.js.map +0 -1
  96. package/dist/providers/webhook-check-provider.js +0 -173
  97. package/dist/providers/webhook-check-provider.js.map +0 -1
  98. package/dist/reviewer.js +0 -260
  99. package/dist/reviewer.js.map +0 -1
  100. package/dist/session-registry.js +0 -67
  101. package/dist/session-registry.js.map +0 -1
  102. package/dist/types/cli.js +0 -3
  103. package/dist/types/cli.js.map +0 -1
  104. package/dist/types/config.js +0 -6
  105. package/dist/types/config.js.map +0 -1
  106. package/dist/utils/env-resolver.js +0 -130
  107. package/dist/utils/env-resolver.js.map +0 -1
@@ -1,624 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.OutputFormatters = void 0;
7
- const cli_table3_1 = __importDefault(require("cli-table3"));
8
- const reviewer_1 = require("./reviewer");
9
- class OutputFormatters {
10
- /**
11
- * Format analysis results as a table using cli-table3
12
- */
13
- static formatAsTable(result, options = {}) {
14
- const { showDetails = false, groupByCategory = true } = options;
15
- let output = '';
16
- // Calculate metrics from issues once at the top
17
- const issues = result.reviewSummary.issues || [];
18
- const totalIssues = issues.length;
19
- const criticalIssues = issues.filter(i => i.severity === 'critical').length;
20
- // Summary table
21
- const summaryTable = new cli_table3_1.default({
22
- head: ['Metric', 'Value'],
23
- colWidths: [25, 30],
24
- style: {
25
- head: ['cyan', 'bold'],
26
- border: ['grey'],
27
- },
28
- });
29
- summaryTable.push(['Total Issues', totalIssues.toString()], ['Critical Issues', criticalIssues.toString()], ['Files Analyzed', result.repositoryInfo.files.length.toString()], ['Total Additions', result.repositoryInfo.totalAdditions.toString()], ['Total Deletions', result.repositoryInfo.totalDeletions.toString()], ['Execution Time', `${result.executionTime}ms`], ['Checks Executed', result.checksExecuted.join(', ')]);
30
- output += 'Analysis Summary\n';
31
- output += summaryTable.toString() + '\n';
32
- output += '\n';
33
- // Issues by category table
34
- if (issues.length > 0) {
35
- if (groupByCategory) {
36
- const groupedComments = this.groupCommentsByCategory((0, reviewer_1.convertIssuesToComments)(issues));
37
- for (const [category, comments] of Object.entries(groupedComments)) {
38
- if (comments.length === 0)
39
- continue;
40
- const categoryTable = new cli_table3_1.default({
41
- head: ['File', 'Line', 'Severity', 'Message'],
42
- colWidths: [25, 8, 15, 60],
43
- wordWrap: true,
44
- style: {
45
- head: ['cyan', 'bold'],
46
- border: ['grey'],
47
- },
48
- });
49
- output += `${category.toUpperCase()} Issues (${comments.length})\n`;
50
- for (const comment of comments.slice(0, showDetails ? comments.length : 5)) {
51
- // Convert comment back to issue to access suggestion/replacement fields
52
- const issue = (issues || []).find(i => i.file === comment.file && i.line === comment.line);
53
- let messageContent = this.wrapText(comment.message, 55);
54
- // Add suggestion if available
55
- if (issue?.suggestion) {
56
- messageContent += '\nSuggestion: ' + this.wrapText(issue.suggestion, 53);
57
- }
58
- // Add replacement code if available
59
- if (issue?.replacement) {
60
- messageContent +=
61
- '\nCode fix:\n' +
62
- issue.replacement
63
- .split('\n')
64
- .map(line => ' ' + line)
65
- .join('\n');
66
- }
67
- categoryTable.push([
68
- comment.file,
69
- comment.line.toString(),
70
- { content: this.formatSeverity(comment.severity), hAlign: 'center' },
71
- messageContent,
72
- ]);
73
- }
74
- output += categoryTable.toString() + '\n';
75
- if (!showDetails && comments.length > 5) {
76
- output += `... and ${comments.length - 5} more issues\n`;
77
- }
78
- output += '\n';
79
- }
80
- }
81
- else {
82
- // All issues in one table
83
- const issuesTable = new cli_table3_1.default({
84
- head: ['File', 'Line', 'Category', 'Severity', 'Message'],
85
- colWidths: [20, 6, 12, 15, 50],
86
- wordWrap: true,
87
- style: {
88
- head: ['cyan', 'bold'],
89
- border: ['grey'],
90
- },
91
- });
92
- output += 'All Issues\n';
93
- for (const issue of issues.slice(0, showDetails ? undefined : 10)) {
94
- let messageContent = this.wrapText(issue.message, 45);
95
- // Add suggestion if available
96
- if (issue.suggestion) {
97
- messageContent += '\nSuggestion: ' + this.wrapText(issue.suggestion, 43);
98
- }
99
- // Add replacement code if available
100
- if (issue.replacement) {
101
- messageContent +=
102
- '\nCode fix:\n' +
103
- issue.replacement
104
- .split('\n')
105
- .map(line => ' ' + line)
106
- .join('\n');
107
- }
108
- issuesTable.push([
109
- this.truncateText(issue.file, 18),
110
- issue.line.toString(),
111
- issue.category,
112
- this.formatSeverity(issue.severity),
113
- messageContent,
114
- ]);
115
- }
116
- output += issuesTable.toString() + '\n\n';
117
- }
118
- }
119
- else {
120
- output += 'No issues found!\n\n';
121
- }
122
- // Suggestions table
123
- if ((result.reviewSummary.suggestions || []).length > 0) {
124
- const suggestionsTable = new cli_table3_1.default({
125
- head: ['#', 'Suggestion'],
126
- colWidths: [5, 70],
127
- style: {
128
- head: ['cyan', 'bold'],
129
- border: ['grey'],
130
- },
131
- });
132
- output += 'Suggestions\n';
133
- (result.reviewSummary.suggestions || []).forEach((suggestion, index) => {
134
- suggestionsTable.push([(index + 1).toString(), this.wrapText(suggestion, 65)]);
135
- });
136
- output += suggestionsTable.toString() + '\n\n';
137
- }
138
- // Files table (if requested)
139
- if (options.includeFiles && result.repositoryInfo.files.length > 0) {
140
- const filesTable = new cli_table3_1.default({
141
- head: ['File', 'Status', 'Additions', 'Deletions'],
142
- colWidths: [40, 12, 12, 12],
143
- style: {
144
- head: ['cyan', 'bold'],
145
- border: ['grey'],
146
- },
147
- });
148
- output += 'Files Changed\n';
149
- for (const file of result.repositoryInfo.files) {
150
- const statusEmoji = this.getFileStatusEmoji(file.status);
151
- filesTable.push([
152
- this.truncateText(file.filename, 35),
153
- `${statusEmoji} ${file.status}`,
154
- `+${file.additions}`,
155
- `-${file.deletions}`,
156
- ]);
157
- }
158
- output += filesTable.toString() + '\n\n';
159
- }
160
- if (options.includeTimestamp) {
161
- output += `Generated at: ${result.timestamp}\n`;
162
- }
163
- return output;
164
- }
165
- /**
166
- * Format analysis results as JSON
167
- */
168
- static formatAsJSON(result, options = {}) {
169
- // Calculate metrics from issues
170
- const issues = result.reviewSummary.issues;
171
- const totalIssues = (0, reviewer_1.calculateTotalIssues)(issues);
172
- const criticalIssues = (0, reviewer_1.calculateCriticalIssues)(issues);
173
- const jsonResult = {
174
- summary: {
175
- totalIssues,
176
- criticalIssues,
177
- executionTime: result.executionTime,
178
- timestamp: result.timestamp,
179
- checksExecuted: result.checksExecuted,
180
- },
181
- repository: {
182
- title: result.repositoryInfo.title,
183
- author: result.repositoryInfo.author,
184
- base: result.repositoryInfo.base,
185
- head: result.repositoryInfo.head,
186
- isGitRepository: result.repositoryInfo.isGitRepository,
187
- workingDirectory: result.repositoryInfo.workingDirectory,
188
- filesChanged: result.repositoryInfo.files.length,
189
- totalAdditions: result.repositoryInfo.totalAdditions,
190
- totalDeletions: result.repositoryInfo.totalDeletions,
191
- },
192
- issues: options.groupByCategory
193
- ? this.groupCommentsByCategory((0, reviewer_1.convertIssuesToComments)(issues || []))
194
- : issues || [],
195
- suggestions: result.reviewSummary.suggestions || [],
196
- files: options.includeFiles ? result.repositoryInfo.files : undefined,
197
- debug: result.debug, // Include debug information when available
198
- failureConditions: result.failureConditions || [], // Include failure condition results
199
- };
200
- return JSON.stringify(jsonResult, null, 2);
201
- }
202
- /**
203
- * Format analysis results as SARIF 2.1.0
204
- */
205
- static formatAsSarif(result, _options = {}) {
206
- // Get issues from result
207
- const issues = result.reviewSummary.issues;
208
- // Generate unique rule definitions for each issue category
209
- const rules = [
210
- {
211
- id: 'visor-security-input-validation',
212
- shortDescription: {
213
- text: 'Input validation required',
214
- },
215
- fullDescription: {
216
- text: 'Input validation and sanitization should be implemented to prevent security vulnerabilities.',
217
- },
218
- helpUri: 'https://owasp.org/www-project-top-ten/2017/A1_2017-Injection',
219
- },
220
- {
221
- id: 'visor-performance-optimization',
222
- shortDescription: {
223
- text: 'Performance optimization needed',
224
- },
225
- fullDescription: {
226
- text: 'Code performance can be improved through caching, algorithm optimization, or resource management.',
227
- },
228
- helpUri: 'https://web.dev/performance/',
229
- },
230
- {
231
- id: 'visor-style-consistency',
232
- shortDescription: {
233
- text: 'Code style inconsistency',
234
- },
235
- fullDescription: {
236
- text: 'Code should follow consistent naming conventions and formatting standards.',
237
- },
238
- helpUri: 'https://google.github.io/styleguide/',
239
- },
240
- {
241
- id: 'visor-logic-complexity',
242
- shortDescription: {
243
- text: 'Logic complexity issue',
244
- },
245
- fullDescription: {
246
- text: 'Code logic could be simplified or broken down into smaller, more manageable components.',
247
- },
248
- helpUri: 'https://refactoring.guru/',
249
- },
250
- {
251
- id: 'visor-documentation-missing',
252
- shortDescription: {
253
- text: 'Documentation missing',
254
- },
255
- fullDescription: {
256
- text: 'Public functions and complex logic should be documented for maintainability.',
257
- },
258
- helpUri: 'https://jsdoc.app/',
259
- },
260
- ];
261
- // Map Visor categories to rule IDs
262
- const categoryToRuleId = {
263
- security: 'visor-security-input-validation',
264
- performance: 'visor-performance-optimization',
265
- style: 'visor-style-consistency',
266
- logic: 'visor-logic-complexity',
267
- documentation: 'visor-documentation-missing',
268
- };
269
- // Map Visor severity to SARIF level
270
- const severityToLevel = {
271
- critical: 'error',
272
- error: 'error',
273
- warning: 'warning',
274
- info: 'note',
275
- };
276
- // Convert ReviewIssues to SARIF results
277
- const sarifResults = (issues || []).map((issue, _index) => {
278
- const ruleId = categoryToRuleId[issue.category] || 'visor-logic-complexity';
279
- const ruleIndex = rules.findIndex(rule => rule.id === ruleId);
280
- return {
281
- ruleId: ruleId,
282
- ruleIndex: ruleIndex,
283
- level: severityToLevel[issue.severity] || 'warning',
284
- message: {
285
- text: issue.message,
286
- },
287
- locations: [
288
- {
289
- physicalLocation: {
290
- artifactLocation: {
291
- uri: issue.file,
292
- uriBaseId: '%SRCROOT%',
293
- },
294
- region: {
295
- startLine: issue.line,
296
- startColumn: 1,
297
- },
298
- },
299
- },
300
- ],
301
- };
302
- });
303
- // Construct the complete SARIF 2.1.0 structure
304
- const sarifReport = {
305
- $schema: 'https://json.schemastore.org/sarif-2.1.0.json',
306
- version: '2.1.0',
307
- runs: [
308
- {
309
- tool: {
310
- driver: {
311
- name: 'Visor',
312
- version: '1.0.0',
313
- informationUri: 'https://github.com/your-org/visor',
314
- rules: rules,
315
- },
316
- },
317
- results: sarifResults,
318
- },
319
- ],
320
- };
321
- return JSON.stringify(sarifReport, null, 2);
322
- }
323
- /**
324
- * Format analysis results as markdown
325
- */
326
- static formatAsMarkdown(result, options = {}) {
327
- const { showDetails = false, groupByCategory = true } = options;
328
- let output = '';
329
- // Calculate metrics from issues
330
- const issues = result.reviewSummary.issues;
331
- const totalIssues = (0, reviewer_1.calculateTotalIssues)(issues);
332
- const criticalIssues = (0, reviewer_1.calculateCriticalIssues)(issues);
333
- // Header with summary
334
- output += `# Visor Analysis Results\n\n`;
335
- output += `## Summary\n\n`;
336
- output += `| Metric | Value |\n`;
337
- output += `|--------|-------|\n`;
338
- output += `| Total Issues | ${totalIssues} |\n`;
339
- output += `| Critical Issues | ${criticalIssues} |\n`;
340
- output += `| Files Analyzed | ${result.repositoryInfo.files.length} |\n`;
341
- output += `| Execution Time | ${result.executionTime}ms |\n`;
342
- output += `| Checks Executed | ${result.checksExecuted.join(', ')} |\n\n`;
343
- // Repository info
344
- output += `## Repository Information\n\n`;
345
- output += `- **Title**: ${result.repositoryInfo.title}\n`;
346
- output += `- **Author**: ${result.repositoryInfo.author}\n`;
347
- output += `- **Branch**: ${result.repositoryInfo.head} ← ${result.repositoryInfo.base}\n`;
348
- output += `- **Working Directory**: \`${result.repositoryInfo.workingDirectory}\`\n`;
349
- output += `- **Changes**: +${result.repositoryInfo.totalAdditions}/-${result.repositoryInfo.totalDeletions}\n\n`;
350
- // Issues
351
- if ((issues || []).length > 0) {
352
- if (groupByCategory) {
353
- const groupedComments = this.groupCommentsByCategory((0, reviewer_1.convertIssuesToComments)(issues || []));
354
- for (const [category, comments] of Object.entries(groupedComments)) {
355
- if (comments.length === 0)
356
- continue;
357
- const issueCount = comments.length;
358
- output += `## ${category.charAt(0).toUpperCase() + category.slice(1)} Issues (${issueCount} found)\n\n`;
359
- for (const comment of comments.slice(0, showDetails ? comments.length : 5)) {
360
- // Convert comment back to issue to access suggestion/replacement fields
361
- const issue = (issues || []).find(i => i.file === comment.file && i.line === comment.line);
362
- output += `### \`${comment.file}:${comment.line}\`\n`;
363
- output += `**Severity**: ${comment.severity.toUpperCase()} \n`;
364
- output += `**Message**: ${comment.message} \n`;
365
- // Add suggestion if available
366
- if (issue?.suggestion) {
367
- output += `**Suggestion**: ${issue.suggestion} \n`;
368
- }
369
- // Add replacement code if available
370
- if (issue?.replacement) {
371
- // Determine language from file extension
372
- const ext = comment.file.split('.').pop() || '';
373
- const langMap = {
374
- js: 'javascript',
375
- jsx: 'javascript',
376
- ts: 'typescript',
377
- tsx: 'typescript',
378
- py: 'python',
379
- rb: 'ruby',
380
- go: 'go',
381
- java: 'java',
382
- cpp: 'cpp',
383
- c: 'c',
384
- cs: 'csharp',
385
- php: 'php',
386
- swift: 'swift',
387
- kt: 'kotlin',
388
- rs: 'rust',
389
- sh: 'bash',
390
- yaml: 'yaml',
391
- yml: 'yaml',
392
- json: 'json',
393
- };
394
- const lang = langMap[ext] || '';
395
- output += `\n**Suggested Fix**:\n\`\`\`${lang}\n${issue.replacement}\n\`\`\`\n`;
396
- }
397
- output += '\n';
398
- }
399
- if (!showDetails && comments.length > 5) {
400
- output += `<details>\n`;
401
- output += `<summary>Show ${comments.length - 5} more issues...</summary>\n\n`;
402
- for (const comment of comments.slice(5)) {
403
- // Convert comment back to issue to access suggestion/replacement fields
404
- const issue = (issues || []).find(i => i.file === comment.file && i.line === comment.line);
405
- output += `### \`${comment.file}:${comment.line}\`\n`;
406
- output += `**Severity**: ${comment.severity.toUpperCase()} \n`;
407
- output += `**Message**: ${comment.message} \n`;
408
- // Add suggestion if available
409
- if (issue?.suggestion) {
410
- output += `**Suggestion**: ${issue.suggestion} \n`;
411
- }
412
- // Add replacement code if available
413
- if (issue?.replacement) {
414
- // Determine language from file extension
415
- const ext = comment.file.split('.').pop() || '';
416
- const langMap = {
417
- js: 'javascript',
418
- jsx: 'javascript',
419
- ts: 'typescript',
420
- tsx: 'typescript',
421
- py: 'python',
422
- rb: 'ruby',
423
- go: 'go',
424
- java: 'java',
425
- cpp: 'cpp',
426
- c: 'c',
427
- cs: 'csharp',
428
- php: 'php',
429
- swift: 'swift',
430
- kt: 'kotlin',
431
- rs: 'rust',
432
- sh: 'bash',
433
- yaml: 'yaml',
434
- yml: 'yaml',
435
- json: 'json',
436
- };
437
- const lang = langMap[ext] || '';
438
- output += `\n**Suggested Fix**:\n\`\`\`${lang}\n${issue.replacement}\n\`\`\`\n`;
439
- }
440
- output += '\n';
441
- }
442
- output += `</details>\n\n`;
443
- }
444
- }
445
- }
446
- else {
447
- output += `## All Issues\n\n`;
448
- for (const issue of issues || []) {
449
- output += `### \`${issue.file}:${issue.line}\` (${issue.category})\n`;
450
- output += `**Severity**: ${issue.severity.toUpperCase()} \n`;
451
- output += `**Message**: ${issue.message} \n`;
452
- // Add suggestion if available
453
- if (issue.suggestion) {
454
- output += `**Suggestion**: ${issue.suggestion} \n`;
455
- }
456
- // Add replacement code if available
457
- if (issue.replacement) {
458
- // Determine language from file extension
459
- const ext = issue.file.split('.').pop() || '';
460
- const langMap = {
461
- js: 'javascript',
462
- jsx: 'javascript',
463
- ts: 'typescript',
464
- tsx: 'typescript',
465
- py: 'python',
466
- rb: 'ruby',
467
- go: 'go',
468
- java: 'java',
469
- cpp: 'cpp',
470
- c: 'c',
471
- cs: 'csharp',
472
- php: 'php',
473
- swift: 'swift',
474
- kt: 'kotlin',
475
- rs: 'rust',
476
- sh: 'bash',
477
- yaml: 'yaml',
478
- yml: 'yaml',
479
- json: 'json',
480
- };
481
- const lang = langMap[ext] || '';
482
- output += `\n**Suggested Fix**:\n\`\`\`${lang}\n${issue.replacement}\n\`\`\`\n`;
483
- }
484
- output += '\n';
485
- }
486
- }
487
- }
488
- else {
489
- output += `## No Issues Found\n\n`;
490
- output += `Great job! No issues were detected in the analyzed code.\n\n`;
491
- }
492
- // Suggestions
493
- if ((result.reviewSummary.suggestions || []).length > 0) {
494
- output += `## Recommendations\n\n`;
495
- (result.reviewSummary.suggestions || []).forEach((suggestion, index) => {
496
- output += `${index + 1}. ${suggestion}\n`;
497
- });
498
- output += '\n';
499
- }
500
- // Files (if requested)
501
- if (options.includeFiles && result.repositoryInfo.files.length > 0) {
502
- output += `## Files Changed\n\n`;
503
- output += `| File | Status | Changes |\n`;
504
- output += `|------|--------|---------|\n`;
505
- for (const file of result.repositoryInfo.files) {
506
- const statusEmoji = this.getFileStatusEmoji(file.status);
507
- output += `| \`${file.filename}\` | ${statusEmoji} ${file.status} | +${file.additions}/-${file.deletions} |\n`;
508
- }
509
- output += '\n';
510
- }
511
- // Footer
512
- if (options.includeTimestamp) {
513
- output += `---\n`;
514
- output += `*Generated by Visor at ${result.timestamp}*\n`;
515
- }
516
- return output;
517
- }
518
- static groupCommentsByCategory(comments) {
519
- const grouped = {
520
- security: [],
521
- performance: [],
522
- style: [],
523
- logic: [],
524
- documentation: [],
525
- };
526
- for (const comment of comments) {
527
- if (!grouped[comment.category]) {
528
- grouped[comment.category] = [];
529
- }
530
- grouped[comment.category].push(comment);
531
- }
532
- return grouped;
533
- }
534
- /**
535
- * Convert ReviewIssue to ReviewComment for backward compatibility
536
- */
537
- static issueToComment(issue) {
538
- // If it's already a ReviewComment, return as-is
539
- if ('ruleId' in issue) {
540
- return {
541
- file: issue.file,
542
- line: issue.line,
543
- message: issue.message,
544
- severity: issue.severity,
545
- category: issue.category,
546
- };
547
- }
548
- return issue;
549
- }
550
- /**
551
- * Group issues by category for display
552
- */
553
- static groupIssuesByCategory(issues) {
554
- const grouped = {
555
- security: [],
556
- performance: [],
557
- style: [],
558
- logic: [],
559
- documentation: [],
560
- };
561
- for (const issue of issues) {
562
- const comment = this.issueToComment(issue);
563
- if (!grouped[comment.category]) {
564
- grouped[comment.category] = [];
565
- }
566
- grouped[comment.category].push(comment);
567
- }
568
- return grouped;
569
- }
570
- static formatSeverity(severity) {
571
- const severityMap = {
572
- info: 'INFO',
573
- warning: 'WARNING',
574
- error: 'ERROR',
575
- critical: '🔥 CRITICAL',
576
- };
577
- return severityMap[severity.toLowerCase()] || severity.toUpperCase();
578
- }
579
- static getFileStatusEmoji(status) {
580
- const statusMap = {
581
- added: 'A',
582
- removed: 'D',
583
- modified: 'M',
584
- renamed: 'R',
585
- };
586
- return statusMap[status] || 'U';
587
- }
588
- static getSeverityColor(severity) {
589
- const colorMap = {
590
- critical: 'red',
591
- error: 'red',
592
- warning: 'yellow',
593
- info: 'cyan',
594
- };
595
- return colorMap[severity] || 'white';
596
- }
597
- static truncateText(text, maxLength) {
598
- if (text.length <= maxLength)
599
- return text;
600
- return text.substring(0, maxLength - 3) + '...';
601
- }
602
- static wrapText(text, width) {
603
- if (text.length <= width)
604
- return text;
605
- const words = text.split(' ');
606
- const lines = [];
607
- let currentLine = '';
608
- for (const word of words) {
609
- if (currentLine.length + word.length + 1 <= width) {
610
- currentLine += (currentLine ? ' ' : '') + word;
611
- }
612
- else {
613
- if (currentLine)
614
- lines.push(currentLine);
615
- currentLine = word;
616
- }
617
- }
618
- if (currentLine)
619
- lines.push(currentLine);
620
- return lines.join('\n');
621
- }
622
- }
623
- exports.OutputFormatters = OutputFormatters;
624
- //# sourceMappingURL=output-formatters.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"output-formatters.js","sourceRoot":"","sources":["../src/output-formatters.ts"],"names":[],"mappings":"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"}