@wrongstack/tools 0.313.0 → 0.313.1

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 (134) hide show
  1. package/dist/audit.js +10 -4055
  2. package/dist/bash.js +9 -2308
  3. package/dist/batch-tool-use.js +2 -187
  4. package/dist/browser/index.js +25 -1339
  5. package/dist/builtin.js +69 -33949
  6. package/dist/chunk-2CTB3UK5.js +197 -0
  7. package/dist/chunk-2ME7ZWDD.js +1272 -0
  8. package/dist/chunk-2TFQDEPU.js +113 -0
  9. package/dist/chunk-2ZCJNKFE.js +315 -0
  10. package/dist/chunk-3PVYQFRQ.js +472 -0
  11. package/dist/chunk-3QMQBO5Z.js +89 -0
  12. package/dist/chunk-42AKKX7O.js +385 -0
  13. package/dist/chunk-42SKEETB.js +113 -0
  14. package/dist/chunk-4BHUSMNL.js +104 -0
  15. package/dist/chunk-4I4LWFOO.js +431 -0
  16. package/dist/chunk-553IQUMO.js +478 -0
  17. package/dist/chunk-55KF77OK.js +1944 -0
  18. package/dist/chunk-6HLZK37X.js +359 -0
  19. package/dist/chunk-6RNIFLG4.js +305 -0
  20. package/dist/chunk-A6BRWIXN.js +317 -0
  21. package/dist/chunk-AHHDWNXC.js +200 -0
  22. package/dist/chunk-B2CIOKWP.js +899 -0
  23. package/dist/chunk-BTSFTGIL.js +7 -0
  24. package/dist/chunk-D33S4RQG.js +222 -0
  25. package/dist/chunk-DIJKHSUO.js +134 -0
  26. package/dist/chunk-DPL47QGS.js +3515 -0
  27. package/dist/chunk-EMRGN4KM.js +170 -0
  28. package/dist/chunk-FGOABE4Z.js +955 -0
  29. package/dist/chunk-FW65TP4G.js +520 -0
  30. package/dist/chunk-GOIZNNOA.js +221 -0
  31. package/dist/chunk-H5MJUAA6.js +295 -0
  32. package/dist/chunk-H5OHH6F4.js +223 -0
  33. package/dist/chunk-HC5RM4WY.js +199 -0
  34. package/dist/chunk-HEQFMLZ7.js +190 -0
  35. package/dist/chunk-HFXSNKCV.js +196 -0
  36. package/dist/chunk-HXSBQ2SE.js +1723 -0
  37. package/dist/chunk-ILESNGNM.js +163 -0
  38. package/dist/chunk-INF5CGAO.js +137 -0
  39. package/dist/chunk-IWDFZ6XR.js +337 -0
  40. package/dist/chunk-IXMNTNW5.js +238 -0
  41. package/dist/chunk-J4SRJKBW.js +428 -0
  42. package/dist/chunk-J5SKD6LN.js +235 -0
  43. package/dist/chunk-JRJJX3L5.js +424 -0
  44. package/dist/chunk-KXNDHMUB.js +366 -0
  45. package/dist/chunk-LIJQMYYX.js +59 -0
  46. package/dist/chunk-MAN26PZ5.js +260 -0
  47. package/dist/chunk-MKRQMLZA.js +474 -0
  48. package/dist/chunk-NBDZMMG2.js +169 -0
  49. package/dist/chunk-NHA6BEIH.js +101 -0
  50. package/dist/chunk-OA6YJIWL.js +4412 -0
  51. package/dist/chunk-OZC255IC.js +2830 -0
  52. package/dist/chunk-PUR6WU2B.js +154 -0
  53. package/dist/chunk-Q5JPPCZC.js +12 -0
  54. package/dist/chunk-QBV725YG.js +128 -0
  55. package/dist/chunk-QHVW4AAM.js +892 -0
  56. package/dist/chunk-QNJ7AQ4B.js +1000 -0
  57. package/dist/chunk-RGISBZBD.js +231 -0
  58. package/dist/chunk-RJZQWEMS.js +84 -0
  59. package/dist/chunk-RP2ZA47V.js +15 -0
  60. package/dist/chunk-RXISBFR5.js +315 -0
  61. package/dist/chunk-S5CCLZL3.js +99 -0
  62. package/dist/chunk-TVTCSBJF.js +122 -0
  63. package/dist/chunk-U4D5S3VQ.js +21 -0
  64. package/dist/chunk-U4VAATKP.js +193 -0
  65. package/dist/chunk-UKU2ZX4C.js +203 -0
  66. package/dist/chunk-UNSKG6DC.js +159 -0
  67. package/dist/chunk-URFKEIHM.js +1091 -0
  68. package/dist/chunk-UTV7YAW7.js +178 -0
  69. package/dist/chunk-V43EQ6VR.js +68 -0
  70. package/dist/chunk-VB3MJGCV.js +610 -0
  71. package/dist/chunk-WHIIIREL.js +223 -0
  72. package/dist/chunk-XMIFYKUT.js +1371 -0
  73. package/dist/chunk-YF2RSV34.js +54 -0
  74. package/dist/chunk-Z6DAKQ3U.js +1 -0
  75. package/dist/chunk-ZIGAZFWE.js +522 -0
  76. package/dist/circuit-breaker.js +3 -191
  77. package/dist/codebase-index/index.js +84 -13688
  78. package/dist/codebase-index/parser-worker-script.js +8 -3995
  79. package/dist/codebase-index/project-server.js +60 -8548
  80. package/dist/codebase-index/worker.js +20 -8416
  81. package/dist/design.js +2 -299
  82. package/dist/diff.js +4 -256
  83. package/dist/document.js +4 -222
  84. package/dist/e2e.js +5 -476
  85. package/dist/edit.js +14 -10200
  86. package/dist/exec.js +16 -3131
  87. package/dist/fetch.js +8 -398
  88. package/dist/format.js +10 -3750
  89. package/dist/generic-parser-VUXDIAOZ.js +13 -0
  90. package/dist/git.js +4 -380
  91. package/dist/glob.js +6 -280
  92. package/dist/go-parser-6CA77WZ4.js +469 -0
  93. package/dist/grep.js +7 -604
  94. package/dist/index.js +318 -35387
  95. package/dist/install.js +10 -4091
  96. package/dist/json-parser-7YMDJSBJ.js +213 -0
  97. package/dist/json.js +4 -665
  98. package/dist/kanban.js +3 -2096
  99. package/dist/languages/index.js +23 -4664
  100. package/dist/legacy-bridge-7UKZT46G.js +18 -0
  101. package/dist/lint.js +10 -3706
  102. package/dist/logs.js +4 -287
  103. package/dist/memory.js +6 -215
  104. package/dist/mode.js +3 -99
  105. package/dist/outdated.js +4 -5170
  106. package/dist/pack.js +65 -33897
  107. package/dist/parser-dispatch-VPOFDO2U.js +14 -0
  108. package/dist/patch.js +13 -9935
  109. package/dist/plan.js +5 -3286
  110. package/dist/process-registry.js +8 -651
  111. package/dist/ps-slash.js +12 -1439
  112. package/dist/py-parser-GPM5VYRG.js +16 -0
  113. package/dist/read.js +13 -9816
  114. package/dist/replace.js +15 -10014
  115. package/dist/rs-parser-WVQ4KYCX.js +81 -0
  116. package/dist/scaffold.js +4 -253
  117. package/dist/search.js +5 -585
  118. package/dist/session-kanban.js +30 -972
  119. package/dist/skill.js +2 -215
  120. package/dist/task.js +5 -3410
  121. package/dist/test.js +10 -3773
  122. package/dist/todo.js +4 -2891
  123. package/dist/tool-help.js +3 -123
  124. package/dist/tool-search.js +3 -79
  125. package/dist/tool-tier.js +68 -33984
  126. package/dist/tool-use.js +2 -93
  127. package/dist/tree-sitter-parser-YCILHGZD.js +17 -0
  128. package/dist/tree.js +4 -288
  129. package/dist/ts-parser-YH4ZMWMH.js +232 -0
  130. package/dist/typecheck.js +10 -3753
  131. package/dist/win32.js +6 -60
  132. package/dist/write.js +14 -9882
  133. package/dist/yaml-parser-GFAOKV53.js +157 -0
  134. package/package.json +5 -5
