@corbat-tech/coding-standards-mcp 1.1.0 → 2.1.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 (41) hide show
  1. package/README.md +253 -110
  2. package/dist/analysis/code-analyzer.d.ts +45 -0
  3. package/dist/analysis/code-analyzer.d.ts.map +1 -0
  4. package/dist/analysis/code-analyzer.js +534 -0
  5. package/dist/analysis/code-analyzer.js.map +1 -0
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +25 -6
  8. package/dist/config.js.map +1 -1
  9. package/dist/logger.d.ts +20 -0
  10. package/dist/logger.d.ts.map +1 -1
  11. package/dist/logger.js +35 -0
  12. package/dist/logger.js.map +1 -1
  13. package/dist/resources.d.ts.map +1 -1
  14. package/dist/resources.js +8 -0
  15. package/dist/resources.js.map +1 -1
  16. package/dist/tools/definitions.d.ts +40 -1
  17. package/dist/tools/definitions.d.ts.map +1 -1
  18. package/dist/tools/definitions.js +68 -10
  19. package/dist/tools/definitions.js.map +1 -1
  20. package/dist/tools/handlers/get-context.d.ts.map +1 -1
  21. package/dist/tools/handlers/get-context.js +115 -0
  22. package/dist/tools/handlers/get-context.js.map +1 -1
  23. package/dist/tools/handlers/index.d.ts +1 -0
  24. package/dist/tools/handlers/index.d.ts.map +1 -1
  25. package/dist/tools/handlers/index.js +1 -0
  26. package/dist/tools/handlers/index.js.map +1 -1
  27. package/dist/tools/handlers/validate.d.ts +4 -1
  28. package/dist/tools/handlers/validate.d.ts.map +1 -1
  29. package/dist/tools/handlers/validate.js +37 -42
  30. package/dist/tools/handlers/validate.js.map +1 -1
  31. package/dist/tools/handlers/verify.d.ts +38 -0
  32. package/dist/tools/handlers/verify.d.ts.map +1 -0
  33. package/dist/tools/handlers/verify.js +172 -0
  34. package/dist/tools/handlers/verify.js.map +1 -0
  35. package/dist/tools/index.d.ts.map +1 -1
  36. package/dist/tools/index.js +5 -2
  37. package/dist/tools/index.js.map +1 -1
  38. package/dist/tools.d.ts.map +1 -1
  39. package/dist/tools.js +14 -7
  40. package/dist/tools.js.map +1 -1
  41. package/package.json +1 -1
