@stackguide/mcp-server 3.1.0 → 3.2.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 (32) hide show
  1. package/dist/config/types.d.ts +1 -0
  2. package/dist/config/types.d.ts.map +1 -1
  3. package/dist/config/types.js.map +1 -1
  4. package/dist/services/codeAnalyzer.d.ts +5 -1
  5. package/dist/services/codeAnalyzer.d.ts.map +1 -1
  6. package/dist/services/codeAnalyzer.js +39 -2
  7. package/dist/services/codeAnalyzer.js.map +1 -1
  8. package/dist/services/parsers/baseParser.d.ts +44 -0
  9. package/dist/services/parsers/baseParser.d.ts.map +1 -0
  10. package/dist/services/parsers/baseParser.js +177 -0
  11. package/dist/services/parsers/baseParser.js.map +1 -0
  12. package/dist/services/parsers/goParser.d.ts +28 -0
  13. package/dist/services/parsers/goParser.d.ts.map +1 -0
  14. package/dist/services/parsers/goParser.js +590 -0
  15. package/dist/services/parsers/goParser.js.map +1 -0
  16. package/dist/services/parsers/index.d.ts +62 -0
  17. package/dist/services/parsers/index.d.ts.map +1 -0
  18. package/dist/services/parsers/index.js +121 -0
  19. package/dist/services/parsers/index.js.map +1 -0
  20. package/dist/services/parsers/pythonParser.d.ts +28 -0
  21. package/dist/services/parsers/pythonParser.d.ts.map +1 -0
  22. package/dist/services/parsers/pythonParser.js +663 -0
  23. package/dist/services/parsers/pythonParser.js.map +1 -0
  24. package/dist/services/parsers/rustParser.d.ts +28 -0
  25. package/dist/services/parsers/rustParser.d.ts.map +1 -0
  26. package/dist/services/parsers/rustParser.js +654 -0
  27. package/dist/services/parsers/rustParser.js.map +1 -0
  28. package/dist/services/parsers/types.d.ts +241 -0
  29. package/dist/services/parsers/types.d.ts.map +1 -0
  30. package/dist/services/parsers/types.js +47 -0
  31. package/dist/services/parsers/types.js.map +1 -0
  32. package/package.json +1 -1