@@ -0,0 +1,469 @@
1
+ import {
2
+ parseParserOutput,
3
+ withSpawnGate
4
+ } from "./chunk-42SKEETB.js";
5
+ import {
6
+ detectLang
7
+ } from "./chunk-ILESNGNM.js";
8
+ import {
9
+ resolveWin32Command
10
+ } from "./chunk-V43EQ6VR.js";
11
+
12
+ // src/codebase-index/go-parser.ts
13
+ import { spawn } from "node:child_process";
14
+ import * as os from "node:os";
15
+ import * as path from "node:path";
16
+ import * as fs from "node:fs/promises";
17
+ async function parseSymbols(opts) {
18
+ const { file, content, lang } = opts;
19
+ try {
20
+ const parsed = await withSpawnGate(() => syncGoParse(file, content, lang));
21
+ if (parsed.symbols.length > 0) {
22
+ return parsed;
23
+ }
24
+ const fallback = fallbackParse(file, content, lang);
25
+ return parsed.refs?.length ? { ...fallback, refs: parsed.refs } : fallback;
26
+ } catch {
27
+ return fallbackParse(file, content, lang);
28
+ }
29
+ }
30
+ function fallbackParse(filePath, content, lang) {
31
+ if (!/^\s*package\s+[A-Za-z_]\w*/m.test(content) || hasUnbalancedDelimiters(content)) {
32
+ return { file: filePath, lang, symbols: [], mtimeMs: Date.now() };
33
+ }
34
+ const symbols = [];
35
+ const packageName = content.match(/^\s*package\s+([A-Za-z_]\w*)/m)?.[1] ?? "";
36
+ const lines = content.split(/\r?\n/);
37
+ for (const [idx, line] of lines.entries()) {
38
+ const trimmed = line.trimStart();
39
+ const col = line.length - trimmed.length + 1;
40
+ const fn = /^func\s+(?:\([^)]*\)\s*)?([A-Za-z_]\w*)\s*\(/.exec(trimmed);
41
+ if (fn?.[1]) {
42
+ addFallbackSymbol(symbols, {
43
+ filePath,
44
+ lang,
45
+ kind: trimmed.startsWith("func (") ? "method" : "function",
46
+ name: fn[1],
47
+ line: idx + 1,
48
+ col,
49
+ signature: trimmed,
50
+ scope: packageName ? `${packageName}.${fn[1]}` : fn[1]
51
+ });
52
+ continue;
53
+ }
54
+ const typeDecl = /^type\s+([A-Za-z_]\w*)\b/.exec(trimmed);
55
+ if (typeDecl?.[1]) {
56
+ addFallbackSymbol(symbols, {
57
+ filePath,
58
+ lang,
59
+ kind: "type",
60
+ name: typeDecl[1],
61
+ line: idx + 1,
62
+ col,
63
+ signature: trimmed,
64
+ scope: packageName
65
+ });
66
+ continue;
67
+ }
68
+ const valueDecl = /^(const|var)\s+([A-Za-z_]\w*)\b/.exec(trimmed);
69
+ if (valueDecl?.[1] && valueDecl[2]) {
70
+ addFallbackSymbol(symbols, {
71
+ filePath,
72
+ lang,
73
+ kind: valueDecl[1],
74
+ name: valueDecl[2],
75
+ line: idx + 1,
76
+ col,
77
+ signature: trimmed,
78
+ scope: packageName
79
+ });
80
+ }
81
+ }
82
+ return { file: filePath, lang, symbols, mtimeMs: Date.now() };
83
+ }
84
+ function addFallbackSymbol(symbols, opts) {
85
+ symbols.push({
86
+ id: 0,
87
+ lang: opts.lang,
88
+ kind: opts.kind,
89
+ name: opts.name,
90
+ file: opts.filePath,
91
+ line: opts.line,
92
+ col: opts.col,
93
+ signature: opts.signature,
94
+ docComment: "",
95
+ scope: opts.scope,
96
+ text: `${opts.name} ${opts.signature}`.trim()
97
+ });
98
+ }
99
+ function hasUnbalancedDelimiters(content) {
100
+ const pairs = { "(": ")", "[": "]", "{": "}" };
101
+ const closers = new Set(Object.values(pairs));
102
+ const stack = [];
103
+ for (const ch of content) {
104
+ if (pairs[ch]) {
105
+ stack.push(pairs[ch]);
106
+ } else if (closers.has(ch) && stack.pop() !== ch) {
107
+ return true;
108
+ }
109
+ }
110
+ return stack.length > 0;
111
+ }
112
+ var GO_PARSE_SCRIPT = `
113
+ package main
114
+
115
+ import (
116
+ "encoding/json"
117
+ "fmt"
118
+ "go/ast"
119
+ "go/parser"
120
+ "go/token"
121
+ "io"
122
+ "os"
123
+ "strconv"
124
+ "strings"
125
+ )
126
+
127
+ type Sym struct {
128
+ Name string \`json:"name"\`
129
+ Kind string \`json:"kind"\`
130
+ Line int \`json:"line"\`
131
+ Col int \`json:"col"\`
132
+ Signature string \`json:"signature"\`
133
+ Scope string \`json:"scope"\`
134
+ }
135
+
136
+ // Ref is a cross-reference emitted alongside the symbols, so one \`go run\`
137
+ // yields both. Module is the import path for CallType "import", else empty.
138
+ type Ref struct {
139
+ ToName string \`json:"toName"\`
140
+ CallType string \`json:"callType"\`
141
+ Line int \`json:"line"\`
142
+ Module string \`json:"module"\`
143
+ }
144
+
145
+ type Result struct {
146
+ Symbols []Sym \`json:"symbols"\`
147
+ Refs []Ref \`json:"refs"\`
148
+ }
149
+
150
+ func emptyResult() string {
151
+ return "{\\"symbols\\":[],\\"refs\\":[]}"
152
+ }
153
+
154
+ func main() {
155
+ src, err := io.ReadAll(os.Stdin)
156
+ if err != nil {
157
+ fmt.Print(emptyResult())
158
+ return
159
+ }
160
+ fset := token.NewFileSet()
161
+ node, err := parser.ParseFile(fset, "src.go", src, 0)
162
+ if err != nil {
163
+ fmt.Print(emptyResult())
164
+ return
165
+ }
166
+
167
+ var syms []Sym
168
+
169
+ // Package-level scope
170
+ pkgScope := node.Name.Name
171
+
172
+ // Collect all top-level declarations
173
+ for _, decl := range node.Decls {
174
+ switch d := decl.(type) {
175
+ case *ast.FuncDecl:
176
+ name := d.Name.Name
177
+ kind := "function"
178
+ scope := pkgScope
179
+ if d.Recv != nil && len(d.Recv.List) > 0 {
180
+ scope = pkgScope + "." + recvTypeName(d.Recv.List[0].Type) + "." + name
181
+ kind = "method"
182
+ } else {
183
+ scope = pkgScope + "." + name
184
+ }
185
+ pos := fset.Position(d.Pos())
186
+ sig := formatFuncSig(d)
187
+ syms = append(syms, Sym{Name: name, Kind: kind, Line: pos.Line, Col: pos.Column, Signature: sig, Scope: scope})
188
+
189
+ case *ast.GenDecl:
190
+ for _, spec := range d.Specs {
191
+ switch s := spec.(type) {
192
+ case *ast.TypeSpec:
193
+ name := s.Name.Name
194
+ pos := fset.Position(s.Pos())
195
+ sig := "type " + name
196
+ if s.TypeParams != nil {
197
+ sig += formatTypeParams(s.TypeParams)
198
+ }
199
+ if st, ok := s.Type.(*ast.StructType); ok {
200
+ sig += " = struct { " + formatFields(st.Fields.List) + " }"
201
+ } else if it, ok := s.Type.(*ast.InterfaceType); ok {
202
+ sig += " = interface { " + formatMethods(it.Methods.List) + " }"
203
+ } else {
204
+ sig += " = " + formatType(s.Type)
205
+ }
206
+ syms = append(syms, Sym{Name: name, Kind: "type", Line: pos.Line, Col: pos.Column, Signature: sig, Scope: pkgScope})
207
+
208
+ case *ast.ValueSpec:
209
+ for _, n := range s.Names {
210
+ name := n.Name
211
+ pos := fset.Position(n.Pos())
212
+ kind := "var"
213
+ if d.Tok == token.CONST {
214
+ kind = "const"
215
+ }
216
+ sig := kind + " " + name
217
+ if s.Type != nil {
218
+ sig += " " + formatType(s.Type)
219
+ }
220
+ syms = append(syms, Sym{Name: name, Kind: kind, Line: pos.Line, Col: pos.Column, Signature: sig, Scope: pkgScope})
221
+ }
222
+ }
223
+ }
224
+ }
225
+ }
226
+
227
+ refs := []Ref{}
228
+ ast.Inspect(node, func(n ast.Node) bool {
229
+ switch expr := n.(type) {
230
+ case *ast.CallExpr:
231
+ line := fset.Position(expr.Pos()).Line
232
+ switch fun := expr.Fun.(type) {
233
+ case *ast.Ident:
234
+ refs = append(refs, Ref{ToName: fun.Name, CallType: "call", Line: line})
235
+ case *ast.SelectorExpr:
236
+ // Record the selected name (\`Join\` of \`filepath.Join\`): it is the
237
+ // declared symbol name, so it resolves the same way the TypeScript
238
+ // and Python extractors' call refs do.
239
+ refs = append(refs, Ref{ToName: fun.Sel.Name, CallType: "call", Line: line})
240
+ }
241
+ case *ast.ImportSpec:
242
+ if expr.Path != nil {
243
+ if importPath, uerr := strconv.Unquote(expr.Path.Value); uerr == nil {
244
+ line := fset.Position(expr.Pos()).Line
245
+ // A Go import names a package, not a symbol; the package's
246
+ // last path segment is the name it is referenced by.
247
+ name := importPath
248
+ if idx := strings.LastIndex(importPath, "/"); idx >= 0 {
249
+ name = importPath[idx+1:]
250
+ }
251
+ refs = append(refs, Ref{ToName: name, CallType: "import", Line: line, Module: importPath})
252
+ }
253
+ }
254
+ }
255
+ return true
256
+ })
257
+
258
+ if syms == nil {
259
+ syms = []Sym{}
260
+ }
261
+ data, err := json.Marshal(Result{Symbols: syms, Refs: refs})
262
+ if err != nil {
263
+ fmt.Print(emptyResult())
264
+ return
265
+ }
266
+ fmt.Print(string(data))
267
+ }
268
+
269
+ func recvTypeName(t ast.Expr) string {
270
+ switch v := t.(type) {
271
+ case *ast.Ident:
272
+ return v.Name
273
+ case *ast.StarExpr:
274
+ return recvTypeName(v.X)
275
+ default:
276
+ return "?"
277
+ }
278
+ }
279
+
280
+ func formatFuncSig(d *ast.FuncDecl) string {
281
+ scope := ""
282
+ if d.Recv != nil && len(d.Recv.List) > 0 {
283
+ scope = "(" + formatFieldList(d.Recv.List) + ") "
284
+ }
285
+ scope += formatFuncType(d.Type)
286
+ return "func " + scope
287
+ }
288
+
289
+ func formatFuncType(f *ast.FuncType) string {
290
+ params := formatFieldList(f.Params.List)
291
+ results := ""
292
+ if f.Results != nil {
293
+ results = " -> " + formatFieldList(f.Results.List)
294
+ }
295
+ return params + results
296
+ }
297
+
298
+ func formatFieldList(fields []*ast.Field) string {
299
+ if len(fields) == 0 {
300
+ return "()"
301
+ }
302
+ names := make([]string, 0, len(fields))
303
+ for _, f := range fields {
304
+ name := ""
305
+ if len(f.Names) > 0 {
306
+ name = f.Names[0].Name
307
+ }
308
+ t := formatType(f.Type)
309
+ if name != "" {
310
+ names = append(names, name+" "+t)
311
+ } else {
312
+ names = append(names, t)
313
+ }
314
+ }
315
+ return "(" + strings.Join(names, ", ") + ")"
316
+ }
317
+
318
+ func formatFields(fields []*ast.Field) string {
319
+ lines := make([]string, 0)
320
+ for _, f := range fields {
321
+ name := ""
322
+ if len(f.Names) > 0 {
323
+ name = f.Names[0].Name
324
+ }
325
+ t := formatType(f.Type)
326
+ if name != "" {
327
+ lines = append(lines, name+" "+t)
328
+ } else {
329
+ lines = append(lines, t)
330
+ }
331
+ }
332
+ return strings.Join(lines, "; ")
333
+ }
334
+
335
+ func formatMethods(fields []*ast.Field) string {
336
+ return formatFields(fields)
337
+ }
338
+
339
+ func formatTypeParams(tp *ast.FieldList) string {
340
+ if tp == nil || len(tp.List) == 0 {
341
+ return ""
342
+ }
343
+ params := make([]string, len(tp.List))
344
+ for i, p := range tp.List {
345
+ if len(p.Names) > 0 {
346
+ params[i] = p.Names[0].Name
347
+ } else {
348
+ params[i] = "T"
349
+ }
350
+ }
351
+ return "[" + strings.Join(params, ", ") + "]"
352
+ }
353
+
354
+ func formatType(t ast.Expr) string {
355
+ if t == nil {
356
+ return "?"
357
+ }
358
+ switch v := t.(type) {
359
+ case *ast.Ident:
360
+ return v.Name
361
+ case *ast.SelectorExpr:
362
+ return formatType(v.X) + "." + v.Sel.Name
363
+ case *ast.StarExpr:
364
+ return "*" + formatType(v.X)
365
+ case *ast.ArrayType:
366
+ if v.Len == nil {
367
+ return "[]" + formatType(v.Elt)
368
+ }
369
+ return "[...]" + formatType(v.Elt)
370
+ case *ast.MapType:
371
+ return "map[" + formatType(v.Key) + "]" + formatType(v.Value)
372
+ case *ast.InterfaceType:
373
+ return "interface{}"
374
+ case *ast.StructType:
375
+ return "struct{}"
376
+ case *ast.FuncType:
377
+ return formatFuncType(v)
378
+ case *ast.ChanType:
379
+ return "chan " + formatType(v.Value)
380
+ case *ast.BasicLit:
381
+ return v.Value
382
+ case *ast.IndexExpr:
383
+ // Generic instantiation with one type arg, e.g. Logger[int].
384
+ return formatType(v.X) + "[" + formatType(v.Index) + "]"
385
+ case *ast.IndexListExpr:
386
+ // Generic instantiation with multiple type args, e.g. Map[K, V].
387
+ args := make([]string, len(v.Indices))
388
+ for i, idx := range v.Indices {
389
+ args[i] = formatType(idx)
390
+ }
391
+ return formatType(v.X) + "[" + strings.Join(args, ", ") + "]"
392
+ default:
393
+ return "?"
394
+ }
395
+ }
396
+ `;
397
+ var _cachedGoScriptPath = null;
398
+ async function syncGoParse(filePath, content, lang) {
399
+ try {
400
+ let scriptPath = _cachedGoScriptPath;
401
+ if (!scriptPath) {
402
+ const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "ws-go-parse-"));
403
+ scriptPath = path.join(tmpDir, "parse.go");
404
+ await fs.writeFile(scriptPath, GO_PARSE_SCRIPT, "utf8");
405
+ _cachedGoScriptPath = scriptPath;
406
+ }
407
+ const goBinary = resolveWin32Command("go");
408
+ const goResult = await new Promise(
409
+ (resolve, reject) => {
410
+ let settled = false;
411
+ const proc = spawn(goBinary, ["run", scriptPath], {
412
+ stdio: ["pipe", "pipe", "pipe"],
413
+ windowsHide: true
414
+ });
415
+ proc.on("error", (err) => {
416
+ if (settled) return;
417
+ settled = true;
418
+ reject(err);
419
+ });
420
+ let stdout2 = "";
421
+ proc.stdout?.on("data", (chunk) => {
422
+ stdout2 += chunk.toString();
423
+ });
424
+ proc.stderr?.resume();
425
+ proc.stdin?.write(content);
426
+ proc.stdin?.end();
427
+ const timer = setTimeout(() => {
428
+ if (settled) return;
429
+ settled = true;
430
+ proc.kill("SIGKILL");
431
+ reject(new Error("timeout"));
432
+ }, 15e3);
433
+ timer.unref?.();
434
+ proc.on("close", (code2) => {
435
+ if (settled) return;
436
+ settled = true;
437
+ clearTimeout(timer);
438
+ resolve({ code: code2, stdout: stdout2 });
439
+ });
440
+ }
441
+ );
442
+ const { code, stdout } = goResult;
443
+ if (code !== 0 || !stdout.trim()) {
444
+ return { file: filePath, lang, symbols: [], mtimeMs: Date.now() };
445
+ }
446
+ const { symbols: rawSymbols, refs } = parseParserOutput(stdout, lang);
447
+ const symbols = rawSymbols.map((s) => ({
448
+ id: 0,
449
+ lang,
450
+ kind: s.kind,
451
+ name: s.name,
452
+ file: filePath,
453
+ line: s.line,
454
+ col: s.col,
455
+ signature: s.signature ?? "",
456
+ docComment: "",
457
+ scope: s.scope ?? "",
458
+ text: `${s.name} ${s.signature ?? ""}`.trim()
459
+ }));
460
+ return { file: filePath, lang, symbols, refs, mtimeMs: Date.now() };
461
+ } catch {
462
+ return { file: filePath, lang, symbols: [], mtimeMs: Date.now() };
463
+ }
464
+ }
465
+ export {
466
+ detectLang,
467
+ parseSymbols
468
+ };
469
+ //# sourceMappingURL=go-parser-6CA77WZ4.js.map