@skillsmith/core 0.2.0 → 2.0.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 (233) hide show
  1. package/README.md +233 -2
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/analysis/__tests__/incremental.test.d.ts +13 -0
  4. package/dist/src/analysis/__tests__/incremental.test.d.ts.map +1 -0
  5. package/dist/src/analysis/__tests__/incremental.test.js +515 -0
  6. package/dist/src/analysis/__tests__/incremental.test.js.map +1 -0
  7. package/dist/src/analysis/__tests__/integration.test.d.ts +14 -0
  8. package/dist/src/analysis/__tests__/integration.test.d.ts.map +1 -0
  9. package/dist/src/analysis/__tests__/integration.test.js +1059 -0
  10. package/dist/src/analysis/__tests__/integration.test.js.map +1 -0
  11. package/dist/src/analysis/__tests__/metrics.test.d.ts +9 -0
  12. package/dist/src/analysis/__tests__/metrics.test.d.ts.map +1 -0
  13. package/dist/src/analysis/__tests__/metrics.test.js +369 -0
  14. package/dist/src/analysis/__tests__/metrics.test.js.map +1 -0
  15. package/dist/src/analysis/__tests__/performance.test.d.ts +15 -0
  16. package/dist/src/analysis/__tests__/performance.test.d.ts.map +1 -0
  17. package/dist/src/analysis/__tests__/performance.test.js +402 -0
  18. package/dist/src/analysis/__tests__/performance.test.js.map +1 -0
  19. package/dist/src/analysis/adapters/__tests__/go.test.d.ts +12 -0
  20. package/dist/src/analysis/adapters/__tests__/go.test.d.ts.map +1 -0
  21. package/dist/src/analysis/adapters/__tests__/go.test.js +561 -0
  22. package/dist/src/analysis/adapters/__tests__/go.test.js.map +1 -0
  23. package/dist/src/analysis/adapters/__tests__/python.test.d.ts +11 -0
  24. package/dist/src/analysis/adapters/__tests__/python.test.d.ts.map +1 -0
  25. package/dist/src/analysis/adapters/__tests__/python.test.js +669 -0
  26. package/dist/src/analysis/adapters/__tests__/python.test.js.map +1 -0
  27. package/dist/src/analysis/adapters/__tests__/rust.test.d.ts +12 -0
  28. package/dist/src/analysis/adapters/__tests__/rust.test.d.ts.map +1 -0
  29. package/dist/src/analysis/adapters/__tests__/rust.test.js +676 -0
  30. package/dist/src/analysis/adapters/__tests__/rust.test.js.map +1 -0
  31. package/dist/src/analysis/adapters/__tests__/typescript.test.d.ts +14 -0
  32. package/dist/src/analysis/adapters/__tests__/typescript.test.d.ts.map +1 -0
  33. package/dist/src/analysis/adapters/__tests__/typescript.test.js +381 -0
  34. package/dist/src/analysis/adapters/__tests__/typescript.test.js.map +1 -0
  35. package/dist/src/analysis/adapters/base.d.ts +83 -0
  36. package/dist/src/analysis/adapters/base.d.ts.map +1 -0
  37. package/dist/src/analysis/adapters/base.js +40 -0
  38. package/dist/src/analysis/adapters/base.js.map +1 -0
  39. package/dist/src/analysis/adapters/factory.d.ts +150 -0
  40. package/dist/src/analysis/adapters/factory.d.ts.map +1 -0
  41. package/dist/src/analysis/adapters/factory.js +244 -0
  42. package/dist/src/analysis/adapters/factory.js.map +1 -0
  43. package/dist/src/analysis/adapters/go.d.ts +131 -0
  44. package/dist/src/analysis/adapters/go.d.ts.map +1 -0
  45. package/dist/src/analysis/adapters/go.js +414 -0
  46. package/dist/src/analysis/adapters/go.js.map +1 -0
  47. package/dist/src/analysis/adapters/index.d.ts +20 -0
  48. package/dist/src/analysis/adapters/index.d.ts.map +1 -0
  49. package/dist/src/analysis/adapters/index.js +23 -0
  50. package/dist/src/analysis/adapters/index.js.map +1 -0
  51. package/dist/src/analysis/adapters/java.d.ts +154 -0
  52. package/dist/src/analysis/adapters/java.d.ts.map +1 -0
  53. package/dist/src/analysis/adapters/java.js +407 -0
  54. package/dist/src/analysis/adapters/java.js.map +1 -0
  55. package/dist/src/analysis/adapters/python.d.ts +165 -0
  56. package/dist/src/analysis/adapters/python.d.ts.map +1 -0
  57. package/dist/src/analysis/adapters/python.js +475 -0
  58. package/dist/src/analysis/adapters/python.js.map +1 -0
  59. package/dist/src/analysis/adapters/rust.d.ts +116 -0
  60. package/dist/src/analysis/adapters/rust.d.ts.map +1 -0
  61. package/dist/src/analysis/adapters/rust.js +476 -0
  62. package/dist/src/analysis/adapters/rust.js.map +1 -0
  63. package/dist/src/analysis/adapters/typescript.d.ts +68 -0
  64. package/dist/src/analysis/adapters/typescript.d.ts.map +1 -0
  65. package/dist/src/analysis/adapters/typescript.js +79 -0
  66. package/dist/src/analysis/adapters/typescript.js.map +1 -0
  67. package/dist/src/analysis/aggregator.d.ts +193 -0
  68. package/dist/src/analysis/aggregator.d.ts.map +1 -0
  69. package/dist/src/analysis/aggregator.js +283 -0
  70. package/dist/src/analysis/aggregator.js.map +1 -0
  71. package/dist/src/analysis/cache.d.ts +180 -0
  72. package/dist/src/analysis/cache.d.ts.map +1 -0
  73. package/dist/src/analysis/cache.js +279 -0
  74. package/dist/src/analysis/cache.js.map +1 -0
  75. package/dist/src/analysis/file-streamer.d.ts +136 -0
  76. package/dist/src/analysis/file-streamer.d.ts.map +1 -0
  77. package/dist/src/analysis/file-streamer.js +291 -0
  78. package/dist/src/analysis/file-streamer.js.map +1 -0
  79. package/dist/src/analysis/incremental-parser.d.ts +186 -0
  80. package/dist/src/analysis/incremental-parser.d.ts.map +1 -0
  81. package/dist/src/analysis/incremental-parser.js +291 -0
  82. package/dist/src/analysis/incremental-parser.js.map +1 -0
  83. package/dist/src/analysis/incremental.d.ts +186 -0
  84. package/dist/src/analysis/incremental.d.ts.map +1 -0
  85. package/dist/src/analysis/incremental.js +247 -0
  86. package/dist/src/analysis/incremental.js.map +1 -0
  87. package/dist/src/analysis/index.d.ts +25 -3
  88. package/dist/src/analysis/index.d.ts.map +1 -1
  89. package/dist/src/analysis/index.js +45 -3
  90. package/dist/src/analysis/index.js.map +1 -1
  91. package/dist/src/analysis/language-detector.d.ts +92 -0
  92. package/dist/src/analysis/language-detector.d.ts.map +1 -0
  93. package/dist/src/analysis/language-detector.js +602 -0
  94. package/dist/src/analysis/language-detector.js.map +1 -0
  95. package/dist/src/analysis/memory-monitor.d.ts +199 -0
  96. package/dist/src/analysis/memory-monitor.d.ts.map +1 -0
  97. package/dist/src/analysis/memory-monitor.js +271 -0
  98. package/dist/src/analysis/memory-monitor.js.map +1 -0
  99. package/dist/src/analysis/metrics.d.ts +300 -0
  100. package/dist/src/analysis/metrics.d.ts.map +1 -0
  101. package/dist/src/analysis/metrics.js +537 -0
  102. package/dist/src/analysis/metrics.js.map +1 -0
  103. package/dist/src/analysis/router.d.ts +264 -0
  104. package/dist/src/analysis/router.d.ts.map +1 -0
  105. package/dist/src/analysis/router.js +398 -0
  106. package/dist/src/analysis/router.js.map +1 -0
  107. package/dist/src/analysis/tree-cache.d.ts +208 -0
  108. package/dist/src/analysis/tree-cache.d.ts.map +1 -0
  109. package/dist/src/analysis/tree-cache.js +288 -0
  110. package/dist/src/analysis/tree-cache.js.map +1 -0
  111. package/dist/src/analysis/tree-sitter/manager.d.ts +141 -0
  112. package/dist/src/analysis/tree-sitter/manager.d.ts.map +1 -0
  113. package/dist/src/analysis/tree-sitter/manager.js +239 -0
  114. package/dist/src/analysis/tree-sitter/manager.js.map +1 -0
  115. package/dist/src/analysis/types.d.ts +69 -6
  116. package/dist/src/analysis/types.d.ts.map +1 -1
  117. package/dist/src/analysis/types.js +23 -2
  118. package/dist/src/analysis/types.js.map +1 -1
  119. package/dist/src/analysis/worker-pool.d.ts +141 -0
  120. package/dist/src/analysis/worker-pool.d.ts.map +1 -0
  121. package/dist/src/analysis/worker-pool.js +418 -0
  122. package/dist/src/analysis/worker-pool.js.map +1 -0
  123. package/dist/src/analytics/schema.d.ts +1 -1
  124. package/dist/src/analytics/schema.d.ts.map +1 -1
  125. package/dist/src/analytics/schema.js +72 -0
  126. package/dist/src/analytics/schema.js.map +1 -1
  127. package/dist/src/api/cache.d.ts +24 -1
  128. package/dist/src/api/cache.d.ts.map +1 -1
  129. package/dist/src/api/cache.js +50 -2
  130. package/dist/src/api/cache.js.map +1 -1
  131. package/dist/src/api/client.d.ts +132 -2
  132. package/dist/src/api/client.d.ts.map +1 -1
  133. package/dist/src/api/client.js +214 -18
  134. package/dist/src/api/client.js.map +1 -1
  135. package/dist/src/api/index.d.ts +2 -0
  136. package/dist/src/api/index.d.ts.map +1 -1
  137. package/dist/src/api/index.js +7 -0
  138. package/dist/src/api/index.js.map +1 -1
  139. package/dist/src/api/types.d.ts +251 -0
  140. package/dist/src/api/types.d.ts.map +1 -0
  141. package/dist/src/api/types.js +9 -0
  142. package/dist/src/api/types.js.map +1 -0
  143. package/dist/src/benchmarks/memory/MemoryProfiler.d.ts.map +1 -1
  144. package/dist/src/benchmarks/memory/MemoryProfiler.js.map +1 -1
  145. package/dist/src/embeddings/index.d.ts.map +1 -1
  146. package/dist/src/embeddings/index.js.map +1 -1
  147. package/dist/src/errors.d.ts +1 -0
  148. package/dist/src/errors.d.ts.map +1 -1
  149. package/dist/src/errors.js +1 -0
  150. package/dist/src/errors.js.map +1 -1
  151. package/dist/src/index.d.ts +3 -3
  152. package/dist/src/index.d.ts.map +1 -1
  153. package/dist/src/index.js +4 -4
  154. package/dist/src/index.js.map +1 -1
  155. package/dist/src/repositories/IndexerRepository.d.ts.map +1 -1
  156. package/dist/src/repositories/IndexerRepository.js +1 -0
  157. package/dist/src/repositories/IndexerRepository.js.map +1 -1
  158. package/dist/src/repositories/SkillRepository.d.ts.map +1 -1
  159. package/dist/src/repositories/SkillRepository.js +1 -0
  160. package/dist/src/repositories/SkillRepository.js.map +1 -1
  161. package/dist/src/repositories/quarantine/QuarantineRepository.d.ts.map +1 -1
  162. package/dist/src/repositories/quarantine/QuarantineRepository.js.map +1 -1
  163. package/dist/src/repositories/quarantine/query-builder.d.ts.map +1 -1
  164. package/dist/src/repositories/quarantine/query-builder.js +1 -1
  165. package/dist/src/repositories/quarantine/query-builder.js.map +1 -1
  166. package/dist/src/scripts/__tests__/scan-imported-skills.test.js +3 -3
  167. package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -1
  168. package/dist/src/scripts/github-import/index.js.map +1 -1
  169. package/dist/src/scripts/import-github-skills.js +1 -1
  170. package/dist/src/scripts/import-github-skills.js.map +1 -1
  171. package/dist/src/scripts/skill-scanner/reporter.d.ts.map +1 -1
  172. package/dist/src/scripts/skill-scanner/reporter.js.map +1 -1
  173. package/dist/src/scripts/skill-scanner/scanner.d.ts.map +1 -1
  174. package/dist/src/scripts/skill-scanner/scanner.js.map +1 -1
  175. package/dist/src/scripts/skill-scanner/trust-scorer.d.ts.map +1 -1
  176. package/dist/src/scripts/skill-scanner/trust-scorer.js.map +1 -1
  177. package/dist/src/scripts/validation/index.js +1 -2
  178. package/dist/src/scripts/validation/index.js.map +1 -1
  179. package/dist/src/scripts/validation/pipeline.d.ts.map +1 -1
  180. package/dist/src/scripts/validation/pipeline.js.map +1 -1
  181. package/dist/src/scripts/validation/types.d.ts +2 -2
  182. package/dist/src/security/scanner/SecurityScanner.d.ts.map +1 -1
  183. package/dist/src/security/scanner/SecurityScanner.js.map +1 -1
  184. package/dist/src/services/SearchService.d.ts.map +1 -1
  185. package/dist/src/services/SearchService.js +1 -0
  186. package/dist/src/services/SearchService.js.map +1 -1
  187. package/dist/src/session/SessionHealthMonitor.d.ts +1 -1
  188. package/dist/src/session/SessionHealthMonitor.d.ts.map +1 -1
  189. package/dist/src/session/SessionHealthMonitor.js +1 -1
  190. package/dist/src/session/SessionHealthMonitor.js.map +1 -1
  191. package/dist/src/telemetry/index.d.ts +1 -1
  192. package/dist/src/telemetry/index.d.ts.map +1 -1
  193. package/dist/src/telemetry/index.js +2 -2
  194. package/dist/src/telemetry/index.js.map +1 -1
  195. package/dist/src/telemetry/posthog.d.ts +27 -5
  196. package/dist/src/telemetry/posthog.d.ts.map +1 -1
  197. package/dist/src/telemetry/posthog.js +20 -5
  198. package/dist/src/telemetry/posthog.js.map +1 -1
  199. package/dist/src/types/skill.d.ts +3 -0
  200. package/dist/src/types/skill.d.ts.map +1 -1
  201. package/dist/src/types.d.ts +2 -1
  202. package/dist/src/types.d.ts.map +1 -1
  203. package/dist/src/types.js +2 -2
  204. package/dist/src/types.js.map +1 -1
  205. package/dist/tests/adapters-factory.test.d.ts +13 -0
  206. package/dist/tests/adapters-factory.test.d.ts.map +1 -0
  207. package/dist/tests/adapters-factory.test.js +308 -0
  208. package/dist/tests/adapters-factory.test.js.map +1 -0
  209. package/dist/tests/adapters-java.test.d.ts +13 -0
  210. package/dist/tests/adapters-java.test.d.ts.map +1 -0
  211. package/dist/tests/adapters-java.test.js +925 -0
  212. package/dist/tests/adapters-java.test.js.map +1 -0
  213. package/dist/tests/api/client.validation.test.d.ts +7 -0
  214. package/dist/tests/api/client.validation.test.d.ts.map +1 -0
  215. package/dist/tests/api/client.validation.test.js +183 -0
  216. package/dist/tests/api/client.validation.test.js.map +1 -0
  217. package/dist/tests/language-detector.test.d.ts +13 -0
  218. package/dist/tests/language-detector.test.d.ts.map +1 -0
  219. package/dist/tests/language-detector.test.js +674 -0
  220. package/dist/tests/language-detector.test.js.map +1 -0
  221. package/dist/tests/telemetry/posthog.test.d.ts +13 -0
  222. package/dist/tests/telemetry/posthog.test.d.ts.map +1 -0
  223. package/dist/tests/telemetry/posthog.test.js +600 -0
  224. package/dist/tests/telemetry/posthog.test.js.map +1 -0
  225. package/package.json +5 -6
  226. package/dist/src/security/RateLimiter.d.ts +0 -337
  227. package/dist/src/security/RateLimiter.d.ts.map +0 -1
  228. package/dist/src/security/RateLimiter.js +0 -782
  229. package/dist/src/security/RateLimiter.js.map +0 -1
  230. package/dist/src/security/scanner.d.ts +0 -151
  231. package/dist/src/security/scanner.d.ts.map +0 -1
  232. package/dist/src/security/scanner.js +0 -599
  233. package/dist/src/security/scanner.js.map +0 -1
