@stackguide/mcp-server 3.3.0 → 3.8.2

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 (137) hide show
  1. package/README.md +259 -10
  2. package/dist/config/persistence.d.ts +16 -0
  3. package/dist/config/persistence.d.ts.map +1 -1
  4. package/dist/config/persistence.js +53 -0
  5. package/dist/config/persistence.js.map +1 -1
  6. package/dist/handlers/config.d.ts +1 -8
  7. package/dist/handlers/config.d.ts.map +1 -1
  8. package/dist/handlers/config.js +7 -1
  9. package/dist/handlers/config.js.map +1 -1
  10. package/dist/handlers/context.d.ts +1 -5
  11. package/dist/handlers/context.d.ts.map +1 -1
  12. package/dist/handlers/context.js +7 -1
  13. package/dist/handlers/context.js.map +1 -1
  14. package/dist/handlers/cursor.d.ts +1 -7
  15. package/dist/handlers/cursor.d.ts.map +1 -1
  16. package/dist/handlers/cursor.js +7 -1
  17. package/dist/handlers/cursor.js.map +1 -1
  18. package/dist/handlers/custom-rule.d.ts +1 -11
  19. package/dist/handlers/custom-rule.d.ts.map +1 -1
  20. package/dist/handlers/custom-rule.js +7 -1
  21. package/dist/handlers/custom-rule.js.map +1 -1
  22. package/dist/handlers/docs.d.ts +1 -8
  23. package/dist/handlers/docs.d.ts.map +1 -1
  24. package/dist/handlers/docs.js +7 -1
  25. package/dist/handlers/docs.js.map +1 -1
  26. package/dist/handlers/generate.d.ts +1 -13
  27. package/dist/handlers/generate.d.ts.map +1 -1
  28. package/dist/handlers/generate.js +6 -3
  29. package/dist/handlers/generate.js.map +1 -1
  30. package/dist/handlers/health.d.ts +1 -8
  31. package/dist/handlers/health.d.ts.map +1 -1
  32. package/dist/handlers/health.js +11 -3
  33. package/dist/handlers/health.js.map +1 -1
  34. package/dist/handlers/help.d.ts +1 -5
  35. package/dist/handlers/help.d.ts.map +1 -1
  36. package/dist/handlers/help.js +7 -1
  37. package/dist/handlers/help.js.map +1 -1
  38. package/dist/handlers/knowledge.d.ts +1 -8
  39. package/dist/handlers/knowledge.d.ts.map +1 -1
  40. package/dist/handlers/knowledge.js +7 -1
  41. package/dist/handlers/knowledge.js.map +1 -1
  42. package/dist/handlers/prompts.d.ts +31 -0
  43. package/dist/handlers/prompts.d.ts.map +1 -0
  44. package/dist/handlers/prompts.js +236 -0
  45. package/dist/handlers/prompts.js.map +1 -0
  46. package/dist/handlers/resources.d.ts +27 -0
  47. package/dist/handlers/resources.d.ts.map +1 -0
  48. package/dist/handlers/resources.js +210 -0
  49. package/dist/handlers/resources.js.map +1 -0
  50. package/dist/handlers/review.d.ts.map +1 -1
  51. package/dist/handlers/review.js +45 -4
  52. package/dist/handlers/review.js.map +1 -1
  53. package/dist/handlers/rules.d.ts +1 -9
  54. package/dist/handlers/rules.d.ts.map +1 -1
  55. package/dist/handlers/rules.js +7 -1
  56. package/dist/handlers/rules.js.map +1 -1
  57. package/dist/index.d.ts +4 -2
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +29 -419
  60. package/dist/index.js.map +1 -1
  61. package/dist/router/index.d.ts +69 -0
  62. package/dist/router/index.d.ts.map +1 -0
  63. package/dist/router/index.js +151 -0
  64. package/dist/router/index.js.map +1 -0
  65. package/dist/services/ast/analyzer.d.ts +55 -0
  66. package/dist/services/ast/analyzer.d.ts.map +1 -0
  67. package/dist/services/ast/analyzer.js +268 -0
  68. package/dist/services/ast/analyzer.js.map +1 -0
  69. package/dist/services/ast/index.d.ts +10 -0
  70. package/dist/services/ast/index.d.ts.map +1 -0
  71. package/dist/services/ast/index.js +12 -0
  72. package/dist/services/ast/index.js.map +1 -0
  73. package/dist/services/ast/rules.d.ts +13 -0
  74. package/dist/services/ast/rules.d.ts.map +1 -0
  75. package/dist/services/ast/rules.js +358 -0
  76. package/dist/services/ast/rules.js.map +1 -0
  77. package/dist/services/ast/treeSitterParser.d.ts +54 -0
  78. package/dist/services/ast/treeSitterParser.d.ts.map +1 -0
  79. package/dist/services/ast/treeSitterParser.js +394 -0
  80. package/dist/services/ast/treeSitterParser.js.map +1 -0
  81. package/dist/services/ast/types.d.ts +167 -0
  82. package/dist/services/ast/types.d.ts.map +1 -0
  83. package/dist/services/ast/types.js +35 -0
  84. package/dist/services/ast/types.js.map +1 -0
  85. package/dist/services/codeAnalyzer.d.ts.map +1 -1
  86. package/dist/services/codeAnalyzer.js +43 -3
  87. package/dist/services/codeAnalyzer.js.map +1 -1
  88. package/dist/services/httpClient.d.ts +45 -0
  89. package/dist/services/httpClient.d.ts.map +1 -0
  90. package/dist/services/httpClient.js +309 -0
  91. package/dist/services/httpClient.js.map +1 -0
  92. package/dist/services/intelligence/projectFs.d.ts +11 -0
  93. package/dist/services/intelligence/projectFs.d.ts.map +1 -0
  94. package/dist/services/intelligence/projectFs.js +30 -0
  95. package/dist/services/intelligence/projectFs.js.map +1 -0
  96. package/dist/services/projectFs.d.ts +85 -0
  97. package/dist/services/projectFs.d.ts.map +1 -0
  98. package/dist/services/projectFs.js +287 -0
  99. package/dist/services/projectFs.js.map +1 -0
  100. package/dist/services/rulesEngine.d.ts +255 -0
  101. package/dist/services/rulesEngine.d.ts.map +1 -0
  102. package/dist/services/rulesEngine.js +523 -0
  103. package/dist/services/rulesEngine.js.map +1 -0
  104. package/dist/services/webDocumentation.d.ts +11 -0
  105. package/dist/services/webDocumentation.d.ts.map +1 -1
  106. package/dist/services/webDocumentation.js +231 -27
  107. package/dist/services/webDocumentation.js.map +1 -1
  108. package/dist/storage/index.d.ts +7 -0
  109. package/dist/storage/index.d.ts.map +1 -0
  110. package/dist/storage/index.js +7 -0
  111. package/dist/storage/index.js.map +1 -0
  112. package/dist/storage/sqlite.d.ts +92 -0
  113. package/dist/storage/sqlite.d.ts.map +1 -0
  114. package/dist/storage/sqlite.js +471 -0
  115. package/dist/storage/sqlite.js.map +1 -0
  116. package/dist/storage/types.d.ts +147 -0
  117. package/dist/storage/types.d.ts.map +1 -0
  118. package/dist/storage/types.js +13 -0
  119. package/dist/storage/types.js.map +1 -0
  120. package/dist/utils/logger.d.ts +11 -2
  121. package/dist/utils/logger.d.ts.map +1 -1
  122. package/dist/utils/logger.js +30 -2
  123. package/dist/utils/logger.js.map +1 -1
  124. package/dist/utils/safeFetch.d.ts +12 -0
  125. package/dist/utils/safeFetch.d.ts.map +1 -0
  126. package/dist/utils/safeFetch.js +107 -0
  127. package/dist/utils/safeFetch.js.map +1 -0
  128. package/dist/utils/validation.d.ts +1 -1
  129. package/dist/validation/index.d.ts +8 -0
  130. package/dist/validation/index.d.ts.map +1 -0
  131. package/dist/validation/index.js +19 -0
  132. package/dist/validation/index.js.map +1 -0
  133. package/dist/validation/schemas.d.ts +346 -0
  134. package/dist/validation/schemas.d.ts.map +1 -0
  135. package/dist/validation/schemas.js +256 -0
  136. package/dist/validation/schemas.js.map +1 -0
  137. package/package.json +9 -2