@@ -0,0 +1,654 @@
1
+ /**
2
+ * Rust Language Parser
3
+ * Semantic analysis for Rust code
4
+ * @version 3.2.0
5
+ */
6
+ import { BaseLanguageParser } from './baseParser.js';
7
+ /**
8
+ * Rust-specific parser with semantic rules
9
+ */
10
+ export class RustParser extends BaseLanguageParser {
11
+ language = 'rust';
12
+ extensions = ['.rs'];
13
+ constructor() {
14
+ super();
15
+ this.rules = RUST_RULES;
16
+ }
17
+ parse(code, filePath) {
18
+ const startTime = Date.now();
19
+ const symbols = [];
20
+ const imports = [];
21
+ const functions = [];
22
+ const classes = []; // Rust uses structs
23
+ const variables = [];
24
+ // Extract components
25
+ imports.push(...this.extractUses(code));
26
+ functions.push(...this.extractFunctions(code));
27
+ classes.push(...this.extractStructs(code));
28
+ variables.push(...this.extractVariables(code));
29
+ // Build symbol list
30
+ for (const imp of imports) {
31
+ symbols.push({
32
+ type: 'import',
33
+ name: imp.module,
34
+ line: imp.line,
35
+ column: 1
36
+ });
37
+ }
38
+ for (const func of functions) {
39
+ symbols.push({
40
+ type: 'function',
41
+ name: func.name,
42
+ line: func.line,
43
+ column: 1,
44
+ modifiers: func.annotations
45
+ });
46
+ }
47
+ for (const cls of classes) {
48
+ symbols.push({
49
+ type: 'struct',
50
+ name: cls.name,
51
+ line: cls.line,
52
+ column: 1
53
+ });
54
+ }
55
+ // Extract traits
56
+ const traitMatches = code.matchAll(/trait\s+(\w+)/g);
57
+ for (const match of traitMatches) {
58
+ const beforeMatch = code.substring(0, match.index);
59
+ const line = beforeMatch.split('\n').length;
60
+ symbols.push({
61
+ type: 'trait',
62
+ name: match[1],
63
+ line,
64
+ column: 1
65
+ });
66
+ }
67
+ // Extract enums
68
+ const enumMatches = code.matchAll(/enum\s+(\w+)/g);
69
+ for (const match of enumMatches) {
70
+ const beforeMatch = code.substring(0, match.index);
71
+ const line = beforeMatch.split('\n').length;
72
+ symbols.push({
73
+ type: 'enum',
74
+ name: match[1],
75
+ line,
76
+ column: 1
77
+ });
78
+ }
79
+ // Extract macros
80
+ const macroMatches = code.matchAll(/macro_rules!\s+(\w+)/g);
81
+ for (const match of macroMatches) {
82
+ const beforeMatch = code.substring(0, match.index);
83
+ const line = beforeMatch.split('\n').length;
84
+ symbols.push({
85
+ type: 'macro',
86
+ name: match[1],
87
+ line,
88
+ column: 1
89
+ });
90
+ }
91
+ const comments = this.extractComments(code, '//', '/*', '*/');
92
+ return {
93
+ language: 'rust',
94
+ filePath,
95
+ symbols,
96
+ imports,
97
+ functions,
98
+ classes,
99
+ variables,
100
+ comments,
101
+ errors: [],
102
+ parseTime: Date.now() - startTime
103
+ };
104
+ }
105
+ extractUses(code) {
106
+ const imports = [];
107
+ // use crate::module::item;
108
+ // use crate::module::{item1, item2};
109
+ // use crate::module::*;
110
+ const useRegex = /use\s+([\w:]+)(?:::\{([^}]+)\}|::(\*)|::(\w+))?;/g;
111
+ let match;
112
+ while ((match = useRegex.exec(code)) !== null) {
113
+ const beforeMatch = code.substring(0, match.index);
114
+ const line = beforeMatch.split('\n').length;
115
+ const module = match[1];
116
+ let items = [];
117
+ if (match[2]) {
118
+ // Multiple items in braces
119
+ items = match[2].split(',').map(s => s.trim());
120
+ }
121
+ else if (match[3]) {
122
+ // Wildcard
123
+ items = ['*'];
124
+ }
125
+ else if (match[4]) {
126
+ // Single item
127
+ items = [match[4]];
128
+ }
129
+ imports.push({
130
+ module,
131
+ items,
132
+ line,
133
+ isRelative: module.startsWith('crate::') || module.startsWith('super::')
134
+ });
135
+ }
136
+ return imports;
137
+ }
138
+ extractFunctions(code) {
139
+ const functions = [];
140
+ const lines = code.split('\n');
141
+ // fn name(params) -> ReturnType { or async fn, pub fn, pub async fn
142
+ const funcRegex = /(pub\s+)?(async\s+)?fn\s+(\w+)(?:<[^>]+>)?\s*\(([^)]*)\)(?:\s*->\s*([^\s{]+))?\s*(?:where[^{]+)?\s*{/g;
143
+ let match;
144
+ while ((match = funcRegex.exec(code)) !== null) {
145
+ const isPublic = !!match[1];
146
+ const isAsync = !!match[2];
147
+ const funcName = match[3];
148
+ const paramsStr = match[4] || '';
149
+ const returnType = match[5];
150
+ const beforeMatch = code.substring(0, match.index);
151
+ const lineNum = beforeMatch.split('\n').length;
152
+ // Find function end by brace matching
153
+ let braceCount = 1;
154
+ let endLine = lineNum;
155
+ const funcStart = match.index + match[0].length;
156
+ for (let i = funcStart; i < code.length && braceCount > 0; i++) {
157
+ if (code[i] === '{')
158
+ braceCount++;
159
+ if (code[i] === '}')
160
+ braceCount--;
161
+ if (braceCount === 0) {
162
+ endLine = code.substring(0, i).split('\n').length;
163
+ }
164
+ }
165
+ // Look for attributes above function
166
+ const annotations = [];
167
+ for (let i = lineNum - 2; i >= 0 && i > lineNum - 10; i--) {
168
+ const prevLine = lines[i]?.trim();
169
+ if (prevLine?.startsWith('#[')) {
170
+ annotations.unshift(prevLine);
171
+ }
172
+ else if (prevLine && !prevLine.startsWith('//')) {
173
+ break;
174
+ }
175
+ }
176
+ // Parse parameters
177
+ const parameters = this.parseRustParams(paramsStr);
178
+ // Calculate complexity
179
+ const bodyCode = lines.slice(lineNum, endLine).join('\n');
180
+ const complexity = this.calculateComplexity(bodyCode);
181
+ // Look for doc comments
182
+ let docstring;
183
+ for (let i = lineNum - 2; i >= 0; i--) {
184
+ const prevLine = lines[i]?.trim();
185
+ if (prevLine?.startsWith('///')) {
186
+ docstring = (docstring ? prevLine.slice(3) + '\n' : '') + docstring;
187
+ }
188
+ else if (prevLine?.startsWith('#[') || prevLine === '') {
189
+ continue;
190
+ }
191
+ else {
192
+ break;
193
+ }
194
+ }
195
+ functions.push({
196
+ name: funcName,
197
+ line: lineNum,
198
+ endLine,
199
+ parameters,
200
+ returnType,
201
+ isAsync,
202
+ isExported: isPublic,
203
+ isPublic,
204
+ annotations,
205
+ docstring,
206
+ complexity,
207
+ bodyLines: endLine - lineNum
208
+ });
209
+ }
210
+ return functions;
211
+ }
212
+ parseRustParams(paramsStr) {
213
+ const params = [];
214
+ if (!paramsStr.trim())
215
+ return params;
216
+ // Split by comma, handling generics
217
+ const paramList = this.splitRustParams(paramsStr);
218
+ for (const param of paramList) {
219
+ const trimmed = param.trim();
220
+ if (!trimmed || trimmed === 'self' || trimmed === '&self' || trimmed === '&mut self')
221
+ continue;
222
+ // name: Type
223
+ const paramMatch = trimmed.match(/^(\w+)\s*:\s*(.+)$/);
224
+ if (paramMatch) {
225
+ const type = paramMatch[2].trim();
226
+ params.push({
227
+ name: paramMatch[1],
228
+ type,
229
+ isOptional: type.startsWith('Option<')
230
+ });
231
+ }
232
+ }
233
+ return params;
234
+ }
235
+ splitRustParams(paramsStr) {
236
+ const params = [];
237
+ let current = '';
238
+ let depth = 0;
239
+ for (const char of paramsStr) {
240
+ if (char === '<' || char === '(' || char === '[' || char === '{')
241
+ depth++;
242
+ if (char === '>' || char === ')' || char === ']' || char === '}')
243
+ depth--;
244
+ if (char === ',' && depth === 0) {
245
+ params.push(current);
246
+ current = '';
247
+ }
248
+ else {
249
+ current += char;
250
+ }
251
+ }
252
+ if (current)
253
+ params.push(current);
254
+ return params;
255
+ }
256
+ extractStructs(code) {
257
+ const structs = [];
258
+ const lines = code.split('\n');
259
+ // pub struct Name { ... } or struct Name { ... }
260
+ const structRegex = /(pub\s+)?struct\s+(\w+)(?:<[^>]+>)?\s*{([^}]*)}/g;
261
+ let match;
262
+ while ((match = structRegex.exec(code)) !== null) {
263
+ const isPublic = !!match[1];
264
+ const structName = match[2];
265
+ const bodyContent = match[3];
266
+ const beforeMatch = code.substring(0, match.index);
267
+ const lineNum = beforeMatch.split('\n').length;
268
+ const endLine = lineNum + bodyContent.split('\n').length;
269
+ // Look for derive macros
270
+ const decorators = [];
271
+ const traits = [];
272
+ for (let i = lineNum - 2; i >= 0 && i > lineNum - 5; i--) {
273
+ const prevLine = lines[i]?.trim();
274
+ if (prevLine?.startsWith('#[derive(')) {
275
+ decorators.push(prevLine);
276
+ const deriveMatch = prevLine.match(/#\[derive\(([^)]+)\)\]/);
277
+ if (deriveMatch) {
278
+ traits.push(...deriveMatch[1].split(',').map(t => t.trim()));
279
+ }
280
+ }
281
+ else if (prevLine?.startsWith('#[')) {
282
+ decorators.push(prevLine);
283
+ }
284
+ else if (!prevLine?.startsWith('//')) {
285
+ break;
286
+ }
287
+ }
288
+ // Parse fields
289
+ const members = [];
290
+ const fieldLines = bodyContent.split('\n');
291
+ for (let i = 0; i < fieldLines.length; i++) {
292
+ const fieldLine = fieldLines[i].trim();
293
+ if (!fieldLine || fieldLine.startsWith('//'))
294
+ continue;
295
+ // pub field: Type, or field: Type,
296
+ const fieldMatch = fieldLine.match(/^(pub\s+)?(\w+)\s*:\s*([^,]+)/);
297
+ if (fieldMatch) {
298
+ members.push({
299
+ name: fieldMatch[2],
300
+ type: 'field',
301
+ dataType: fieldMatch[3].trim(),
302
+ visibility: fieldMatch[1] ? 'public' : 'private',
303
+ line: lineNum + i + 1
304
+ });
305
+ }
306
+ }
307
+ structs.push({
308
+ name: structName,
309
+ line: lineNum,
310
+ endLine,
311
+ members,
312
+ traits,
313
+ decorators,
314
+ isExported: isPublic
315
+ });
316
+ }
317
+ return structs;
318
+ }
319
+ extractVariables(code) {
320
+ const variables = [];
321
+ const lines = code.split('\n');
322
+ // Static and const declarations at module level
323
+ for (let i = 0; i < lines.length; i++) {
324
+ const line = lines[i].trim();
325
+ // const NAME: Type = value; or static NAME: Type = value;
326
+ const constMatch = line.match(/^(pub\s+)?(const|static)\s+(\w+)\s*:\s*(\w+)\s*=\s*(.+);$/);
327
+ if (constMatch) {
328
+ variables.push({
329
+ name: constMatch[3],
330
+ line: i + 1,
331
+ type: constMatch[4],
332
+ isConst: constMatch[2] === 'const',
333
+ scope: 'module',
334
+ value: constMatch[5],
335
+ isExported: !!constMatch[1]
336
+ });
337
+ }
338
+ }
339
+ return variables;
340
+ }
341
+ }
342
+ /**
343
+ * Rust-specific semantic rules
344
+ */
345
+ const RUST_RULES = [
346
+ {
347
+ id: 'RS001',
348
+ name: 'unsafe-block',
349
+ description: 'Unsafe blocks require careful review',
350
+ language: 'rust',
351
+ severity: 'warning',
352
+ category: 'safety',
353
+ enabled: true,
354
+ priority: 95,
355
+ check: (ctx) => {
356
+ const matches = ctx.findPatternMatches(/\bunsafe\s*{/);
357
+ if (matches.length > 0) {
358
+ return {
359
+ hasIssue: true,
360
+ message: `${matches.length} unsafe block(s) found`,
361
+ line: matches[0].line,
362
+ suggestion: 'Document why unsafe is needed and verify memory safety'
363
+ };
364
+ }
365
+ return null;
366
+ }
367
+ },
368
+ {
369
+ id: 'RS002',
370
+ name: 'unwrap-usage',
371
+ description: 'Avoid unwrap() in production code',
372
+ language: 'rust',
373
+ severity: 'warning',
374
+ category: 'error-handling',
375
+ enabled: true,
376
+ priority: 85,
377
+ check: (ctx) => {
378
+ const matches = ctx.findPatternMatches(/\.unwrap\(\)/);
379
+ // Allow in tests
380
+ if (ctx.filePath.includes('test') || ctx.filePath.includes('_test.rs')) {
381
+ return null;
382
+ }
383
+ if (matches.length > 2) { // Allow a few
384
+ return {
385
+ hasIssue: true,
386
+ message: `${matches.length} unwrap() calls - may panic at runtime`,
387
+ line: matches[0].line,
388
+ suggestion: 'Use match, if let, or ? operator for error handling'
389
+ };
390
+ }
391
+ return null;
392
+ }
393
+ },
394
+ {
395
+ id: 'RS003',
396
+ name: 'expect-message',
397
+ description: 'expect() should have descriptive message',
398
+ language: 'rust',
399
+ severity: 'info',
400
+ category: 'error-handling',
401
+ enabled: true,
402
+ priority: 50,
403
+ check: (ctx) => {
404
+ const matches = ctx.findPatternMatches(/\.expect\(\s*""\s*\)/);
405
+ if (matches.length > 0) {
406
+ return {
407
+ hasIssue: true,
408
+ message: 'expect() called with empty message',
409
+ line: matches[0].line,
410
+ suggestion: 'Add descriptive error message to expect()'
411
+ };
412
+ }
413
+ return null;
414
+ }
415
+ },
416
+ {
417
+ id: 'RS004',
418
+ name: 'clone-performance',
419
+ description: 'Excessive clone() calls may impact performance',
420
+ language: 'rust',
421
+ severity: 'info',
422
+ category: 'performance',
423
+ enabled: true,
424
+ priority: 40,
425
+ check: (ctx) => {
426
+ const matches = ctx.findPatternMatches(/\.clone\(\)/);
427
+ if (matches.length > 5) {
428
+ return {
429
+ hasIssue: true,
430
+ message: `${matches.length} clone() calls found`,
431
+ line: matches[0].line,
432
+ suggestion: 'Consider using references or Rc/Arc to reduce cloning'
433
+ };
434
+ }
435
+ return null;
436
+ }
437
+ },
438
+ {
439
+ id: 'RS005',
440
+ name: 'missing-derive',
441
+ description: 'Struct might benefit from common derives',
442
+ language: 'rust',
443
+ severity: 'info',
444
+ category: 'best-practices',
445
+ enabled: true,
446
+ priority: 30,
447
+ check: (ctx) => {
448
+ for (const cls of ctx.classes) {
449
+ if (cls.isExported && (!cls.traits || cls.traits.length === 0)) {
450
+ return {
451
+ hasIssue: true,
452
+ message: `Struct '${cls.name}' has no derive macros`,
453
+ line: cls.line,
454
+ suggestion: 'Consider adding #[derive(Debug, Clone)] or other common derives'
455
+ };
456
+ }
457
+ }
458
+ return null;
459
+ }
460
+ },
461
+ {
462
+ id: 'RS006',
463
+ name: 'panic-in-lib',
464
+ description: 'Avoid panic! in library code',
465
+ language: 'rust',
466
+ severity: 'warning',
467
+ category: 'error-handling',
468
+ enabled: true,
469
+ priority: 80,
470
+ check: (ctx) => {
471
+ // Skip if it's a binary crate
472
+ if (ctx.filePath.includes('main.rs')) {
473
+ return null;
474
+ }
475
+ const panics = ctx.findPatternMatches(/\bpanic!\s*\(/);
476
+ const unreachable = ctx.findPatternMatches(/\bunreachable!\s*\(/);
477
+ const unimplemented = ctx.findPatternMatches(/\bunimplemented!\s*\(/);
478
+ const todo = ctx.findPatternMatches(/\btodo!\s*\(/);
479
+ const total = panics.length + unreachable.length + unimplemented.length + todo.length;
480
+ if (total > 0) {
481
+ const first = panics[0] || unreachable[0] || unimplemented[0] || todo[0];
482
+ return {
483
+ hasIssue: true,
484
+ message: `${total} panic/unreachable/unimplemented/todo! macro(s) in library code`,
485
+ line: first.line,
486
+ suggestion: 'Return Result<T, E> instead of panicking'
487
+ };
488
+ }
489
+ return null;
490
+ }
491
+ },
492
+ {
493
+ id: 'RS007',
494
+ name: 'string-concat-loop',
495
+ description: 'String concatenation in loop is inefficient',
496
+ language: 'rust',
497
+ severity: 'warning',
498
+ category: 'performance',
499
+ enabled: true,
500
+ priority: 70,
501
+ check: (ctx) => {
502
+ // Look for String + or += in loops
503
+ const loopPatterns = ctx.findPatternMatches(/for\s+\w+\s+in[^{]+{[^}]*\+=/);
504
+ if (loopPatterns.length > 0) {
505
+ // Check if it's string concatenation
506
+ const content = ctx.getLine(loopPatterns[0].line);
507
+ if (content.includes('String') || content.includes('"')) {
508
+ return {
509
+ hasIssue: true,
510
+ message: 'String concatenation in loop detected',
511
+ line: loopPatterns[0].line,
512
+ suggestion: 'Use String::with_capacity() or collect() for better performance'
513
+ };
514
+ }
515
+ }
516
+ return null;
517
+ }
518
+ },
519
+ {
520
+ id: 'RS008',
521
+ name: 'box-unnecessary',
522
+ description: 'Box might be unnecessary for small types',
523
+ language: 'rust',
524
+ severity: 'info',
525
+ category: 'performance',
526
+ enabled: true,
527
+ priority: 30,
528
+ check: (ctx) => {
529
+ const boxUsages = ctx.findPatternMatches(/Box::new\(\w+\)/);
530
+ const boxSmall = ctx.findPatternMatches(/Box<(i32|i64|u32|u64|f32|f64|bool|char)>/);
531
+ if (boxSmall.length > 0) {
532
+ return {
533
+ hasIssue: true,
534
+ message: 'Boxing primitive types may be unnecessary',
535
+ line: boxSmall[0].line,
536
+ suggestion: 'Box is mainly useful for recursive types or trait objects'
537
+ };
538
+ }
539
+ return null;
540
+ }
541
+ },
542
+ {
543
+ id: 'RS009',
544
+ name: 'dead-code-allow',
545
+ description: 'Excessive dead code allowances',
546
+ language: 'rust',
547
+ severity: 'info',
548
+ category: 'code-quality',
549
+ enabled: true,
550
+ priority: 30,
551
+ check: (ctx) => {
552
+ const deadCodeAllows = ctx.findPatternMatches(/#\[allow\(dead_code\)\]/);
553
+ if (deadCodeAllows.length > 3) {
554
+ return {
555
+ hasIssue: true,
556
+ message: `${deadCodeAllows.length} dead_code allow attributes`,
557
+ line: deadCodeAllows[0].line,
558
+ suggestion: 'Remove unused code instead of suppressing warnings'
559
+ };
560
+ }
561
+ return null;
562
+ }
563
+ },
564
+ {
565
+ id: 'RS010',
566
+ name: 'mutex-lock-guard',
567
+ description: 'Lock guard might be held across await',
568
+ language: 'rust',
569
+ severity: 'error',
570
+ category: 'concurrency',
571
+ enabled: true,
572
+ priority: 95,
573
+ check: (ctx) => {
574
+ for (const func of ctx.functions) {
575
+ if (func.isAsync) {
576
+ const startLine = func.line;
577
+ const endLine = func.endLine || startLine + 50;
578
+ const body = ctx.getLines(startLine, endLine).join('\n');
579
+ // Check for lock().await pattern
580
+ if (body.includes('.lock()') && body.includes('.await')) {
581
+ return {
582
+ hasIssue: true,
583
+ message: `Mutex lock held across await in '${func.name}'`,
584
+ line: func.line,
585
+ details: 'This can cause deadlocks with non-async Mutex',
586
+ suggestion: 'Use tokio::sync::Mutex for async code or restructure'
587
+ };
588
+ }
589
+ }
590
+ }
591
+ return null;
592
+ }
593
+ },
594
+ {
595
+ id: 'RS011',
596
+ name: 'complex-generic',
597
+ description: 'Generic bounds are too complex',
598
+ language: 'rust',
599
+ severity: 'info',
600
+ category: 'maintainability',
601
+ enabled: true,
602
+ priority: 40,
603
+ check: (ctx) => {
604
+ const whereClausesMatch = ctx.findPatternMatches(/where\s+[^{]+{/);
605
+ for (const match of whereClausesMatch) {
606
+ const clauseContent = match.match;
607
+ const boundCount = (clauseContent.match(/:/g) || []).length;
608
+ if (boundCount > 5) {
609
+ return {
610
+ hasIssue: true,
611
+ message: 'Complex generic bounds in where clause',
612
+ line: match.line,
613
+ suggestion: 'Consider creating type aliases or trait aliases for clarity'
614
+ };
615
+ }
616
+ }
617
+ return null;
618
+ }
619
+ },
620
+ {
621
+ id: 'RS012',
622
+ name: 'missing-error-type',
623
+ description: 'Consider using custom error type',
624
+ language: 'rust',
625
+ severity: 'info',
626
+ category: 'api-design',
627
+ enabled: true,
628
+ priority: 40,
629
+ check: (ctx) => {
630
+ // Check for many different error types in Returns
631
+ const stringErrors = ctx.findPatternMatches(/Result<[^,]+,\s*String>/);
632
+ const boxErrors = ctx.findPatternMatches(/Result<[^,]+,\s*Box<dyn\s+std::error::Error/);
633
+ if (stringErrors.length > 3) {
634
+ return {
635
+ hasIssue: true,
636
+ message: 'Multiple functions return Result<T, String>',
637
+ line: stringErrors[0].line,
638
+ suggestion: 'Define a custom error type for better error handling'
639
+ };
640
+ }
641
+ if (boxErrors.length > 3) {
642
+ return {
643
+ hasIssue: true,
644
+ message: 'Multiple functions use Box<dyn Error>',
645
+ line: boxErrors[0].line,
646
+ suggestion: 'Consider using thiserror or anyhow for error handling'
647
+ };
648
+ }
649
+ return null;
650
+ }
651
+ }
652
+ ];
653
+ export { RUST_RULES };
654
+ //# sourceMappingURL=rustParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rustParser.js","sourceRoot":"","sources":["../../../src/services/parsers/rustParser.ts"],"names":[],"mappings":"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"}