@@ -0,0 +1,476 @@
1
+ /**
2
+ * SMI-1306: Rust Language Adapter
3
+ *
4
+ * Parses Rust source files (.rs) and extracts imports, exports, and functions
5
+ * using regex-based parsing. Rust uses explicit `pub` visibility modifiers
6
+ * for public items.
7
+ *
8
+ * @see docs/architecture/multi-language-analysis.md
9
+ */
10
+ import { LanguageAdapter } from './base.js';
11
+ /**
12
+ * Rust Language Adapter
13
+ *
14
+ * Parses Rust source files using regex-based parsing.
15
+ * Handles Rust's `pub` visibility modifiers and module system.
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const adapter = new RustAdapter()
20
+ * const result = adapter.parseFile(rustCode, 'lib.rs')
21
+ * console.log(result.exports) // Items with pub modifier
22
+ * ```
23
+ */
24
+ export class RustAdapter extends LanguageAdapter {
25
+ language = 'rust';
26
+ extensions = ['.rs'];
27
+ /**
28
+ * Parse a Rust source file and extract information
29
+ */
30
+ parseFile(content, filePath) {
31
+ const imports = this.extractImports(content, filePath);
32
+ const exports = this.extractExports(content, filePath);
33
+ const functions = this.extractFunctions(content, filePath);
34
+ return { imports, exports, functions };
35
+ }
36
+ /**
37
+ * Parse file incrementally (currently same as full parse)
38
+ */
39
+ parseIncremental(content, filePath, _previousTree) {
40
+ // Incremental parsing not yet implemented for Rust
41
+ // Will be added with tree-sitter integration
42
+ return this.parseFile(content, filePath);
43
+ }
44
+ /**
45
+ * Get Rust framework detection rules
46
+ */
47
+ getFrameworkRules() {
48
+ return [
49
+ {
50
+ name: 'Actix',
51
+ depIndicators: ['actix-web', 'actix-rt'],
52
+ importIndicators: ['actix_web', 'actix_rt'],
53
+ },
54
+ {
55
+ name: 'Rocket',
56
+ depIndicators: ['rocket'],
57
+ importIndicators: ['rocket'],
58
+ },
59
+ {
60
+ name: 'Axum',
61
+ depIndicators: ['axum'],
62
+ importIndicators: ['axum'],
63
+ },
64
+ {
65
+ name: 'Tokio',
66
+ depIndicators: ['tokio'],
67
+ importIndicators: ['tokio'],
68
+ },
69
+ {
70
+ name: 'Serde',
71
+ depIndicators: ['serde', 'serde_json'],
72
+ importIndicators: ['serde', 'serde_json'],
73
+ },
74
+ {
75
+ name: 'Diesel',
76
+ depIndicators: ['diesel'],
77
+ importIndicators: ['diesel'],
78
+ },
79
+ {
80
+ name: 'SQLx',
81
+ depIndicators: ['sqlx'],
82
+ importIndicators: ['sqlx'],
83
+ },
84
+ {
85
+ name: 'Clap',
86
+ depIndicators: ['clap'],
87
+ importIndicators: ['clap'],
88
+ },
89
+ {
90
+ name: 'Warp',
91
+ depIndicators: ['warp'],
92
+ importIndicators: ['warp'],
93
+ },
94
+ {
95
+ name: 'Reqwest',
96
+ depIndicators: ['reqwest'],
97
+ importIndicators: ['reqwest'],
98
+ },
99
+ {
100
+ name: 'Hyper',
101
+ depIndicators: ['hyper'],
102
+ importIndicators: ['hyper'],
103
+ },
104
+ {
105
+ name: 'Tonic',
106
+ depIndicators: ['tonic'],
107
+ importIndicators: ['tonic'],
108
+ },
109
+ {
110
+ name: 'Tracing',
111
+ depIndicators: ['tracing', 'tracing-subscriber'],
112
+ importIndicators: ['tracing', 'tracing_subscriber'],
113
+ },
114
+ ];
115
+ }
116
+ /**
117
+ * Clean up resources (no-op for regex-based parsing)
118
+ */
119
+ dispose() {
120
+ // No resources to clean up for regex-based parsing
121
+ }
122
+ /**
123
+ * Extract use statements from Rust source
124
+ *
125
+ * Handles:
126
+ * - use crate::module::item;
127
+ * - use std::collections::HashMap;
128
+ * - use super::parent;
129
+ * - use self::child;
130
+ * - use std::{io, fs};
131
+ * - use module::*;
132
+ * - extern crate foo;
133
+ */
134
+ extractImports(content, filePath) {
135
+ const imports = [];
136
+ const lines = content.split('\n');
137
+ for (let i = 0; i < lines.length; i++) {
138
+ const line = lines[i].trim();
139
+ const lineNum = i + 1;
140
+ // Skip comments
141
+ if (line.startsWith('//') || line.startsWith('/*')) {
142
+ continue;
143
+ }
144
+ // Match: use module::path::{item1, item2};
145
+ const useGroupMatch = line.match(/^use\s+([\w:]+)::\{([^}]+)\};/);
146
+ if (useGroupMatch) {
147
+ const module = useGroupMatch[1];
148
+ const items = useGroupMatch[2]
149
+ .split(',')
150
+ .map((n) => n.trim())
151
+ .filter(Boolean)
152
+ // Handle self in grouped imports: use foo::{self, Bar}
153
+ .map((n) => (n === 'self' ? '' : n))
154
+ .filter(Boolean);
155
+ imports.push({
156
+ module,
157
+ namedImports: items,
158
+ isTypeOnly: false,
159
+ sourceFile: filePath,
160
+ line: lineNum,
161
+ });
162
+ continue;
163
+ }
164
+ // Match: use module::path::item as alias;
165
+ // Match: use module::path::item;
166
+ // Match: use module::*;
167
+ const useMatch = line.match(/^use\s+([\w:*]+)(?:\s+as\s+(\w+))?;/);
168
+ if (useMatch) {
169
+ let module = useMatch[1];
170
+ const alias = useMatch[2];
171
+ let namespaceImport;
172
+ // Check for glob import
173
+ if (module.endsWith('::*')) {
174
+ module = module.slice(0, -3);
175
+ namespaceImport = '*';
176
+ }
177
+ // Extract the item name from the module path
178
+ const pathParts = module.split('::');
179
+ const itemName = pathParts[pathParts.length - 1];
180
+ imports.push({
181
+ module,
182
+ namedImports: namespaceImport ? [] : [itemName],
183
+ defaultImport: alias || undefined,
184
+ namespaceImport,
185
+ isTypeOnly: false,
186
+ sourceFile: filePath,
187
+ line: lineNum,
188
+ });
189
+ continue;
190
+ }
191
+ // Match: extern crate foo;
192
+ // Match: extern crate foo as bar;
193
+ const externMatch = line.match(/^extern\s+crate\s+(\w+)(?:\s+as\s+(\w+))?;/);
194
+ if (externMatch) {
195
+ imports.push({
196
+ module: externMatch[1],
197
+ namedImports: [],
198
+ defaultImport: externMatch[2] || undefined,
199
+ isTypeOnly: false,
200
+ sourceFile: filePath,
201
+ line: lineNum,
202
+ });
203
+ }
204
+ }
205
+ return imports;
206
+ }
207
+ /**
208
+ * Extract exports (pub items) from Rust source
209
+ *
210
+ * In Rust, items prefixed with `pub` are public.
211
+ * Handles visibility modifiers: pub, pub(crate), pub(super), pub(in path)
212
+ */
213
+ extractExports(content, filePath) {
214
+ const exports = [];
215
+ const lines = content.split('\n');
216
+ for (let i = 0; i < lines.length; i++) {
217
+ const line = lines[i];
218
+ const lineNum = i + 1;
219
+ // Skip comments and empty lines
220
+ const trimmed = line.trim();
221
+ if (trimmed.startsWith('//') || trimmed.startsWith('/*') || trimmed === '') {
222
+ continue;
223
+ }
224
+ // pub struct Name
225
+ const structMatch = line.match(/^(pub(?:\([^)]+\))?)\s+struct\s+(\w+)/);
226
+ if (structMatch) {
227
+ exports.push({
228
+ name: structMatch[2],
229
+ kind: 'struct',
230
+ isDefault: false,
231
+ sourceFile: filePath,
232
+ visibility: 'public',
233
+ line: lineNum,
234
+ });
235
+ continue;
236
+ }
237
+ // pub enum Name
238
+ const enumMatch = line.match(/^(pub(?:\([^)]+\))?)\s+enum\s+(\w+)/);
239
+ if (enumMatch) {
240
+ exports.push({
241
+ name: enumMatch[2],
242
+ kind: 'enum',
243
+ isDefault: false,
244
+ sourceFile: filePath,
245
+ visibility: 'public',
246
+ line: lineNum,
247
+ });
248
+ continue;
249
+ }
250
+ // pub trait Name
251
+ const traitMatch = line.match(/^(pub(?:\([^)]+\))?)\s+trait\s+(\w+)/);
252
+ if (traitMatch) {
253
+ exports.push({
254
+ name: traitMatch[2],
255
+ kind: 'trait',
256
+ isDefault: false,
257
+ sourceFile: filePath,
258
+ visibility: 'public',
259
+ line: lineNum,
260
+ });
261
+ continue;
262
+ }
263
+ // pub fn name or pub async fn name
264
+ const fnMatch = line.match(/^(pub(?:\([^)]+\))?)\s+(?:async\s+)?fn\s+(\w+)/);
265
+ if (fnMatch) {
266
+ exports.push({
267
+ name: fnMatch[2],
268
+ kind: 'function',
269
+ isDefault: false,
270
+ sourceFile: filePath,
271
+ visibility: 'public',
272
+ line: lineNum,
273
+ });
274
+ continue;
275
+ }
276
+ // pub mod name
277
+ const modMatch = line.match(/^(pub(?:\([^)]+\))?)\s+mod\s+(\w+)/);
278
+ if (modMatch) {
279
+ exports.push({
280
+ name: modMatch[2],
281
+ kind: 'module',
282
+ isDefault: false,
283
+ sourceFile: filePath,
284
+ visibility: 'public',
285
+ line: lineNum,
286
+ });
287
+ continue;
288
+ }
289
+ // pub type Name = ...
290
+ const typeMatch = line.match(/^(pub(?:\([^)]+\))?)\s+type\s+(\w+)/);
291
+ if (typeMatch) {
292
+ exports.push({
293
+ name: typeMatch[2],
294
+ kind: 'type',
295
+ isDefault: false,
296
+ sourceFile: filePath,
297
+ visibility: 'public',
298
+ line: lineNum,
299
+ });
300
+ continue;
301
+ }
302
+ // pub const NAME or pub static NAME
303
+ const constMatch = line.match(/^(pub(?:\([^)]+\))?)\s+(?:const|static)\s+(\w+)/);
304
+ if (constMatch) {
305
+ exports.push({
306
+ name: constMatch[2],
307
+ kind: 'variable',
308
+ isDefault: false,
309
+ sourceFile: filePath,
310
+ visibility: 'public',
311
+ line: lineNum,
312
+ });
313
+ }
314
+ }
315
+ return exports;
316
+ }
317
+ /**
318
+ * Extract function definitions from Rust source
319
+ *
320
+ * Handles:
321
+ * - fn name(params)
322
+ * - pub fn name(params)
323
+ * - async fn name(params)
324
+ * - pub async fn name(params)
325
+ * - Functions with generics: fn name<T>(params)
326
+ */
327
+ extractFunctions(content, filePath) {
328
+ const functions = [];
329
+ const lines = content.split('\n');
330
+ for (let i = 0; i < lines.length; i++) {
331
+ const line = lines[i];
332
+ const lineNum = i + 1;
333
+ // Match: fn name(params) or async fn name(params) or pub fn name(params)
334
+ // Handle generics: fn name<T, U>(params)
335
+ const match = line.match(/^(\s*)(pub(?:\([^)]+\))?\s+)?(async\s+)?fn\s+(\w+)\s*(?:<[^>]*>)?\s*\(([^)]*)\)/);
336
+ if (match) {
337
+ const _indentation = match[1];
338
+ const pubModifier = match[2];
339
+ const isAsync = !!match[3];
340
+ const name = match[4];
341
+ const paramsStr = match[5];
342
+ // Count parameters (excluding self/&self/&mut self)
343
+ let paramCount = 0;
344
+ if (paramsStr.trim()) {
345
+ const params = paramsStr.split(',');
346
+ for (const param of params) {
347
+ const trimmed = param.trim();
348
+ // Skip self parameters
349
+ if (trimmed && !trimmed.match(/^&?(?:mut\s+)?self$/)) {
350
+ paramCount++;
351
+ }
352
+ }
353
+ }
354
+ // Check for attributes (decorators) above the function
355
+ const attributes = [];
356
+ for (let j = i - 1; j >= 0; j--) {
357
+ const prevLine = lines[j].trim();
358
+ if (prevLine.startsWith('#[')) {
359
+ // Extract attribute name: #[test] -> test, #[tokio::test] -> tokio::test
360
+ const attrMatch = prevLine.match(/#\[([^\]]+)\]/);
361
+ if (attrMatch) {
362
+ // Get just the attribute name, not its arguments
363
+ const attrContent = attrMatch[1];
364
+ const attrName = attrContent.split('(')[0].trim();
365
+ attributes.unshift(attrName);
366
+ }
367
+ }
368
+ else if (prevLine === '' || prevLine.startsWith('//')) {
369
+ // Skip empty lines and comments
370
+ continue;
371
+ }
372
+ else {
373
+ // Stop if we hit non-attribute, non-comment content
374
+ break;
375
+ }
376
+ }
377
+ functions.push({
378
+ name,
379
+ parameterCount: paramCount,
380
+ isAsync,
381
+ isExported: !!pubModifier,
382
+ sourceFile: filePath,
383
+ line: lineNum,
384
+ attributes: attributes.length > 0 ? attributes : undefined,
385
+ });
386
+ }
387
+ }
388
+ return functions;
389
+ }
390
+ }
391
+ /**
392
+ * Parse Cargo.toml to extract dependencies
393
+ *
394
+ * @param content - Content of Cargo.toml file
395
+ * @returns Array of dependencies with name, version, and isDev flag
396
+ *
397
+ * @example
398
+ * ```typescript
399
+ * const deps = parseCargoToml(cargoTomlContent)
400
+ * console.log(deps) // [{ name: 'serde', version: '1.0', isDev: false }]
401
+ * ```
402
+ */
403
+ export function parseCargoToml(content) {
404
+ const deps = [];
405
+ const lines = content.split('\n');
406
+ let inDeps = false;
407
+ let inDevDeps = false;
408
+ let inBuildDeps = false;
409
+ for (const line of lines) {
410
+ const trimmed = line.trim();
411
+ // Track which section we're in
412
+ if (trimmed === '[dependencies]') {
413
+ inDeps = true;
414
+ inDevDeps = false;
415
+ inBuildDeps = false;
416
+ continue;
417
+ }
418
+ if (trimmed === '[dev-dependencies]') {
419
+ inDeps = false;
420
+ inDevDeps = true;
421
+ inBuildDeps = false;
422
+ continue;
423
+ }
424
+ if (trimmed === '[build-dependencies]') {
425
+ inDeps = false;
426
+ inDevDeps = false;
427
+ inBuildDeps = true;
428
+ continue;
429
+ }
430
+ // Any other section header exits dependency sections
431
+ if (trimmed.startsWith('[')) {
432
+ inDeps = false;
433
+ inDevDeps = false;
434
+ inBuildDeps = false;
435
+ continue;
436
+ }
437
+ // Parse dependencies in relevant sections
438
+ if (inDeps || inDevDeps || inBuildDeps) {
439
+ // Skip empty lines and comments
440
+ if (trimmed === '' || trimmed.startsWith('#')) {
441
+ continue;
442
+ }
443
+ // Simple format: name = "version"
444
+ const simpleMatch = trimmed.match(/^([\w-]+)\s*=\s*"([^"]+)"/);
445
+ if (simpleMatch) {
446
+ deps.push({
447
+ name: simpleMatch[1],
448
+ version: simpleMatch[2],
449
+ isDev: inDevDeps,
450
+ });
451
+ continue;
452
+ }
453
+ // Table format: name = { version = "1.0", features = [...] }
454
+ const tableMatch = trimmed.match(/^([\w-]+)\s*=\s*\{.*version\s*=\s*"([^"]+)"/);
455
+ if (tableMatch) {
456
+ deps.push({
457
+ name: tableMatch[1],
458
+ version: tableMatch[2],
459
+ isDev: inDevDeps,
460
+ });
461
+ continue;
462
+ }
463
+ // Git/path dependencies without version (we still capture them)
464
+ const gitMatch = trimmed.match(/^([\w-]+)\s*=\s*\{.*(?:git|path)\s*=/);
465
+ if (gitMatch) {
466
+ deps.push({
467
+ name: gitMatch[1],
468
+ version: 'git/path',
469
+ isDev: inDevDeps,
470
+ });
471
+ }
472
+ }
473
+ }
474
+ return deps;
475
+ }
476
+ //# sourceMappingURL=rust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rust.js","sourceRoot":"","sources":["../../../../src/analysis/adapters/rust.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * SMI-1310: TypeScript Language Adapter
3
+ *
4
+ * TypeScript/JavaScript adapter using the existing TypeScript compiler API.
5
+ * Falls back to tree-sitter for incremental parsing (SMI-1309).
6
+ *
7
+ * @see docs/architecture/multi-language-analysis.md
8
+ */
9
+ import { LanguageAdapter, type SupportedLanguage } from './base.js';
10
+ import { type FrameworkRule } from '../framework-detector.js';
11
+ import type { ParseResult } from '../types.js';
12
+ /**
13
+ * TypeScript/JavaScript adapter
14
+ *
15
+ * Uses the existing TypeScript compiler API for maximum accuracy.
16
+ * Falls back to tree-sitter for incremental parsing.
17
+ *
18
+ * @example
19
+ * const adapter = new TypeScriptAdapter()
20
+ * const result = adapter.parseFile(content, 'src/index.ts')
21
+ * console.log(result.imports)
22
+ */
23
+ export declare class TypeScriptAdapter extends LanguageAdapter {
24
+ /** Language identifier */
25
+ readonly language: SupportedLanguage;
26
+ /** Supported file extensions */
27
+ readonly extensions: string[];
28
+ /**
29
+ * Parse a file using TypeScript compiler API
30
+ *
31
+ * Uses the existing parseFile function from parsers.ts
32
+ * for maximum accuracy and backward compatibility.
33
+ *
34
+ * @param content - File content to parse
35
+ * @param filePath - Relative path for source file tracking
36
+ * @returns Parsed imports, exports, and functions
37
+ */
38
+ parseFile(content: string, filePath: string): ParseResult;
39
+ /**
40
+ * Parse file incrementally
41
+ *
42
+ * Currently delegates to full parse. Tree-sitter incremental
43
+ * parsing will be implemented in SMI-1309.
44
+ *
45
+ * @param content - Updated content
46
+ * @param filePath - File path
47
+ * @param _previousTree - Previous parse tree (unused until SMI-1309)
48
+ * @returns Updated parse result
49
+ */
50
+ parseIncremental(content: string, filePath: string, _previousTree?: unknown): ParseResult;
51
+ /**
52
+ * Get TypeScript/JavaScript framework detection rules
53
+ *
54
+ * Returns the existing FRAMEWORK_RULES from framework-detector.ts
55
+ * for backward compatibility.
56
+ *
57
+ * @returns Array of framework detection rules
58
+ */
59
+ getFrameworkRules(): FrameworkRule[];
60
+ /**
61
+ * Clean up resources
62
+ *
63
+ * No resources to clean up for TypeScript compiler API.
64
+ * Tree-sitter parser cleanup will be added in SMI-1309.
65
+ */
66
+ dispose(): void;
67
+ }
68
+ //# sourceMappingURL=typescript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../../../src/analysis/adapters/typescript.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAEnE,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C;;;;;;;;;;GAUG;AACH,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,0BAA0B;IAC1B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAe;IAEnD,gCAAgC;IAChC,QAAQ,CAAC,UAAU,WAAiD;IAEpE;;;;;;;;;OASG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW;IAIzD;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO,GAAG,WAAW;IAMzF;;;;;;;OAOG;IACH,iBAAiB,IAAI,aAAa,EAAE;IAIpC;;;;;OAKG;IACH,OAAO,IAAI,IAAI;CAIhB"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * SMI-1310: TypeScript Language Adapter
3
+ *
4
+ * TypeScript/JavaScript adapter using the existing TypeScript compiler API.
5
+ * Falls back to tree-sitter for incremental parsing (SMI-1309).
6
+ *
7
+ * @see docs/architecture/multi-language-analysis.md
8
+ */
9
+ import { LanguageAdapter } from './base.js';
10
+ import { parseFile as tsParseFile } from '../parsers.js';
11
+ import { FRAMEWORK_RULES } from '../framework-detector.js';
12
+ /**
13
+ * TypeScript/JavaScript adapter
14
+ *
15
+ * Uses the existing TypeScript compiler API for maximum accuracy.
16
+ * Falls back to tree-sitter for incremental parsing.
17
+ *
18
+ * @example
19
+ * const adapter = new TypeScriptAdapter()
20
+ * const result = adapter.parseFile(content, 'src/index.ts')
21
+ * console.log(result.imports)
22
+ */
23
+ export class TypeScriptAdapter extends LanguageAdapter {
24
+ /** Language identifier */
25
+ language = 'typescript';
26
+ /** Supported file extensions */
27
+ extensions = ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'];
28
+ /**
29
+ * Parse a file using TypeScript compiler API
30
+ *
31
+ * Uses the existing parseFile function from parsers.ts
32
+ * for maximum accuracy and backward compatibility.
33
+ *
34
+ * @param content - File content to parse
35
+ * @param filePath - Relative path for source file tracking
36
+ * @returns Parsed imports, exports, and functions
37
+ */
38
+ parseFile(content, filePath) {
39
+ return tsParseFile(content, filePath);
40
+ }
41
+ /**
42
+ * Parse file incrementally
43
+ *
44
+ * Currently delegates to full parse. Tree-sitter incremental
45
+ * parsing will be implemented in SMI-1309.
46
+ *
47
+ * @param content - Updated content
48
+ * @param filePath - File path
49
+ * @param _previousTree - Previous parse tree (unused until SMI-1309)
50
+ * @returns Updated parse result
51
+ */
52
+ parseIncremental(content, filePath, _previousTree) {
53
+ // For now, delegate to full parse
54
+ // Incremental parsing via tree-sitter will be added in SMI-1309
55
+ return this.parseFile(content, filePath);
56
+ }
57
+ /**
58
+ * Get TypeScript/JavaScript framework detection rules
59
+ *
60
+ * Returns the existing FRAMEWORK_RULES from framework-detector.ts
61
+ * for backward compatibility.
62
+ *
63
+ * @returns Array of framework detection rules
64
+ */
65
+ getFrameworkRules() {
66
+ return FRAMEWORK_RULES;
67
+ }
68
+ /**
69
+ * Clean up resources
70
+ *
71
+ * No resources to clean up for TypeScript compiler API.
72
+ * Tree-sitter parser cleanup will be added in SMI-1309.
73
+ */
74
+ dispose() {
75
+ // No resources to clean up for TS compiler API
76
+ // Tree-sitter parser cleanup will be added in SMI-1309
77
+ }
78
+ }
79
+ //# sourceMappingURL=typescript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../../../src/analysis/adapters/typescript.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAA0B,MAAM,WAAW,CAAA;AACnE,OAAO,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,eAAe,CAAA;AACxD,OAAO,EAAE,eAAe,EAAsB,MAAM,0BAA0B,CAAA;AAG9E;;;;;;;;;;GAUG;AACH,MAAM,OAAO,iBAAkB,SAAQ,eAAe;IACpD,0BAA0B;IACjB,QAAQ,GAAsB,YAAY,CAAA;IAEnD,gCAAgC;IACvB,UAAU,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAEpE;;;;;;;;;OASG;IACH,SAAS,CAAC,OAAe,EAAE,QAAgB;QACzC,OAAO,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IACvC,CAAC;IAED;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,OAAe,EAAE,QAAgB,EAAE,aAAuB;QACzE,kCAAkC;QAClC,gEAAgE;QAChE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IAC1C,CAAC;IAED;;;;;;;OAOG;IACH,iBAAiB;QACf,OAAO,eAAe,CAAA;IACxB,CAAC;IAED;;;;;OAKG;IACH,OAAO;QACL,+CAA+C;QAC/C,uDAAuD;IACzD,CAAC;CACF"}