@@ -0,0 +1,358 @@
1
+ /**
2
+ * Tree-Sitter AST Rules
3
+ * Semantic analysis rules using tree-sitter pattern matching
4
+ * @version 3.5.0
5
+ */
6
+ // ============================================================================
7
+ // Helper Functions
8
+ // ============================================================================
9
+ function createIssue(ruleId, message, severity, node, options = {}) {
10
+ return {
11
+ ruleId,
12
+ message,
13
+ severity,
14
+ line: node.startPosition.row + 1,
15
+ column: node.startPosition.column + 1,
16
+ suggestion: options.suggestion,
17
+ quickFix: options.quickFix
18
+ };
19
+ }
20
+ function checkMatches(matches, captureName, predicate, createIssueForMatch) {
21
+ const issues = [];
22
+ for (const match of matches) {
23
+ const capture = match.captures.find(c => c.name === captureName);
24
+ if (capture && predicate(capture.node.text)) {
25
+ issues.push(createIssueForMatch(capture.node));
26
+ }
27
+ }
28
+ return issues;
29
+ }
30
+ // ============================================================================
31
+ // TypeScript/JavaScript Rules
32
+ // ============================================================================
33
+ const evalUsageRule = {
34
+ id: 'TS-SEC001',
35
+ name: 'No eval()',
36
+ description: 'Avoid using eval() as it can lead to code injection vulnerabilities',
37
+ category: 'security',
38
+ severity: 'error',
39
+ languages: ['typescript', 'javascript', 'tsx'],
40
+ enabled: true,
41
+ query: '(call_expression function: (identifier) @fn)',
42
+ check: (matches) => checkMatches(matches, 'fn', text => text === 'eval', node => createIssue('TS-SEC001', 'Avoid eval() - code injection vulnerability', 'error', node, {
43
+ suggestion: 'Use JSON.parse() or Function constructor if needed'
44
+ }))
45
+ };
46
+ const innerHTMLRule = {
47
+ id: 'TS-SEC002',
48
+ name: 'No innerHTML',
49
+ description: 'Avoid innerHTML for XSS prevention',
50
+ category: 'security',
51
+ severity: 'warning',
52
+ languages: ['typescript', 'javascript', 'tsx'],
53
+ enabled: true,
54
+ query: '(member_expression property: (property_identifier) @prop)',
55
+ check: (matches) => checkMatches(matches, 'prop', text => text === 'innerHTML', node => createIssue('TS-SEC002', 'Avoid innerHTML - XSS vulnerability', 'warning', node, {
56
+ suggestion: 'Use textContent or DOM manipulation methods'
57
+ }))
58
+ };
59
+ const hardcodedSecretsRule = {
60
+ id: 'TS-SEC003',
61
+ name: 'No hardcoded secrets',
62
+ description: 'Detect hardcoded secrets',
63
+ category: 'security',
64
+ severity: 'error',
65
+ languages: ['typescript', 'javascript', 'tsx', 'python'],
66
+ enabled: true,
67
+ query: '(variable_declarator name: (identifier) @name value: (string) @value)',
68
+ check: (matches) => {
69
+ const issues = [];
70
+ const secretPatterns = /(password|secret|api[_-]?key|token|auth|credential)/i;
71
+ for (const match of matches) {
72
+ const nameCapture = match.captures.find(c => c.name === 'name');
73
+ const valueCapture = match.captures.find(c => c.name === 'value');
74
+ if (nameCapture && valueCapture && secretPatterns.test(nameCapture.node.text) && valueCapture.node.text.length > 2) {
75
+ issues.push(createIssue('TS-SEC003', 'Hardcoded secret in "' + nameCapture.node.text + '"', 'error', nameCapture.node, {
76
+ suggestion: 'Use environment variables'
77
+ }));
78
+ }
79
+ }
80
+ return issues;
81
+ }
82
+ };
83
+ const sqlInjectionRule = {
84
+ id: 'TS-SEC004',
85
+ name: 'SQL Injection Prevention',
86
+ description: 'Detect SQL injection vulnerabilities',
87
+ category: 'security',
88
+ severity: 'error',
89
+ languages: ['typescript', 'javascript', 'tsx', 'python'],
90
+ enabled: true,
91
+ query: '(template_string) @template',
92
+ check: (matches) => {
93
+ const issues = [];
94
+ const sqlPatterns = /\b(SELECT|INSERT|UPDATE|DELETE|DROP|CREATE|ALTER)\b/i;
95
+ for (const match of matches) {
96
+ const capture = match.captures.find(c => c.name === 'template');
97
+ if (capture && sqlPatterns.test(capture.node.text) && capture.node.text.includes('${')) {
98
+ issues.push(createIssue('TS-SEC004', 'SQL injection: avoid string interpolation in SQL', 'error', capture.node, {
99
+ suggestion: 'Use parameterized queries'
100
+ }));
101
+ }
102
+ }
103
+ return issues;
104
+ }
105
+ };
106
+ const consoleLogRule = {
107
+ id: 'TS-BP001',
108
+ name: 'No console.log',
109
+ description: 'Remove console statements',
110
+ category: 'best-practices',
111
+ severity: 'warning',
112
+ languages: ['typescript', 'javascript', 'tsx'],
113
+ enabled: true,
114
+ query: '(call_expression function: (member_expression object: (identifier) @obj))',
115
+ check: (matches) => {
116
+ return checkMatches(matches, 'obj', text => text === 'console', node => createIssue('TS-BP001', 'Remove console statement', 'warning', node, {
117
+ suggestion: 'Use a logging library'
118
+ }));
119
+ }
120
+ };
121
+ const debuggerRule = {
122
+ id: 'TS-BP002',
123
+ name: 'No debugger',
124
+ description: 'Remove debugger statements',
125
+ category: 'best-practices',
126
+ severity: 'error',
127
+ languages: ['typescript', 'javascript', 'tsx'],
128
+ enabled: true,
129
+ query: '(debugger_statement) @debugger',
130
+ check: (matches) => {
131
+ return checkMatches(matches, 'debugger', () => true, node => createIssue('TS-BP002', 'Remove debugger statement', 'error', node));
132
+ }
133
+ };
134
+ const emptyCatchRule = {
135
+ id: 'TS-BP003',
136
+ name: 'No empty catch',
137
+ description: 'Catch blocks should not be empty',
138
+ category: 'best-practices',
139
+ severity: 'warning',
140
+ languages: ['typescript', 'javascript', 'tsx'],
141
+ enabled: true,
142
+ query: '(catch_clause body: (statement_block) @body)',
143
+ check: (matches) => {
144
+ const issues = [];
145
+ for (const match of matches) {
146
+ const bodyCapture = match.captures.find(c => c.name === 'body');
147
+ if (bodyCapture) {
148
+ const content = bodyCapture.node.text.replace(/[\s{}]/g, '').replace(/\/\/.*/g, '');
149
+ if (content.length === 0) {
150
+ issues.push(createIssue('TS-BP003', 'Empty catch block', 'warning', bodyCapture.node, {
151
+ suggestion: 'Add error handling or logging'
152
+ }));
153
+ }
154
+ }
155
+ }
156
+ return issues;
157
+ }
158
+ };
159
+ const noVarRule = {
160
+ id: 'TS-BP004',
161
+ name: 'No var',
162
+ description: 'Use let/const instead of var',
163
+ category: 'best-practices',
164
+ severity: 'warning',
165
+ languages: ['typescript', 'javascript', 'tsx'],
166
+ enabled: true,
167
+ query: '(variable_declaration) @var',
168
+ check: (matches) => {
169
+ return checkMatches(matches, 'var', text => text.startsWith('var '), node => createIssue('TS-BP004', 'Use let/const instead of var', 'warning', node, {
170
+ suggestion: 'Replace var with const or let'
171
+ }));
172
+ }
173
+ };
174
+ const looseEqualityRule = {
175
+ id: 'TS-BP005',
176
+ name: 'Use strict equality',
177
+ description: 'Use === instead of ==',
178
+ category: 'best-practices',
179
+ severity: 'warning',
180
+ languages: ['typescript', 'javascript', 'tsx'],
181
+ enabled: true,
182
+ query: '(binary_expression operator: "==" @op)',
183
+ check: (matches) => {
184
+ return checkMatches(matches, 'op', text => text === '==' || text === '!=', node => createIssue('TS-BP005', 'Use strict equality (===)', 'warning', node));
185
+ }
186
+ };
187
+ const nestedLoopsRule = {
188
+ id: 'TS-PERF002',
189
+ name: 'Nested loops',
190
+ description: 'Avoid deeply nested loops',
191
+ category: 'performance',
192
+ severity: 'warning',
193
+ languages: ['typescript', 'javascript', 'tsx', 'python', 'go', 'rust'],
194
+ enabled: true,
195
+ query: '(for_statement) @loop',
196
+ check: (_matches, context) => {
197
+ const issues = [];
198
+ const loopPattern = /\bfor\s*\([^)]+\)\s*\{[^}]*\bfor\s*\([^)]+\)\s*\{/g;
199
+ let match;
200
+ while ((match = loopPattern.exec(context.code)) !== null) {
201
+ const lines = context.code.substring(0, match.index).split('\n');
202
+ issues.push({
203
+ ruleId: 'TS-PERF002',
204
+ message: 'Nested loops - O(n²) complexity',
205
+ severity: 'warning',
206
+ line: lines.length,
207
+ column: 1
208
+ });
209
+ }
210
+ return issues;
211
+ }
212
+ };
213
+ const longFunctionRule = {
214
+ id: 'TS-MAINT001',
215
+ name: 'Long function',
216
+ description: 'Functions should be short',
217
+ category: 'maintainability',
218
+ severity: 'warning',
219
+ languages: ['typescript', 'javascript', 'tsx', 'python', 'go', 'rust'],
220
+ enabled: true,
221
+ query: '(function_declaration) @func',
222
+ check: (matches) => {
223
+ const issues = [];
224
+ const maxLines = 50;
225
+ for (const match of matches) {
226
+ const funcCapture = match.captures.find(c => c.name === 'func');
227
+ if (funcCapture) {
228
+ const lines = funcCapture.node.text.split('\n').length;
229
+ if (lines > maxLines) {
230
+ issues.push(createIssue('TS-MAINT001', 'Function has ' + lines + ' lines (max ' + maxLines + ')', 'warning', funcCapture.node));
231
+ }
232
+ }
233
+ }
234
+ return issues;
235
+ }
236
+ };
237
+ const tooManyParamsRule = {
238
+ id: 'TS-MAINT002',
239
+ name: 'Too many parameters',
240
+ description: 'Functions should have fewer parameters',
241
+ category: 'maintainability',
242
+ severity: 'warning',
243
+ languages: ['typescript', 'javascript', 'tsx', 'python', 'go', 'rust'],
244
+ enabled: true,
245
+ query: '(function_declaration parameters: (formal_parameters) @params)',
246
+ check: (matches) => {
247
+ const issues = [];
248
+ const maxParams = 4;
249
+ for (const match of matches) {
250
+ const paramsCapture = match.captures.find(c => c.name === 'params');
251
+ if (paramsCapture) {
252
+ const paramCount = paramsCapture.node.text === '()' ? 0 : (paramsCapture.node.text.match(/,/g) || []).length + 1;
253
+ if (paramCount > maxParams) {
254
+ issues.push(createIssue('TS-MAINT002', paramCount + ' params (max ' + maxParams + ')', 'warning', paramsCapture.node));
255
+ }
256
+ }
257
+ }
258
+ return issues;
259
+ }
260
+ };
261
+ // Python rules
262
+ const bareExceptRule = {
263
+ id: 'TS-PY001',
264
+ name: 'No bare except',
265
+ description: 'Catch specific exceptions',
266
+ category: 'best-practices',
267
+ severity: 'warning',
268
+ languages: ['python'],
269
+ enabled: true,
270
+ query: '(except_clause) @except',
271
+ check: (matches) => {
272
+ const issues = [];
273
+ for (const match of matches) {
274
+ const exceptCapture = match.captures.find(c => c.name === 'except');
275
+ if (exceptCapture && /^except\s*:/.test(exceptCapture.node.text)) {
276
+ issues.push(createIssue('TS-PY001', 'Bare except - catch specific exceptions', 'warning', exceptCapture.node));
277
+ }
278
+ }
279
+ return issues;
280
+ }
281
+ };
282
+ const mutableDefaultRule = {
283
+ id: 'TS-PY002',
284
+ name: 'No mutable defaults',
285
+ description: 'Avoid mutable default arguments',
286
+ category: 'best-practices',
287
+ severity: 'error',
288
+ languages: ['python'],
289
+ enabled: true,
290
+ query: '(default_parameter value: (list) @default)',
291
+ check: (matches) => checkMatches(matches, 'default', () => true, node => createIssue('TS-PY002', 'Mutable default argument', 'error', node))
292
+ };
293
+ // Go rules
294
+ const ignoredErrorRule = {
295
+ id: 'TS-GO001',
296
+ name: 'Handle errors',
297
+ description: 'Error returns should be handled',
298
+ category: 'best-practices',
299
+ severity: 'warning',
300
+ languages: ['go'],
301
+ enabled: true,
302
+ query: '(short_var_declaration left: (expression_list) @left)',
303
+ check: (matches) => {
304
+ const issues = [];
305
+ for (const match of matches) {
306
+ const leftCapture = match.captures.find(c => c.name === 'left');
307
+ if (leftCapture && (/, _$/.test(leftCapture.node.text) || /^_,/.test(leftCapture.node.text))) {
308
+ issues.push(createIssue('TS-GO001', 'Error value ignored', 'warning', leftCapture.node));
309
+ }
310
+ }
311
+ return issues;
312
+ }
313
+ };
314
+ // Rust rules
315
+ const unwrapUsageRule = {
316
+ id: 'TS-RS001',
317
+ name: 'Avoid unwrap()',
318
+ description: 'Use proper error handling',
319
+ category: 'best-practices',
320
+ severity: 'warning',
321
+ languages: ['rust'],
322
+ enabled: true,
323
+ query: '(call_expression function: (field_expression field: (field_identifier) @method))',
324
+ check: (matches) => checkMatches(matches, 'method', text => text === 'unwrap' || text === 'expect', node => createIssue('TS-RS001', 'Avoid ' + node.text + '() - use ? or match', 'warning', node))
325
+ };
326
+ // ============================================================================
327
+ // Exports
328
+ // ============================================================================
329
+ export const TYPESCRIPT_RULES = [
330
+ evalUsageRule, innerHTMLRule, hardcodedSecretsRule, sqlInjectionRule,
331
+ consoleLogRule, debuggerRule, emptyCatchRule, noVarRule, looseEqualityRule,
332
+ nestedLoopsRule, longFunctionRule, tooManyParamsRule
333
+ ];
334
+ export const PYTHON_RULES = [
335
+ hardcodedSecretsRule, sqlInjectionRule, nestedLoopsRule, longFunctionRule,
336
+ tooManyParamsRule, bareExceptRule, mutableDefaultRule
337
+ ];
338
+ export const GO_RULES = [
339
+ nestedLoopsRule, longFunctionRule, tooManyParamsRule, ignoredErrorRule
340
+ ];
341
+ export const RUST_RULES = [
342
+ nestedLoopsRule, longFunctionRule, tooManyParamsRule, unwrapUsageRule
343
+ ];
344
+ export const ALL_TREE_SITTER_RULES = [
345
+ ...TYPESCRIPT_RULES, bareExceptRule, mutableDefaultRule, ignoredErrorRule, unwrapUsageRule
346
+ ];
347
+ export function getRulesForLanguage(language) {
348
+ const languageRules = {
349
+ typescript: TYPESCRIPT_RULES,
350
+ javascript: TYPESCRIPT_RULES,
351
+ tsx: TYPESCRIPT_RULES,
352
+ python: PYTHON_RULES,
353
+ go: GO_RULES,
354
+ rust: RUST_RULES
355
+ };
356
+ return (languageRules[language] || []).filter(r => r.enabled);
357
+ }
358
+ //# sourceMappingURL=rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../src/services/ast/rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Tree-Sitter Core Parser
3
+ * Multi-language AST parsing using tree-sitter
4
+ * @version 3.5.0
5
+ */
6
+ import type { ASTNode, ParsedAST, SupportedASTLanguage, TreeSitterMetrics } from './types.js';
7
+ /**
8
+ * Detect language from file extension
9
+ */
10
+ export declare function detectLanguage(filePath: string): SupportedASTLanguage | null;
11
+ /**
12
+ * Parse source code into AST using tree-sitter
13
+ */
14
+ export declare function parseCode(code: string, filePath: string, language?: SupportedASTLanguage): Promise<ParsedAST | null>;
15
+ /**
16
+ * Query AST using tree-sitter query syntax
17
+ */
18
+ export declare function queryAST(ast: ParsedAST, queryPattern: string): Promise<Array<{
19
+ captures: Map<string, ASTNode[]>;
20
+ }>>;
21
+ /**
22
+ * Walk the AST and call visitor functions
23
+ */
24
+ export declare function walkAST(node: ASTNode, visitor: {
25
+ enter?: (node: ASTNode, parent?: ASTNode) => boolean | void;
26
+ leave?: (node: ASTNode, parent?: ASTNode) => void;
27
+ }, parent?: ASTNode): void;
28
+ /**
29
+ * Find all nodes matching a predicate
30
+ */
31
+ export declare function findNodes(ast: ParsedAST, predicate: (node: ASTNode) => boolean): ASTNode[];
32
+ /**
33
+ * Find nodes by type
34
+ */
35
+ export declare function findNodesByType(ast: ParsedAST, ...types: string[]): ASTNode[];
36
+ /**
37
+ * Extract code metrics from AST
38
+ */
39
+ export declare function extractMetrics(ast: ParsedAST): TreeSitterMetrics;
40
+ export declare function parseCodeCached(code: string, filePath: string, language?: SupportedASTLanguage): Promise<ParsedAST | null>;
41
+ export declare function clearASTParserCache(): void;
42
+ /**
43
+ * Get the text of a specific line from code
44
+ */
45
+ export declare function getLineText(code: string, lineNumber: number): string;
46
+ /**
47
+ * Check if language is supported
48
+ */
49
+ export declare function isLanguageSupported(language: string): Promise<boolean>;
50
+ /**
51
+ * Get list of supported languages
52
+ */
53
+ export declare function getSupportedLanguages(): Promise<SupportedASTLanguage[]>;
54
+ //# sourceMappingURL=treeSitterParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"treeSitterParser.d.ts","sourceRoot":"","sources":["../../../src/services/ast/treeSitterParser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EACV,OAAO,EACP,SAAS,EAET,oBAAoB,EAEpB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AA8GpB;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAoB5E;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAuC3B;AA2CD;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,SAAS,EACd,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,KAAK,CAAC;IAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;CAAE,CAAC,CAAC,CA6BtD;AAMD;;GAEG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,OAAO,EACb,OAAO,EAAE;IACP,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,OAAO,GAAG,IAAI,CAAC;IAC5D,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACnD,EACD,MAAM,CAAC,EAAE,OAAO,GACf,IAAI,CAmBN;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,GACpC,OAAO,EAAE,CAYX;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAG7E;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,iBAAiB,CAyEhE;AASD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAkB3B;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAG1C;AAMD;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAGpE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG5E;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAG7E"}