@@ -0,0 +1,534 @@
1
+ /**
2
+ * Lightweight code analyzer using regex and heuristics.
3
+ * No AST parsing to keep it fast and dependency-free.
4
+ *
5
+ * This module provides real code analysis instead of just returning checklists.
6
+ * It detects anti-patterns, measures code quality metrics, and provides
7
+ * actionable feedback.
8
+ */
9
+ // Anti-patterns to detect with their severity and suggestions
10
+ const ANTI_PATTERNS = [
11
+ // Critical issues
12
+ {
13
+ pattern: /catch\s*\(\s*\w*\s*\)\s*\{\s*\}/g,
14
+ message: 'Empty catch block - errors are silently swallowed',
15
+ rule: 'no-empty-catch',
16
+ type: 'CRITICAL',
17
+ suggestion: 'Handle the error, log it, or rethrow with context',
18
+ },
19
+ {
20
+ pattern: /(password|secret|api_key|apikey|api[-_]?secret|token|credential)\s*[:=]\s*["'][^"']{3,}["']/gi,
21
+ message: 'Potential hardcoded secret detected',
22
+ rule: 'no-hardcoded-secrets',
23
+ type: 'CRITICAL',
24
+ suggestion: 'Use environment variables or a secrets manager',
25
+ },
26
+ {
27
+ pattern: /eval\s*\(/g,
28
+ message: 'eval() is dangerous and can lead to code injection',
29
+ rule: 'no-eval',
30
+ type: 'CRITICAL',
31
+ suggestion: 'Use safer alternatives like JSON.parse() or specific parsers',
32
+ },
33
+ {
34
+ pattern: /innerHTML\s*=/g,
35
+ message: 'innerHTML can lead to XSS vulnerabilities',
36
+ rule: 'no-inner-html',
37
+ type: 'CRITICAL',
38
+ suggestion: 'Use textContent or sanitize HTML before insertion',
39
+ },
40
+ // Warnings
41
+ {
42
+ pattern: /catch\s*\(\s*(Exception|Error|Throwable|any|unknown)\s+\w+\s*\)/gi,
43
+ message: 'Generic exception catch - use specific error types',
44
+ rule: 'no-generic-catch',
45
+ type: 'WARNING',
46
+ suggestion: 'Catch specific error types for proper error handling',
47
+ },
48
+ {
49
+ pattern: /new\s+Date\(\s*\)/g,
50
+ message: 'Hardcoded current time - not testable',
51
+ rule: 'no-hardcoded-time',
52
+ type: 'WARNING',
53
+ suggestion: 'Inject a Clock/TimeProvider for testability',
54
+ },
55
+ {
56
+ pattern: /console\.(log|error|warn|info|debug|trace)\s*\(/g,
57
+ message: 'Console statement found',
58
+ rule: 'no-console',
59
+ type: 'WARNING',
60
+ suggestion: 'Use a proper logging framework in production code',
61
+ },
62
+ {
63
+ pattern: /System\.(out|err)\.(print|println)/g,
64
+ message: 'System.out/err usage - use proper logging',
65
+ rule: 'no-system-out',
66
+ type: 'WARNING',
67
+ suggestion: 'Use SLF4J, Log4j, or another logging framework',
68
+ },
69
+ {
70
+ pattern: /@Autowired\s+(private|protected)/g,
71
+ message: 'Field injection - harder to test',
72
+ rule: 'no-field-injection',
73
+ type: 'WARNING',
74
+ suggestion: 'Use constructor injection instead',
75
+ },
76
+ {
77
+ pattern: /:\s*any\b(?!\s*\()/g,
78
+ message: 'TypeScript "any" type - loses type safety',
79
+ rule: 'no-any-type',
80
+ type: 'WARNING',
81
+ suggestion: 'Use specific types or unknown with type guards',
82
+ },
83
+ {
84
+ pattern: /==(?!=)/g,
85
+ message: 'Loose equality operator',
86
+ rule: 'strict-equality',
87
+ type: 'WARNING',
88
+ suggestion: 'Use === for strict comparison',
89
+ },
90
+ {
91
+ pattern: /!=(?!=)/g,
92
+ message: 'Loose inequality operator',
93
+ rule: 'strict-inequality',
94
+ type: 'WARNING',
95
+ suggestion: 'Use !== for strict comparison',
96
+ },
97
+ {
98
+ pattern: /public\s+\w+\s+\w+\s*;(?!\s*\/\/.*final|static)/g,
99
+ message: 'Public mutable field - breaks encapsulation',
100
+ rule: 'no-public-fields',
101
+ type: 'WARNING',
102
+ suggestion: 'Use private fields with getters/setters or records',
103
+ },
104
+ {
105
+ pattern: /throw\s+new\s+(Error|Exception)\s*\(\s*["'][^"']*["']\s*\)/g,
106
+ message: 'Generic error thrown - use custom error types',
107
+ rule: 'no-generic-throw',
108
+ type: 'WARNING',
109
+ suggestion: 'Create specific error classes for different failure modes',
110
+ },
111
+ {
112
+ pattern: /\.then\s*\([^)]*\)\s*(?!\.catch|\.finally)/g,
113
+ message: 'Promise without error handling',
114
+ rule: 'unhandled-promise',
115
+ type: 'WARNING',
116
+ suggestion: 'Add .catch() or use try/catch with async/await',
117
+ },
118
+ {
119
+ pattern: /setTimeout\s*\(\s*[^,]+,\s*0\s*\)/g,
120
+ message: 'setTimeout with 0ms - likely a hack',
121
+ rule: 'no-settimeout-zero',
122
+ type: 'WARNING',
123
+ suggestion: 'Use queueMicrotask() or review the async flow',
124
+ },
125
+ {
126
+ pattern: /magic\s*number|[^a-zA-Z](?:86400|3600|60000|1000)\b/gi,
127
+ message: 'Magic number detected - use named constants',
128
+ rule: 'no-magic-numbers',
129
+ type: 'WARNING',
130
+ suggestion: 'Extract to named constants (e.g., SECONDS_PER_DAY)',
131
+ },
132
+ // Info
133
+ {
134
+ pattern: /TODO|FIXME|HACK|XXX|BUG/g,
135
+ message: 'Unresolved TODO/FIXME comment',
136
+ rule: 'no-todo',
137
+ type: 'INFO',
138
+ suggestion: 'Track these in an issue tracker instead',
139
+ },
140
+ {
141
+ pattern: /@deprecated/gi,
142
+ message: 'Deprecated code usage',
143
+ rule: 'deprecated-usage',
144
+ type: 'INFO',
145
+ suggestion: 'Update to use the recommended alternative',
146
+ },
147
+ {
148
+ pattern: /\bvar\s+/g,
149
+ message: '"var" keyword used',
150
+ rule: 'no-var',
151
+ type: 'INFO',
152
+ suggestion: 'Use const or let instead for better scoping',
153
+ },
154
+ ];
155
+ // Good practices to detect (presence = positive contribution to score)
156
+ const GOOD_PRACTICES = [
157
+ { pattern: /interface\s+\w+/g, name: 'interfaces', weight: 10 },
158
+ { pattern: /type\s+\w+\s*=/g, name: 'type_aliases', weight: 5 },
159
+ { pattern: /@Test|describe\s*\(|it\s*\(|test\s*\(|#\[test\]/g, name: 'tests', weight: 15 },
160
+ { pattern: /class\s+\w*Error|class\s+\w*Exception|struct\s+\w*Error/g, name: 'custom_errors', weight: 10 },
161
+ { pattern: /constructor\s*\([^)]*(?:private|readonly|protected)/g, name: 'constructor_injection', weight: 10 },
162
+ { pattern: /implements\s+\w+/g, name: 'implements_interface', weight: 8 },
163
+ { pattern: /readonly\s+|final\s+|const\s+\w+:/g, name: 'immutability', weight: 5 },
164
+ { pattern: /@Injectable|@Service|@Component|@Repository/g, name: 'di_annotations', weight: 5 },
165
+ { pattern: /async\s+\w+|Promise\s*</g, name: 'async_handling', weight: 3 },
166
+ { pattern: /expect\s*\(|assert|should\.|toBe|toEqual|toHaveBeenCalled/g, name: 'assertions', weight: 5 },
167
+ { pattern: /@BeforeEach|@AfterEach|beforeEach|afterEach|setUp|tearDown/g, name: 'test_setup', weight: 3 },
168
+ { pattern: /private\s+readonly|private\s+final/g, name: 'encapsulation', weight: 5 },
169
+ { pattern: /Result<|Either<|Option<|Maybe</g, name: 'result_types', weight: 8 },
170
+ { pattern: /\.map\s*\(|\.filter\s*\(|\.reduce\s*\(/g, name: 'functional_style', weight: 3 },
171
+ ];
172
+ /** Maximum allowed code size in characters (1MB) */
173
+ const MAX_CODE_SIZE = 1_000_000;
174
+ /**
175
+ * Analyze code and return issues, metrics, and score.
176
+ * @throws Error if code exceeds MAX_CODE_SIZE
177
+ */
178
+ export function analyzeCode(code) {
179
+ if (code.length > MAX_CODE_SIZE) {
180
+ throw new Error(`Code input exceeds maximum size of ${MAX_CODE_SIZE} characters`);
181
+ }
182
+ const lines = code.split('\n');
183
+ const issues = [];
184
+ // 1. Detect anti-patterns
185
+ for (const ap of ANTI_PATTERNS) {
186
+ const regex = new RegExp(ap.pattern.source, ap.pattern.flags);
187
+ let match = regex.exec(code);
188
+ while (match !== null) {
189
+ const lineNum = code.substring(0, match.index).split('\n').length;
190
+ // Avoid duplicate issues at the same line for the same rule
191
+ const existingIssue = issues.find((i) => i.rule === ap.rule && i.line === lineNum);
192
+ if (!existingIssue) {
193
+ issues.push({
194
+ type: ap.type,
195
+ rule: ap.rule,
196
+ message: ap.message,
197
+ line: lineNum,
198
+ suggestion: ap.suggestion,
199
+ });
200
+ }
201
+ match = regex.exec(code);
202
+ }
203
+ }
204
+ // 2. Analyze method/class lengths
205
+ const methodLengths = analyzeMethodLengths(code);
206
+ const classLengths = analyzeClassLengths(code);
207
+ for (const method of methodLengths) {
208
+ if (method.lines > 20) {
209
+ issues.push({
210
+ type: 'WARNING',
211
+ rule: 'max-method-lines',
212
+ message: `Method "${method.name}" is ${method.lines} lines (max: 20)`,
213
+ line: method.startLine,
214
+ suggestion: 'Extract smaller methods with single responsibilities',
215
+ });
216
+ }
217
+ }
218
+ for (const cls of classLengths) {
219
+ if (cls.lines > 200) {
220
+ issues.push({
221
+ type: 'WARNING',
222
+ rule: 'max-class-lines',
223
+ message: `Class "${cls.name}" is ${cls.lines} lines (max: 200)`,
224
+ line: cls.startLine,
225
+ suggestion: 'Split into smaller, focused classes',
226
+ });
227
+ }
228
+ }
229
+ // 3. Check for missing tests
230
+ const hasImplementation = /class\s+\w+|function\s+\w+|const\s+\w+\s*=\s*(?:async\s*)?\(/.test(code);
231
+ const hasTests = /@Test|describe\s*\(|it\s*\(|test\s*\(|#\[test\]/.test(code);
232
+ if (hasImplementation && !hasTests) {
233
+ issues.push({
234
+ type: 'CRITICAL',
235
+ rule: 'missing-tests',
236
+ message: 'No tests found - TDD requires tests before implementation',
237
+ suggestion: 'Write tests first, then implement to make them pass',
238
+ });
239
+ }
240
+ // 4. Check for missing interfaces (DI)
241
+ const hasClasses = /class\s+\w+/.test(code);
242
+ const hasInterfaces = /interface\s+\w+|type\s+\w+\s*=/.test(code);
243
+ if (hasClasses && !hasInterfaces) {
244
+ issues.push({
245
+ type: 'WARNING',
246
+ rule: 'missing-interfaces',
247
+ message: 'No interfaces found - use interfaces for dependency injection',
248
+ suggestion: 'Define interfaces for services and repositories to enable testing and flexibility',
249
+ });
250
+ }
251
+ // 5. Calculate metrics
252
+ const metrics = calculateMetrics(code, lines, methodLengths, classLengths);
253
+ // 6. Calculate score
254
+ const score = calculateScore(code, issues);
255
+ // 7. Generate summary
256
+ const summary = generateSummary(issues, score);
257
+ // 8. Determine if passed
258
+ const criticalCount = issues.filter((i) => i.type === 'CRITICAL').length;
259
+ const passed = criticalCount === 0 && score >= 60;
260
+ return { issues, score, summary, metrics, passed };
261
+ }
262
+ /**
263
+ * Analyze method lengths in the code.
264
+ */
265
+ function analyzeMethodLengths(code) {
266
+ const results = [];
267
+ const lines = code.split('\n');
268
+ // Patterns for method/function declarations in various languages
269
+ const methodPatterns = [
270
+ // TypeScript/JavaScript: function name(), async function name(), name() {, async name() {
271
+ /(?:export\s+)?(?:async\s+)?function\s+(\w+)\s*\(/g,
272
+ // Method in class: public/private/protected name() or async name()
273
+ /(?:public|private|protected)\s+(?:static\s+)?(?:async\s+)?(\w+)\s*\([^)]*\)\s*(?::\s*[\w<>[\]|,\s]+)?\s*\{/g,
274
+ // Arrow function assigned to const: const name = () => or const name = async () =>
275
+ /(?:const|let)\s+(\w+)\s*=\s*(?:async\s*)?\([^)]*\)\s*(?::\s*[\w<>[\]|,\s]+)?\s*=>/g,
276
+ // Java/Kotlin: public void name(), private String name()
277
+ /(?:public|private|protected)\s+(?:static\s+)?(?:final\s+)?(?:\w+\s+)?(\w+)\s*\([^)]*\)\s*(?:throws\s+[\w,\s]+)?\s*\{/g,
278
+ // Python: def name(
279
+ /def\s+(\w+)\s*\([^)]*\)\s*(?:->\s*[\w[\],\s]+)?\s*:/g,
280
+ // Go: func name( or func (receiver) name(
281
+ /func\s+(?:\([^)]+\)\s+)?(\w+)\s*\([^)]*\)\s*(?:\([^)]*\)|[\w\s*]+)?\s*\{/g,
282
+ // Rust: fn name(
283
+ /fn\s+(\w+)\s*(?:<[^>]+>)?\s*\([^)]*\)\s*(?:->\s*[\w<>]+)?\s*\{/g,
284
+ ];
285
+ for (const pattern of methodPatterns) {
286
+ const regex = new RegExp(pattern.source, pattern.flags);
287
+ let match = regex.exec(code);
288
+ while (match !== null) {
289
+ const startIndex = match.index;
290
+ const startLine = code.substring(0, startIndex).split('\n').length;
291
+ const methodName = match[1] || 'anonymous';
292
+ // Skip if we already have this method (avoid duplicates from overlapping patterns)
293
+ if (results.some((r) => r.startLine === startLine)) {
294
+ match = regex.exec(code);
295
+ continue;
296
+ }
297
+ // Count lines until matching closing brace
298
+ let braceCount = 0;
299
+ let endLine = startLine;
300
+ let started = false;
301
+ for (let i = startLine - 1; i < lines.length; i++) {
302
+ const line = lines[i];
303
+ // Count braces (simple approach, doesn't handle strings/comments perfectly)
304
+ for (const char of line) {
305
+ if (char === '{') {
306
+ braceCount++;
307
+ started = true;
308
+ }
309
+ if (char === '}')
310
+ braceCount--;
311
+ }
312
+ if (started && braceCount === 0) {
313
+ endLine = i + 1;
314
+ break;
315
+ }
316
+ }
317
+ const methodLines = endLine - startLine + 1;
318
+ if (methodLines > 1) {
319
+ // Only count if it's a real method, not just a declaration
320
+ results.push({
321
+ name: methodName,
322
+ lines: methodLines,
323
+ startLine,
324
+ });
325
+ }
326
+ match = regex.exec(code);
327
+ }
328
+ }
329
+ return results;
330
+ }
331
+ /**
332
+ * Analyze class lengths in the code.
333
+ */
334
+ function analyzeClassLengths(code) {
335
+ const results = [];
336
+ const lines = code.split('\n');
337
+ // Pattern for class declarations
338
+ const classPattern = /(?:export\s+)?(?:abstract\s+)?class\s+(\w+)(?:\s+extends\s+\w+)?(?:\s+implements\s+[\w,\s]+)?\s*\{/g;
339
+ let match = classPattern.exec(code);
340
+ while (match !== null) {
341
+ const startIndex = match.index;
342
+ const startLine = code.substring(0, startIndex).split('\n').length;
343
+ const className = match[1];
344
+ let braceCount = 0;
345
+ let endLine = startLine;
346
+ let started = false;
347
+ for (let i = startLine - 1; i < lines.length; i++) {
348
+ const line = lines[i];
349
+ for (const char of line) {
350
+ if (char === '{') {
351
+ braceCount++;
352
+ started = true;
353
+ }
354
+ if (char === '}')
355
+ braceCount--;
356
+ }
357
+ if (started && braceCount === 0) {
358
+ endLine = i + 1;
359
+ break;
360
+ }
361
+ }
362
+ results.push({
363
+ name: className,
364
+ lines: endLine - startLine + 1,
365
+ startLine,
366
+ });
367
+ match = classPattern.exec(code);
368
+ }
369
+ return results;
370
+ }
371
+ /**
372
+ * Calculate code metrics.
373
+ */
374
+ function calculateMetrics(code, lines, methodLengths, classLengths) {
375
+ // Count comment lines (simple heuristic)
376
+ const commentLines = lines.filter((l) => {
377
+ const trimmed = l.trim();
378
+ return (trimmed.startsWith('//') ||
379
+ trimmed.startsWith('/*') ||
380
+ trimmed.startsWith('*') ||
381
+ trimmed.startsWith('#') ||
382
+ trimmed.startsWith('"""') ||
383
+ trimmed.startsWith("'''"));
384
+ }).length;
385
+ // Count empty lines
386
+ const emptyLines = lines.filter((l) => l.trim() === '').length;
387
+ return {
388
+ totalLines: lines.length,
389
+ codeLines: lines.length - commentLines - emptyLines,
390
+ commentLines,
391
+ methodCount: methodLengths.length,
392
+ classCount: classLengths.length,
393
+ interfaceCount: (code.match(/interface\s+\w+/g) || []).length,
394
+ testCount: (code.match(/@Test|it\s*\(|test\s*\(|describe\s*\(/g) || []).length,
395
+ maxMethodLines: Math.max(...methodLengths.map((m) => m.lines), 0),
396
+ maxClassLines: Math.max(...classLengths.map((c) => c.lines), 0),
397
+ customErrorCount: (code.match(/class\s+\w*Error|class\s+\w*Exception/g) || []).length,
398
+ importCount: (code.match(/^import\s+|^from\s+\w+\s+import/gm) || []).length,
399
+ };
400
+ }
401
+ /**
402
+ * Calculate quality score based on issues and good practices.
403
+ */
404
+ function calculateScore(code, issues) {
405
+ let score = 100;
406
+ // Deduct for issues
407
+ for (const issue of issues) {
408
+ switch (issue.type) {
409
+ case 'CRITICAL':
410
+ score -= 15;
411
+ break;
412
+ case 'WARNING':
413
+ score -= 5;
414
+ break;
415
+ case 'INFO':
416
+ score -= 1;
417
+ break;
418
+ }
419
+ }
420
+ // Add for good practices
421
+ for (const gp of GOOD_PRACTICES) {
422
+ const matches = (code.match(gp.pattern) || []).length;
423
+ if (matches > 0) {
424
+ // Add points but cap at the weight to avoid gaming
425
+ score += Math.min(gp.weight, matches * 2);
426
+ }
427
+ }
428
+ // Normalize score to 0-100 range
429
+ return Math.max(0, Math.min(100, score));
430
+ }
431
+ /**
432
+ * Generate a human-readable summary.
433
+ */
434
+ function generateSummary(issues, score) {
435
+ const criticals = issues.filter((i) => i.type === 'CRITICAL').length;
436
+ const warnings = issues.filter((i) => i.type === 'WARNING').length;
437
+ if (criticals > 0) {
438
+ return `NEEDS WORK: ${criticals} critical issue(s) must be fixed before proceeding`;
439
+ }
440
+ if (warnings > 5) {
441
+ return `ACCEPTABLE: ${warnings} warnings should be addressed to improve quality`;
442
+ }
443
+ if (score >= 85) {
444
+ return `EXCELLENT: Code follows best practices with high quality`;
445
+ }
446
+ if (score >= 70) {
447
+ return `GOOD: Code follows most best practices`;
448
+ }
449
+ if (score >= 60) {
450
+ return `FAIR: Some improvements recommended`;
451
+ }
452
+ return `NEEDS IMPROVEMENT: Multiple issues detected that should be addressed`;
453
+ }
454
+ /**
455
+ * Format analysis result as markdown.
456
+ */
457
+ export function formatAnalysisAsMarkdown(result) {
458
+ const lines = [];
459
+ // Header with summary
460
+ const statusEmoji = result.passed ? '✅' : '❌';
461
+ lines.push(`# ${statusEmoji} Code Analysis Results`, '');
462
+ lines.push(`**${result.summary}**`, '');
463
+ lines.push(`**Score: ${result.score}/100**`, '');
464
+ lines.push('');
465
+ // Metrics section
466
+ lines.push('---', '', '## Metrics', '');
467
+ lines.push(`| Metric | Value |`);
468
+ lines.push(`|--------|-------|`);
469
+ lines.push(`| Total Lines | ${result.metrics.totalLines} |`);
470
+ lines.push(`| Code Lines | ${result.metrics.codeLines} |`);
471
+ lines.push(`| Methods | ${result.metrics.methodCount} |`);
472
+ lines.push(`| Classes | ${result.metrics.classCount} |`);
473
+ lines.push(`| Interfaces | ${result.metrics.interfaceCount} |`);
474
+ lines.push(`| Tests | ${result.metrics.testCount} |`);
475
+ lines.push(`| Custom Errors | ${result.metrics.customErrorCount} |`);
476
+ lines.push(`| Max Method Lines | ${result.metrics.maxMethodLines} |`);
477
+ lines.push(`| Max Class Lines | ${result.metrics.maxClassLines} |`);
478
+ lines.push('');
479
+ // Issues by type
480
+ const criticals = result.issues.filter((i) => i.type === 'CRITICAL');
481
+ const warnings = result.issues.filter((i) => i.type === 'WARNING');
482
+ const infos = result.issues.filter((i) => i.type === 'INFO');
483
+ if (criticals.length > 0) {
484
+ lines.push('---', '', '## CRITICAL Issues (must fix)', '');
485
+ for (const issue of criticals) {
486
+ lines.push(`- **Line ${issue.line || '?'}:** ${issue.message}`);
487
+ if (issue.suggestion) {
488
+ lines.push(` - Suggestion: ${issue.suggestion}`);
489
+ }
490
+ }
491
+ lines.push('');
492
+ }
493
+ if (warnings.length > 0) {
494
+ lines.push('---', '', '## Warnings (should fix)', '');
495
+ for (const issue of warnings) {
496
+ lines.push(`- **Line ${issue.line || '?'}:** ${issue.message}`);
497
+ if (issue.suggestion) {
498
+ lines.push(` - Suggestion: ${issue.suggestion}`);
499
+ }
500
+ }
501
+ lines.push('');
502
+ }
503
+ if (infos.length > 0) {
504
+ lines.push('---', '', '## Info', '');
505
+ for (const issue of infos) {
506
+ lines.push(`- Line ${issue.line || '?'}: ${issue.message}`);
507
+ }
508
+ lines.push('');
509
+ }
510
+ // Required actions
511
+ lines.push('---', '', '## Required Actions', '');
512
+ if (criticals.length > 0) {
513
+ lines.push(`1. Fix ${criticals.length} critical issue(s) - these are blocking`);
514
+ }
515
+ if (warnings.length > 3) {
516
+ lines.push(`2. Address ${warnings.length} warnings to improve maintainability`);
517
+ }
518
+ if (result.metrics.testCount === 0) {
519
+ lines.push('3. Add tests - TDD requires tests before implementation');
520
+ }
521
+ if (result.metrics.interfaceCount === 0 && result.metrics.classCount > 0) {
522
+ lines.push('4. Add interfaces for dependency injection');
523
+ }
524
+ if (result.passed) {
525
+ lines.push('');
526
+ lines.push('**Code meets quality standards. Ready for review.**');
527
+ }
528
+ else {
529
+ lines.push('');
530
+ lines.push('**Fix critical issues before proceeding.**');
531
+ }
532
+ return lines.join('\n');
533
+ }
534
+ //# sourceMappingURL=code-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-analyzer.js","sourceRoot":"","sources":["../../src/analysis/code-analyzer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,YAAY,GAAG,MAAM,CAAC;AAkChE;;GAEG;AACH,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;iBAUhB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAYlD;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAkBnC;AAED,eAAO,MAAM,MAAM;;;;;;;;;;CAAe,CAAC;AAEnC;;GAEG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAE5C;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED;;GAEG;AACH,wBAAgB,MAAM,IAAI,OAAO,CAEhC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,YAAY,GAAG,MAAM,CAAC;AAkChE;;GAEG;AACH,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;iBAUhB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAkClD;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAgBnC;AAED,eAAO,MAAM,MAAM;;;;;;;;;;CAAe,CAAC;AAEnC;;GAEG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAE5C;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED;;GAEG;AACH,wBAAgB,MAAM,IAAI,OAAO,CAEhC"}
package/dist/config.js CHANGED
@@ -45,17 +45,38 @@ const ConfigSchema = z.object({
45
45
  logLevel: z.enum(['debug', 'info', 'warn', 'error']).default('info'),
46
46
  enableVerboseErrors: z.boolean().default(false),
47
47
  });
48
+ /** Valid log levels for validation */
49
+ const VALID_LOG_LEVELS = ['debug', 'info', 'warn', 'error'];
48
50
  /**
49
51
  * Detect current environment from NODE_ENV or CORBAT_ENV.
52
+ * Case-insensitive comparison for robustness.
50
53
  */
51
54
  function detectEnvironment() {
52
- const env = process.env.CORBAT_ENV || process.env.NODE_ENV || 'development';
55
+ const env = (process.env.CORBAT_ENV || process.env.NODE_ENV || 'development').toLowerCase();
53
56
  if (env === 'production' || env === 'prod')
54
57
  return 'production';
55
58
  if (env === 'test')
56
59
  return 'test';
57
60
  return 'development';
58
61
  }
62
+ /**
63
+ * Safely parse an integer from environment variable with fallback.
64
+ */
65
+ function parseIntWithFallback(value, fallback) {
66
+ if (!value)
67
+ return fallback;
68
+ const parsed = Number.parseInt(value, 10);
69
+ return Number.isNaN(parsed) ? fallback : parsed;
70
+ }
71
+ /**
72
+ * Validate and return log level from environment variable.
73
+ */
74
+ function validateLogLevel(value, fallback) {
75
+ if (!value)
76
+ return fallback;
77
+ const normalized = value.toLowerCase();
78
+ return VALID_LOG_LEVELS.includes(normalized) ? normalized : fallback;
79
+ }
59
80
  /**
60
81
  * Load and validate configuration with environment-specific overrides.
61
82
  */
@@ -68,12 +89,10 @@ export function loadConfig() {
68
89
  standardsDir: process.env.CORBAT_STANDARDS_DIR || join(rootDir, 'standards'),
69
90
  defaultProfile: process.env.CORBAT_DEFAULT_PROFILE || 'java-spring-backend',
70
91
  serverName: 'coding-standards-mcp',
71
- serverVersion: '1.1.0',
92
+ serverVersion: '2.0.0',
72
93
  environment,
73
- cacheTtlMs: process.env.CORBAT_CACHE_TTL_MS
74
- ? Number.parseInt(process.env.CORBAT_CACHE_TTL_MS, 10)
75
- : envConfig.cacheTtlMs,
76
- logLevel: process.env.CORBAT_LOG_LEVEL || envConfig.logLevel,
94
+ cacheTtlMs: parseIntWithFallback(process.env.CORBAT_CACHE_TTL_MS, envConfig.cacheTtlMs ?? 60_000),
95
+ logLevel: validateLogLevel(process.env.CORBAT_LOG_LEVEL, envConfig.logLevel ?? 'info'),
77
96
  enableVerboseErrors: process.env.CORBAT_VERBOSE_ERRORS === 'true' || envConfig.enableVerboseErrors,
78
97
  });
79
98
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}