@mrpatronz/nexusflow 2.12.1 → 2.14.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 (116) hide show
  1. package/dist/core/work-guidance.d.ts +4 -4
  2. package/dist/gui/assets/AgentsPage-CJMUiowX.js +3 -0
  3. package/dist/gui/assets/DashboardPage-CPMjNCSd.js +1 -0
  4. package/dist/gui/assets/GettingStartedPage-vdPpxxX3.js +1 -0
  5. package/dist/gui/assets/MonacoDiffAdapter-p1QUAz5J.js +1 -0
  6. package/dist/gui/assets/ProjectsPage-vy3814fL.js +1 -0
  7. package/dist/gui/assets/ScaffoldRepoInline-C0aEuaen.js +1 -0
  8. package/dist/gui/assets/SettingsPage-CjrpeCko.js +1 -0
  9. package/dist/gui/assets/SkillsPage-BRczkn37.js +7 -0
  10. package/dist/gui/assets/StartWorkPage-Bb8nNYOL.js +1 -0
  11. package/dist/gui/assets/StrategiesPage-BYoYlyl3.js +3 -0
  12. package/dist/gui/assets/WorkroomsPage-C2QVQ1jm.js +4 -0
  13. package/dist/gui/assets/WorkspacesPage-BuQTcejb.js +16 -0
  14. package/dist/gui/assets/alert-CHAmIFAx.js +1 -0
  15. package/dist/gui/assets/alert-dialog-BQTrpDEB.js +1 -0
  16. package/dist/gui/assets/badge-BObbahyU.js +1 -0
  17. package/dist/gui/assets/button-BrcP8Wxx.js +1 -0
  18. package/dist/gui/assets/card-BMggHY3n.js +1 -0
  19. package/dist/gui/assets/chevron-down-Dy03VL1q.js +1 -0
  20. package/dist/gui/assets/{circle-plus--zM3-3r3.js → circle-plus-D0tjHKM4.js} +1 -1
  21. package/dist/gui/assets/{code-xml-DH-38Tt7.js → code-xml-DHWUQOSO.js} +1 -1
  22. package/dist/gui/assets/codicon-Brq4_Ui5.ttf +0 -0
  23. package/dist/gui/assets/editor.worker-CqMcl4Az.js +30 -0
  24. package/dist/gui/assets/index-D-sx2qJG.js +78 -0
  25. package/dist/gui/assets/index-n0pVdSJ7.css +2 -0
  26. package/dist/gui/assets/isElementDisabled-BONWqXlb.js +1 -0
  27. package/dist/gui/assets/jsx-runtime-DE3RlOCf.js +1 -0
  28. package/dist/gui/assets/{label-DC730X8s.js → label-C610MHwq.js} +1 -1
  29. package/dist/gui/assets/monaco-DLwhzYMT.js +849 -0
  30. package/dist/gui/assets/monaco-d9IpiNv7.css +1 -0
  31. package/dist/gui/assets/rolldown-runtime-hePW80VL.js +1 -0
  32. package/dist/gui/assets/shield-check-C5I2LDCK.js +1 -0
  33. package/dist/gui/assets/{square-check-big-Bj8Rf_dH.js → square-check-big-DpHMT26q.js} +1 -1
  34. package/dist/gui/assets/status-CKOvrZ16.js +1 -0
  35. package/dist/gui/assets/tabs-ClWne-mz.js +1 -0
  36. package/dist/gui/assets/{trash-2-CMdv3eD3.js → trash-2-BrrLX4tD.js} +1 -1
  37. package/dist/gui/assets/useAriaLabelledBy-DAWGcnTk.js +1 -0
  38. package/dist/gui/assets/useValueChanged-DfJmRF2P.js +1 -0
  39. package/dist/gui/assets/{vsc-BsVrJLSg.js → vsc-EOWFTqft.js} +1 -1
  40. package/dist/gui/index.html +12 -5
  41. package/dist/server.d.ts.map +1 -1
  42. package/dist/server.js +146 -32
  43. package/dist/server.js.map +1 -1
  44. package/dist/services/repository-file.d.ts +5 -0
  45. package/dist/services/repository-file.d.ts.map +1 -0
  46. package/dist/services/repository-file.js +36 -0
  47. package/dist/services/repository-file.js.map +1 -0
  48. package/dist/services/symbolService.d.ts +40 -0
  49. package/dist/services/symbolService.d.ts.map +1 -0
  50. package/dist/services/symbolService.js +687 -0
  51. package/dist/services/symbolService.js.map +1 -0
  52. package/dist/terminal/manager.d.ts +57 -0
  53. package/dist/terminal/manager.d.ts.map +1 -0
  54. package/dist/terminal/manager.js +256 -0
  55. package/dist/terminal/manager.js.map +1 -0
  56. package/dist/terminal/native.d.ts +6 -0
  57. package/dist/terminal/native.d.ts.map +1 -0
  58. package/dist/terminal/native.js +30 -0
  59. package/dist/terminal/native.js.map +1 -0
  60. package/dist/terminal/routes.d.ts +17 -0
  61. package/dist/terminal/routes.d.ts.map +1 -0
  62. package/dist/terminal/routes.js +207 -0
  63. package/dist/terminal/routes.js.map +1 -0
  64. package/dist/terminal/smoke.d.ts +2 -0
  65. package/dist/terminal/smoke.d.ts.map +1 -0
  66. package/dist/terminal/smoke.js +30 -0
  67. package/dist/terminal/smoke.js.map +1 -0
  68. package/dist/terminal/targets.d.ts +49 -0
  69. package/dist/terminal/targets.d.ts.map +1 -0
  70. package/dist/terminal/targets.js +94 -0
  71. package/dist/terminal/targets.js.map +1 -0
  72. package/dist/types.d.ts +5 -0
  73. package/dist/types.d.ts.map +1 -1
  74. package/dist/utils/detect-editors.d.ts.map +1 -1
  75. package/dist/utils/detect-editors.js +1 -0
  76. package/dist/utils/detect-editors.js.map +1 -1
  77. package/dist/utils/open-editor.d.ts +1 -1
  78. package/dist/utils/open-editor.d.ts.map +1 -1
  79. package/dist/utils/open-editor.js +5 -3
  80. package/dist/utils/open-editor.js.map +1 -1
  81. package/dist/utils/session-finder.d.ts +1 -0
  82. package/dist/utils/session-finder.d.ts.map +1 -1
  83. package/dist/utils/session-finder.js +66 -27
  84. package/dist/utils/session-finder.js.map +1 -1
  85. package/dist/utils/terminal-launch.d.ts.map +1 -1
  86. package/dist/utils/terminal-launch.js +5 -1
  87. package/dist/utils/terminal-launch.js.map +1 -1
  88. package/dist/utils/workspace-launch.d.ts +1 -1
  89. package/dist/utils/workspace-launch.d.ts.map +1 -1
  90. package/dist/utils/workspace-launch.js +2 -2
  91. package/dist/utils/workspace-launch.js.map +1 -1
  92. package/package.json +6 -1
  93. package/dist/gui/assets/AgentsPage-C7Rh_dp7.js +0 -3
  94. package/dist/gui/assets/DashboardPage-YVONGtqS.js +0 -1
  95. package/dist/gui/assets/GettingStartedPage-C2Kbvz_N.js +0 -1
  96. package/dist/gui/assets/ProjectsPage-DOpfV2Oj.js +0 -1
  97. package/dist/gui/assets/ScaffoldRepoInline-D91aitAi.js +0 -1
  98. package/dist/gui/assets/SettingsPage-BdaHN6fa.js +0 -1
  99. package/dist/gui/assets/SkillsPage-DT9lRkCg.js +0 -7
  100. package/dist/gui/assets/StartWorkPage-D932lq9x.js +0 -1
  101. package/dist/gui/assets/StrategiesPage-DCfS-wdu.js +0 -3
  102. package/dist/gui/assets/WorkroomsPage-BQU27nWS.js +0 -4
  103. package/dist/gui/assets/WorkspacesPage-D3TLVmq-.js +0 -13
  104. package/dist/gui/assets/alert-QnMXzwpU.js +0 -1
  105. package/dist/gui/assets/alert-dialog-YynbGyj1.js +0 -1
  106. package/dist/gui/assets/badge-DTBzXOWn.js +0 -1
  107. package/dist/gui/assets/button-CREn1mup.js +0 -1
  108. package/dist/gui/assets/card-yrg6ov8B.js +0 -1
  109. package/dist/gui/assets/chevron-down-B_Mwbim8.js +0 -1
  110. package/dist/gui/assets/git-branch-Ce0I2663.js +0 -1
  111. package/dist/gui/assets/index-er-mkc2S.css +0 -2
  112. package/dist/gui/assets/index-hTa55BQ6.js +0 -57
  113. package/dist/gui/assets/layers-j_brOuoa.js +0 -1
  114. package/dist/gui/assets/shield-check-Dd1Yv3l2.js +0 -1
  115. package/dist/gui/assets/tabs-DfW7Akjs.js +0 -1
  116. package/dist/gui/assets/useAriaLabelledBy-BmJErI5a.js +0 -1
