@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 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/parsers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAOnF;;GAEG;AACH,cAAM,cAAc;IAClB,OAAO,CAAC,OAAO,CAAqD;IACpE,OAAO,CAAC,SAAS,CAAoD;;IASrE;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI;IAK1E;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,iBAAiB,GAAG,cAAc,GAAG,IAAI;IAkB7D;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAKzD;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE;IAWpD;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO;IAIjD;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAK1C;;OAEG;IACH,qBAAqB,IAAI,iBAAiB,EAAE;IAI5C;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAW3B;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB;IAK9C;;OAEG;IACH,YAAY,IAAI,IAAI;CAIrB;AAGD,eAAO,MAAM,cAAc,gBAAuB,CAAC;AAGnD,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Parser Registry
3
+ * Centralized management of language-specific parsers
4
+ * @version 3.2.0
5
+ */
6
+ import { getLanguageFromPath } from './types.js';
7
+ import { PythonParser } from './pythonParser.js';
8
+ import { GoParser } from './goParser.js';
9
+ import { RustParser } from './rustParser.js';
10
+ import { logger } from '../../utils/logger.js';
11
+ /**
12
+ * Registry for language parsers
13
+ */
14
+ class ParserRegistry {
15
+ parsers = new Map();
16
+ factories = new Map();
17
+ constructor() {
18
+ // Register builtin parsers
19
+ this.registerFactory('python', () => new PythonParser());
20
+ this.registerFactory('go', () => new GoParser());
21
+ this.registerFactory('rust', () => new RustParser());
22
+ }
23
+ /**
24
+ * Register a parser factory for lazy instantiation
25
+ */
26
+ registerFactory(language, factory) {
27
+ this.factories.set(language, factory);
28
+ logger.debug('Registered parser factory', { language });
29
+ }
30
+ /**
31
+ * Get parser for a specific language (lazy instantiation)
32
+ */
33
+ getParser(language) {
34
+ // Check if already instantiated
35
+ if (this.parsers.has(language)) {
36
+ return this.parsers.get(language);
37
+ }
38
+ // Check for factory
39
+ const factory = this.factories.get(language);
40
+ if (factory) {
41
+ const parser = factory();
42
+ this.parsers.set(language, parser);
43
+ logger.debug('Instantiated parser', { language });
44
+ return parser;
45
+ }
46
+ return null;
47
+ }
48
+ /**
49
+ * Get parser for a file path
50
+ */
51
+ getParserForFile(filePath) {
52
+ const language = getLanguageFromPath(filePath);
53
+ return this.getParser(language);
54
+ }
55
+ /**
56
+ * Analyze code using appropriate language parser
57
+ */
58
+ analyze(filePath, code) {
59
+ const parser = this.getParserForFile(filePath);
60
+ if (!parser) {
61
+ logger.debug('No parser available for file', { filePath });
62
+ return [];
63
+ }
64
+ return parser.analyze(code, filePath);
65
+ }
66
+ /**
67
+ * Check if a language is supported
68
+ */
69
+ isSupported(language) {
70
+ return this.factories.has(language);
71
+ }
72
+ /**
73
+ * Check if a file is supported
74
+ */
75
+ isFileSupported(filePath) {
76
+ const language = getLanguageFromPath(filePath);
77
+ return this.isSupported(language);
78
+ }
79
+ /**
80
+ * Get all supported languages
81
+ */
82
+ getSupportedLanguages() {
83
+ return Array.from(this.factories.keys());
84
+ }
85
+ /**
86
+ * Get total rule count across all parsers
87
+ */
88
+ getTotalRuleCount() {
89
+ let total = 0;
90
+ for (const [language] of this.factories) {
91
+ const parser = this.getParser(language);
92
+ if (parser) {
93
+ total += parser.getRules().length;
94
+ }
95
+ }
96
+ return total;
97
+ }
98
+ /**
99
+ * Get rules by language
100
+ */
101
+ getRulesByLanguage(language) {
102
+ const parser = this.getParser(language);
103
+ return parser?.getRules() || [];
104
+ }
105
+ /**
106
+ * Clear all instantiated parsers (for memory management)
107
+ */
108
+ clearParsers() {
109
+ this.parsers.clear();
110
+ logger.debug('Cleared parser instances');
111
+ }
112
+ }
113
+ // Export singleton instance
114
+ export const parserRegistry = new ParserRegistry();
115
+ // Re-export types
116
+ export * from './types.js';
117
+ export { PythonParser, PYTHON_RULES } from './pythonParser.js';
118
+ export { GoParser, GO_RULES } from './goParser.js';
119
+ export { RustParser, RUST_RULES } from './rustParser.js';
120
+ export { BaseLanguageParser } from './baseParser.js';
121
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/parsers/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Python Language Parser
3
+ * Semantic analysis for Python code
4
+ * @version 3.2.0
5
+ */
6
+ import { BaseLanguageParser } from './baseParser.js';
7
+ import type { ParseResult, LanguageRule } from './types.js';
8
+ /**
9
+ * Python-specific parser with semantic rules
10
+ */
11
+ export declare class PythonParser extends BaseLanguageParser {
12
+ readonly language: "python";
13
+ readonly extensions: string[];
14
+ constructor();
15
+ parse(code: string, filePath: string): ParseResult;
16
+ private extractImports;
17
+ private extractFunctions;
18
+ private parseParameters;
19
+ private splitParams;
20
+ private extractClasses;
21
+ private extractVariables;
22
+ }
23
+ /**
24
+ * Python-specific semantic rules
25
+ */
26
+ declare const PYTHON_RULES: LanguageRule[];
27
+ export { PYTHON_RULES };
28
+ //# sourceMappingURL=pythonParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pythonParser.d.ts","sourceRoot":"","sources":["../../../src/services/parsers/pythonParser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EACV,WAAW,EASX,YAAY,EAEb,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,qBAAa,YAAa,SAAQ,kBAAkB;IAClD,QAAQ,CAAC,QAAQ,EAAG,QAAQ,CAAU;IACtC,QAAQ,CAAC,UAAU,WAA2B;;IAO9C,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW;IA0ElD,OAAO,CAAC,cAAc;IA6DtB,OAAO,CAAC,gBAAgB;IAqFxB,OAAO,CAAC,eAAe;IA2BvB,OAAO,CAAC,WAAW;IAqBnB,OAAO,CAAC,cAAc;IA8FtB,OAAO,CAAC,gBAAgB;CAyBzB;AAED;;GAEG;AACH,QAAA,MAAM,YAAY,EAAE,YAAY,EAyS/B,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC"}