@@ -0,0 +1,687 @@
1
+ import { createRequire } from 'node:module';
2
+ import path from 'node:path';
3
+ import { Parser, Language } from 'web-tree-sitter';
4
+ import { existsSync } from 'node:fs';
5
+ import { fileURLToPath } from 'node:url';
6
+ export const MonacoSymbolKind = {
7
+ File: 0,
8
+ Module: 1,
9
+ Namespace: 2,
10
+ Package: 3,
11
+ Class: 4,
12
+ Method: 5,
13
+ Property: 6,
14
+ Field: 7,
15
+ Constructor: 8,
16
+ Enum: 9,
17
+ Interface: 10,
18
+ Function: 11,
19
+ Variable: 12,
20
+ Constant: 13,
21
+ String: 14,
22
+ Number: 15,
23
+ Boolean: 16,
24
+ Array: 17,
25
+ Object: 18,
26
+ Key: 19,
27
+ Null: 20,
28
+ EnumMember: 21,
29
+ Struct: 22,
30
+ Event: 23,
31
+ Operator: 24,
32
+ TypeParameter: 25,
33
+ };
34
+ function getLanguageInfo(filePath) {
35
+ const ext = filePath.split('.').pop()?.toLowerCase();
36
+ switch (ext) {
37
+ case 'cs':
38
+ return { langName: 'c-sharp', wasmFile: 'tree-sitter-c-sharp.wasm' };
39
+ case 'ts':
40
+ case 'mts':
41
+ case 'cts':
42
+ return { langName: 'typescript', wasmFile: 'tree-sitter-typescript.wasm' };
43
+ case 'tsx':
44
+ return { langName: 'tsx', wasmFile: 'tree-sitter-tsx.wasm' };
45
+ case 'js':
46
+ case 'mjs':
47
+ case 'cjs':
48
+ return { langName: 'javascript', wasmFile: 'tree-sitter-javascript.wasm' };
49
+ case 'jsx':
50
+ return { langName: 'tsx', wasmFile: 'tree-sitter-tsx.wasm' };
51
+ case 'py':
52
+ return { langName: 'python', wasmFile: 'tree-sitter-python.wasm' };
53
+ case 'go':
54
+ return { langName: 'go', wasmFile: 'tree-sitter-go.wasm' };
55
+ case 'rs':
56
+ return { langName: 'rust', wasmFile: 'tree-sitter-rust.wasm' };
57
+ default:
58
+ return null;
59
+ }
60
+ }
61
+ let parserInitialized = false;
62
+ let initPromise = null;
63
+ const loadedLanguages = new Map();
64
+ async function ensureParserInitialized() {
65
+ if (parserInitialized)
66
+ return;
67
+ if (!initPromise) {
68
+ initPromise = (async () => {
69
+ await Parser.init();
70
+ parserInitialized = true;
71
+ })();
72
+ }
73
+ return initPromise;
74
+ }
75
+ function resolveWasmPath(filename) {
76
+ try {
77
+ const req = createRequire(import.meta.url);
78
+ return req.resolve(`@vscode/tree-sitter-wasm/wasm/${filename}`);
79
+ }
80
+ catch {
81
+ const directPath = path.resolve(process.cwd(), 'node_modules/@vscode/tree-sitter-wasm/wasm', filename);
82
+ if (existsSync(directPath)) {
83
+ return directPath;
84
+ }
85
+ return path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../node_modules/@vscode/tree-sitter-wasm/wasm', filename);
86
+ }
87
+ }
88
+ async function getLanguage(wasmFile) {
89
+ if (loadedLanguages.has(wasmFile)) {
90
+ return loadedLanguages.get(wasmFile);
91
+ }
92
+ try {
93
+ const wasmPath = resolveWasmPath(wasmFile);
94
+ const lang = await Language.load(wasmPath);
95
+ loadedLanguages.set(wasmFile, lang);
96
+ return lang;
97
+ }
98
+ catch (err) {
99
+ console.error(`Failed to load tree-sitter WASM grammar for ${wasmFile}:`, err);
100
+ return null;
101
+ }
102
+ }
103
+ function findIdentifierChild(node) {
104
+ const nameNode = node.childForFieldName('name');
105
+ if (nameNode)
106
+ return nameNode;
107
+ for (const child of node.children) {
108
+ if (child.type === 'identifier' ||
109
+ child.type === 'type_identifier' ||
110
+ child.type === 'property_identifier' ||
111
+ child.type === 'field_identifier') {
112
+ return child;
113
+ }
114
+ }
115
+ return null;
116
+ }
117
+ export async function extractAstSymbols(filePath, content) {
118
+ const langInfo = getLanguageInfo(filePath);
119
+ if (!langInfo || !content.trim()) {
120
+ return [];
121
+ }
122
+ try {
123
+ await ensureParserInitialized();
124
+ const lang = await getLanguage(langInfo.wasmFile);
125
+ if (!lang) {
126
+ return [];
127
+ }
128
+ const parser = new Parser();
129
+ parser.setLanguage(lang);
130
+ const tree = parser.parse(content);
131
+ if (!tree) {
132
+ return [];
133
+ }
134
+ const symbols = [];
135
+ const walk = (node, containerName) => {
136
+ let currentContainer = containerName;
137
+ let sym = null;
138
+ switch (langInfo.langName) {
139
+ case 'c-sharp': {
140
+ switch (node.type) {
141
+ case 'class_declaration':
142
+ case 'record_declaration': {
143
+ const nameNode = findIdentifierChild(node);
144
+ if (nameNode) {
145
+ sym = {
146
+ name: nameNode.text,
147
+ kind: MonacoSymbolKind.Class,
148
+ kindLabel: 'class',
149
+ lineNumber: nameNode.startPosition.row + 1,
150
+ endLineNumber: node.endPosition.row + 1,
151
+ column: nameNode.startPosition.column + 1,
152
+ containerName,
153
+ };
154
+ // Support C# 12 Primary Constructors
155
+ const paramList = node.children.find((c) => c.type === 'parameter_list');
156
+ if (paramList) {
157
+ symbols.push({
158
+ name: nameNode.text,
159
+ kind: MonacoSymbolKind.Constructor,
160
+ kindLabel: 'constructor',
161
+ lineNumber: paramList.startPosition.row + 1,
162
+ endLineNumber: paramList.endPosition.row + 1,
163
+ column: paramList.startPosition.column + 1,
164
+ containerName: nameNode.text,
165
+ });
166
+ }
167
+ }
168
+ break;
169
+ }
170
+ case 'interface_declaration': {
171
+ const nameNode = findIdentifierChild(node);
172
+ if (nameNode) {
173
+ sym = {
174
+ name: nameNode.text,
175
+ kind: MonacoSymbolKind.Interface,
176
+ kindLabel: 'interface',
177
+ lineNumber: nameNode.startPosition.row + 1,
178
+ endLineNumber: node.endPosition.row + 1,
179
+ column: nameNode.startPosition.column + 1,
180
+ containerName,
181
+ };
182
+ }
183
+ break;
184
+ }
185
+ case 'struct_declaration': {
186
+ const nameNode = findIdentifierChild(node);
187
+ if (nameNode) {
188
+ sym = {
189
+ name: nameNode.text,
190
+ kind: MonacoSymbolKind.Struct,
191
+ kindLabel: 'class',
192
+ lineNumber: nameNode.startPosition.row + 1,
193
+ endLineNumber: node.endPosition.row + 1,
194
+ column: nameNode.startPosition.column + 1,
195
+ containerName,
196
+ };
197
+ }
198
+ break;
199
+ }
200
+ case 'enum_declaration': {
201
+ const nameNode = findIdentifierChild(node);
202
+ if (nameNode) {
203
+ sym = {
204
+ name: nameNode.text,
205
+ kind: MonacoSymbolKind.Enum,
206
+ kindLabel: 'enum',
207
+ lineNumber: nameNode.startPosition.row + 1,
208
+ endLineNumber: node.endPosition.row + 1,
209
+ column: nameNode.startPosition.column + 1,
210
+ containerName,
211
+ };
212
+ }
213
+ break;
214
+ }
215
+ case 'constructor_declaration': {
216
+ const nameNode = findIdentifierChild(node);
217
+ if (nameNode) {
218
+ sym = {
219
+ name: nameNode.text,
220
+ kind: MonacoSymbolKind.Constructor,
221
+ kindLabel: 'constructor',
222
+ lineNumber: nameNode.startPosition.row + 1,
223
+ endLineNumber: node.endPosition.row + 1,
224
+ column: nameNode.startPosition.column + 1,
225
+ containerName,
226
+ };
227
+ }
228
+ break;
229
+ }
230
+ case 'method_declaration': {
231
+ const nameNode = findIdentifierChild(node);
232
+ if (nameNode) {
233
+ sym = {
234
+ name: nameNode.text,
235
+ kind: MonacoSymbolKind.Method,
236
+ kindLabel: 'method',
237
+ lineNumber: nameNode.startPosition.row + 1,
238
+ endLineNumber: node.endPosition.row + 1,
239
+ column: nameNode.startPosition.column + 1,
240
+ containerName,
241
+ };
242
+ }
243
+ break;
244
+ }
245
+ case 'property_declaration':
246
+ case 'indexer_declaration': {
247
+ const nameNode = findIdentifierChild(node);
248
+ if (nameNode) {
249
+ sym = {
250
+ name: nameNode.text,
251
+ kind: MonacoSymbolKind.Property,
252
+ kindLabel: 'property',
253
+ lineNumber: nameNode.startPosition.row + 1,
254
+ endLineNumber: node.endPosition.row + 1,
255
+ column: nameNode.startPosition.column + 1,
256
+ containerName,
257
+ };
258
+ }
259
+ break;
260
+ }
261
+ }
262
+ break;
263
+ }
264
+ case 'typescript':
265
+ case 'tsx':
266
+ case 'javascript': {
267
+ switch (node.type) {
268
+ case 'class_declaration': {
269
+ const nameNode = findIdentifierChild(node);
270
+ if (nameNode) {
271
+ sym = {
272
+ name: nameNode.text,
273
+ kind: MonacoSymbolKind.Class,
274
+ kindLabel: 'class',
275
+ lineNumber: nameNode.startPosition.row + 1,
276
+ endLineNumber: node.endPosition.row + 1,
277
+ column: nameNode.startPosition.column + 1,
278
+ containerName,
279
+ };
280
+ }
281
+ break;
282
+ }
283
+ case 'interface_declaration': {
284
+ const nameNode = findIdentifierChild(node);
285
+ if (nameNode) {
286
+ sym = {
287
+ name: nameNode.text,
288
+ kind: MonacoSymbolKind.Interface,
289
+ kindLabel: 'interface',
290
+ lineNumber: nameNode.startPosition.row + 1,
291
+ endLineNumber: node.endPosition.row + 1,
292
+ column: nameNode.startPosition.column + 1,
293
+ containerName,
294
+ };
295
+ }
296
+ break;
297
+ }
298
+ case 'type_alias_declaration': {
299
+ const nameNode = findIdentifierChild(node);
300
+ if (nameNode) {
301
+ sym = {
302
+ name: nameNode.text,
303
+ kind: MonacoSymbolKind.TypeParameter,
304
+ kindLabel: 'type',
305
+ lineNumber: nameNode.startPosition.row + 1,
306
+ endLineNumber: node.endPosition.row + 1,
307
+ column: nameNode.startPosition.column + 1,
308
+ containerName,
309
+ };
310
+ }
311
+ break;
312
+ }
313
+ case 'enum_declaration': {
314
+ const nameNode = findIdentifierChild(node);
315
+ if (nameNode) {
316
+ sym = {
317
+ name: nameNode.text,
318
+ kind: MonacoSymbolKind.Enum,
319
+ kindLabel: 'enum',
320
+ lineNumber: nameNode.startPosition.row + 1,
321
+ endLineNumber: node.endPosition.row + 1,
322
+ column: nameNode.startPosition.column + 1,
323
+ containerName,
324
+ };
325
+ }
326
+ break;
327
+ }
328
+ case 'function_declaration': {
329
+ const nameNode = findIdentifierChild(node);
330
+ if (nameNode) {
331
+ sym = {
332
+ name: nameNode.text,
333
+ kind: MonacoSymbolKind.Function,
334
+ kindLabel: 'function',
335
+ lineNumber: nameNode.startPosition.row + 1,
336
+ endLineNumber: node.endPosition.row + 1,
337
+ column: nameNode.startPosition.column + 1,
338
+ containerName,
339
+ };
340
+ }
341
+ break;
342
+ }
343
+ case 'method_definition': {
344
+ const nameNode = findIdentifierChild(node);
345
+ if (nameNode) {
346
+ const isCtor = nameNode.text === 'constructor';
347
+ sym = {
348
+ name: nameNode.text,
349
+ kind: isCtor ? MonacoSymbolKind.Constructor : MonacoSymbolKind.Method,
350
+ kindLabel: isCtor ? 'constructor' : 'method',
351
+ lineNumber: nameNode.startPosition.row + 1,
352
+ endLineNumber: node.endPosition.row + 1,
353
+ column: nameNode.startPosition.column + 1,
354
+ containerName,
355
+ };
356
+ }
357
+ break;
358
+ }
359
+ case 'public_field_definition':
360
+ case 'field_definition':
361
+ case 'property_definition':
362
+ case 'property_signature': {
363
+ const nameNode = findIdentifierChild(node);
364
+ if (nameNode) {
365
+ sym = {
366
+ name: nameNode.text,
367
+ kind: MonacoSymbolKind.Property,
368
+ kindLabel: 'property',
369
+ lineNumber: nameNode.startPosition.row + 1,
370
+ endLineNumber: node.endPosition.row + 1,
371
+ column: nameNode.startPosition.column + 1,
372
+ containerName,
373
+ };
374
+ }
375
+ break;
376
+ }
377
+ case 'method_signature': {
378
+ const nameNode = findIdentifierChild(node);
379
+ if (nameNode) {
380
+ sym = {
381
+ name: nameNode.text,
382
+ kind: MonacoSymbolKind.Method,
383
+ kindLabel: 'method',
384
+ lineNumber: nameNode.startPosition.row + 1,
385
+ endLineNumber: node.endPosition.row + 1,
386
+ column: nameNode.startPosition.column + 1,
387
+ containerName,
388
+ };
389
+ }
390
+ break;
391
+ }
392
+ case 'variable_declarator': {
393
+ const nameNode = findIdentifierChild(node);
394
+ const val = node.childForFieldName('value');
395
+ if (nameNode) {
396
+ const isFn = val &&
397
+ (val.type === 'arrow_function' ||
398
+ val.type === 'function_expression' ||
399
+ val.type === 'function');
400
+ sym = {
401
+ name: nameNode.text,
402
+ kind: isFn ? MonacoSymbolKind.Function : MonacoSymbolKind.Variable,
403
+ kindLabel: isFn ? 'function' : 'variable',
404
+ lineNumber: nameNode.startPosition.row + 1,
405
+ endLineNumber: node.endPosition.row + 1,
406
+ column: nameNode.startPosition.column + 1,
407
+ containerName,
408
+ };
409
+ }
410
+ break;
411
+ }
412
+ }
413
+ break;
414
+ }
415
+ case 'python': {
416
+ switch (node.type) {
417
+ case 'class_definition': {
418
+ const nameNode = findIdentifierChild(node);
419
+ if (nameNode) {
420
+ sym = {
421
+ name: nameNode.text,
422
+ kind: MonacoSymbolKind.Class,
423
+ kindLabel: 'class',
424
+ lineNumber: nameNode.startPosition.row + 1,
425
+ endLineNumber: node.endPosition.row + 1,
426
+ column: nameNode.startPosition.column + 1,
427
+ containerName,
428
+ };
429
+ }
430
+ break;
431
+ }
432
+ case 'function_definition': {
433
+ const nameNode = findIdentifierChild(node);
434
+ if (nameNode) {
435
+ const isCtor = containerName !== undefined &&
436
+ (nameNode.text === '__init__' || nameNode.text === '__new__');
437
+ const isProp = node.parent?.type === 'decorated_definition' &&
438
+ node.parent.children.some((c) => c.type === 'decorator' && c.text.includes('property'));
439
+ const isMethod = containerName !== undefined && !isCtor && !isProp;
440
+ sym = {
441
+ name: nameNode.text,
442
+ kind: isCtor
443
+ ? MonacoSymbolKind.Constructor
444
+ : isProp
445
+ ? MonacoSymbolKind.Property
446
+ : isMethod
447
+ ? MonacoSymbolKind.Method
448
+ : MonacoSymbolKind.Function,
449
+ kindLabel: isCtor ? 'constructor' : isProp ? 'property' : isMethod ? 'method' : 'function',
450
+ lineNumber: nameNode.startPosition.row + 1,
451
+ endLineNumber: (node.parent?.type === 'decorated_definition' ? node.parent : node).endPosition.row + 1,
452
+ column: nameNode.startPosition.column + 1,
453
+ containerName,
454
+ };
455
+ }
456
+ break;
457
+ }
458
+ case 'expression_statement': {
459
+ if (containerName && node.children.some((c) => c.type === 'assignment')) {
460
+ const assign = node.children.find((c) => c.type === 'assignment');
461
+ const left = assign.childForFieldName('left') || assign.children[0];
462
+ if (left && (left.type === 'identifier' || left.type === 'type_identifier')) {
463
+ sym = {
464
+ name: left.text,
465
+ kind: MonacoSymbolKind.Property,
466
+ kindLabel: 'property',
467
+ lineNumber: left.startPosition.row + 1,
468
+ endLineNumber: node.endPosition.row + 1,
469
+ column: left.startPosition.column + 1,
470
+ containerName,
471
+ };
472
+ }
473
+ }
474
+ break;
475
+ }
476
+ }
477
+ break;
478
+ }
479
+ case 'go': {
480
+ switch (node.type) {
481
+ case 'type_spec': {
482
+ const nameNode = findIdentifierChild(node);
483
+ const typeChild = node.childForFieldName('type');
484
+ if (nameNode) {
485
+ const isIface = typeChild?.type === 'interface_type';
486
+ const isStruct = typeChild?.type === 'struct_type';
487
+ sym = {
488
+ name: nameNode.text,
489
+ kind: isIface
490
+ ? MonacoSymbolKind.Interface
491
+ : isStruct
492
+ ? MonacoSymbolKind.Class
493
+ : MonacoSymbolKind.TypeParameter,
494
+ kindLabel: isIface ? 'interface' : isStruct ? 'class' : 'type',
495
+ lineNumber: nameNode.startPosition.row + 1,
496
+ endLineNumber: node.endPosition.row + 1,
497
+ column: nameNode.startPosition.column + 1,
498
+ containerName,
499
+ };
500
+ }
501
+ break;
502
+ }
503
+ case 'method_declaration': {
504
+ const nameNode = findIdentifierChild(node);
505
+ if (nameNode) {
506
+ sym = {
507
+ name: nameNode.text,
508
+ kind: MonacoSymbolKind.Method,
509
+ kindLabel: 'method',
510
+ lineNumber: nameNode.startPosition.row + 1,
511
+ endLineNumber: node.endPosition.row + 1,
512
+ column: nameNode.startPosition.column + 1,
513
+ containerName,
514
+ };
515
+ }
516
+ break;
517
+ }
518
+ case 'method_elem':
519
+ case 'method_spec': {
520
+ const nameNode = findIdentifierChild(node);
521
+ if (nameNode) {
522
+ sym = {
523
+ name: nameNode.text,
524
+ kind: MonacoSymbolKind.Method,
525
+ kindLabel: 'method',
526
+ lineNumber: nameNode.startPosition.row + 1,
527
+ endLineNumber: node.endPosition.row + 1,
528
+ column: nameNode.startPosition.column + 1,
529
+ containerName,
530
+ };
531
+ }
532
+ break;
533
+ }
534
+ case 'field_declaration': {
535
+ const nameNode = findIdentifierChild(node);
536
+ if (nameNode) {
537
+ sym = {
538
+ name: nameNode.text,
539
+ kind: MonacoSymbolKind.Property,
540
+ kindLabel: 'property',
541
+ lineNumber: nameNode.startPosition.row + 1,
542
+ endLineNumber: node.endPosition.row + 1,
543
+ column: nameNode.startPosition.column + 1,
544
+ containerName,
545
+ };
546
+ }
547
+ break;
548
+ }
549
+ case 'function_declaration': {
550
+ const nameNode = findIdentifierChild(node);
551
+ if (nameNode) {
552
+ sym = {
553
+ name: nameNode.text,
554
+ kind: MonacoSymbolKind.Function,
555
+ kindLabel: 'function',
556
+ lineNumber: nameNode.startPosition.row + 1,
557
+ endLineNumber: node.endPosition.row + 1,
558
+ column: nameNode.startPosition.column + 1,
559
+ containerName,
560
+ };
561
+ }
562
+ break;
563
+ }
564
+ }
565
+ break;
566
+ }
567
+ case 'rust': {
568
+ switch (node.type) {
569
+ case 'struct_item': {
570
+ const nameNode = findIdentifierChild(node);
571
+ if (nameNode) {
572
+ sym = {
573
+ name: nameNode.text,
574
+ kind: MonacoSymbolKind.Class,
575
+ kindLabel: 'class',
576
+ lineNumber: nameNode.startPosition.row + 1,
577
+ endLineNumber: node.endPosition.row + 1,
578
+ column: nameNode.startPosition.column + 1,
579
+ containerName,
580
+ };
581
+ }
582
+ break;
583
+ }
584
+ case 'enum_item': {
585
+ const nameNode = findIdentifierChild(node);
586
+ if (nameNode) {
587
+ sym = {
588
+ name: nameNode.text,
589
+ kind: MonacoSymbolKind.Enum,
590
+ kindLabel: 'enum',
591
+ lineNumber: nameNode.startPosition.row + 1,
592
+ endLineNumber: node.endPosition.row + 1,
593
+ column: nameNode.startPosition.column + 1,
594
+ containerName,
595
+ };
596
+ }
597
+ break;
598
+ }
599
+ case 'trait_item': {
600
+ const nameNode = findIdentifierChild(node);
601
+ if (nameNode) {
602
+ sym = {
603
+ name: nameNode.text,
604
+ kind: MonacoSymbolKind.Interface,
605
+ kindLabel: 'interface',
606
+ lineNumber: nameNode.startPosition.row + 1,
607
+ endLineNumber: node.endPosition.row + 1,
608
+ column: nameNode.startPosition.column + 1,
609
+ containerName,
610
+ };
611
+ }
612
+ break;
613
+ }
614
+ case 'impl_item': {
615
+ const typeNode = node.childForFieldName('type');
616
+ if (typeNode) {
617
+ currentContainer = typeNode.text;
618
+ }
619
+ break;
620
+ }
621
+ case 'field_declaration': {
622
+ const nameNode = findIdentifierChild(node);
623
+ if (nameNode) {
624
+ sym = {
625
+ name: nameNode.text,
626
+ kind: MonacoSymbolKind.Property,
627
+ kindLabel: 'property',
628
+ lineNumber: nameNode.startPosition.row + 1,
629
+ endLineNumber: node.endPosition.row + 1,
630
+ column: nameNode.startPosition.column + 1,
631
+ containerName,
632
+ };
633
+ }
634
+ break;
635
+ }
636
+ case 'function_item': {
637
+ const nameNode = findIdentifierChild(node);
638
+ if (nameNode) {
639
+ const isMethod = Boolean(containerName);
640
+ sym = {
641
+ name: nameNode.text,
642
+ kind: isMethod ? MonacoSymbolKind.Method : MonacoSymbolKind.Function,
643
+ kindLabel: isMethod ? 'method' : 'function',
644
+ lineNumber: nameNode.startPosition.row + 1,
645
+ endLineNumber: node.endPosition.row + 1,
646
+ column: nameNode.startPosition.column + 1,
647
+ containerName,
648
+ };
649
+ }
650
+ break;
651
+ }
652
+ case 'function_signature_item': {
653
+ const nameNode = findIdentifierChild(node);
654
+ if (nameNode) {
655
+ sym = {
656
+ name: nameNode.text,
657
+ kind: MonacoSymbolKind.Method,
658
+ kindLabel: 'method',
659
+ lineNumber: nameNode.startPosition.row + 1,
660
+ endLineNumber: node.endPosition.row + 1,
661
+ column: nameNode.startPosition.column + 1,
662
+ containerName,
663
+ };
664
+ }
665
+ break;
666
+ }
667
+ }
668
+ break;
669
+ }
670
+ }
671
+ if (sym) {
672
+ symbols.push(sym);
673
+ currentContainer = sym.name;
674
+ }
675
+ for (const child of node.children) {
676
+ walk(child, currentContainer);
677
+ }
678
+ };
679
+ walk(tree.rootNode);
680
+ return symbols;
681
+ }
682
+ catch (err) {
683
+ console.error(`Error extracting AST symbols for ${filePath}:`, err);
684
+ return [];
685
+ }
686
+ }
687
+ //# sourceMappingURL=symbolService.js.map