@wrongstack/tools 0.310.1 → 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 (135) hide show
  1. package/dist/_shell-pick.d.ts +5 -10
  2. package/dist/audit.js +10 -4055
  3. package/dist/bash.js +9 -2332
  4. package/dist/batch-tool-use.js +2 -187
  5. package/dist/browser/index.js +25 -1339
  6. package/dist/builtin.js +69 -33985
  7. package/dist/chunk-2CTB3UK5.js +197 -0
  8. package/dist/chunk-2ME7ZWDD.js +1272 -0
  9. package/dist/chunk-2TFQDEPU.js +113 -0
  10. package/dist/chunk-2ZCJNKFE.js +315 -0
  11. package/dist/chunk-3PVYQFRQ.js +472 -0
  12. package/dist/chunk-3QMQBO5Z.js +89 -0
  13. package/dist/chunk-42AKKX7O.js +385 -0
  14. package/dist/chunk-42SKEETB.js +113 -0
  15. package/dist/chunk-4BHUSMNL.js +104 -0
  16. package/dist/chunk-4I4LWFOO.js +431 -0
  17. package/dist/chunk-553IQUMO.js +478 -0
  18. package/dist/chunk-55KF77OK.js +1944 -0
  19. package/dist/chunk-6HLZK37X.js +359 -0
  20. package/dist/chunk-6RNIFLG4.js +305 -0
  21. package/dist/chunk-A6BRWIXN.js +317 -0
  22. package/dist/chunk-AHHDWNXC.js +200 -0
  23. package/dist/chunk-B2CIOKWP.js +899 -0
  24. package/dist/chunk-BTSFTGIL.js +7 -0
  25. package/dist/chunk-D33S4RQG.js +222 -0
  26. package/dist/chunk-DIJKHSUO.js +134 -0
  27. package/dist/chunk-DPL47QGS.js +3515 -0
  28. package/dist/chunk-EMRGN4KM.js +170 -0
  29. package/dist/chunk-FGOABE4Z.js +955 -0
  30. package/dist/chunk-FW65TP4G.js +520 -0
  31. package/dist/chunk-GOIZNNOA.js +221 -0
  32. package/dist/chunk-H5MJUAA6.js +295 -0
  33. package/dist/chunk-H5OHH6F4.js +223 -0
  34. package/dist/chunk-HC5RM4WY.js +199 -0
  35. package/dist/chunk-HEQFMLZ7.js +190 -0
  36. package/dist/chunk-HFXSNKCV.js +196 -0
  37. package/dist/chunk-HXSBQ2SE.js +1723 -0
  38. package/dist/chunk-ILESNGNM.js +163 -0
  39. package/dist/chunk-INF5CGAO.js +137 -0
  40. package/dist/chunk-IWDFZ6XR.js +337 -0
  41. package/dist/chunk-IXMNTNW5.js +238 -0
  42. package/dist/chunk-J4SRJKBW.js +428 -0
  43. package/dist/chunk-J5SKD6LN.js +235 -0
  44. package/dist/chunk-JRJJX3L5.js +424 -0
  45. package/dist/chunk-KXNDHMUB.js +366 -0
  46. package/dist/chunk-LIJQMYYX.js +59 -0
  47. package/dist/chunk-MAN26PZ5.js +260 -0
  48. package/dist/chunk-MKRQMLZA.js +474 -0
  49. package/dist/chunk-NBDZMMG2.js +169 -0
  50. package/dist/chunk-NHA6BEIH.js +101 -0
  51. package/dist/chunk-OA6YJIWL.js +4412 -0
  52. package/dist/chunk-OZC255IC.js +2830 -0
  53. package/dist/chunk-PUR6WU2B.js +154 -0
  54. package/dist/chunk-Q5JPPCZC.js +12 -0
  55. package/dist/chunk-QBV725YG.js +128 -0
  56. package/dist/chunk-QHVW4AAM.js +892 -0
  57. package/dist/chunk-QNJ7AQ4B.js +1000 -0
  58. package/dist/chunk-RGISBZBD.js +231 -0
  59. package/dist/chunk-RJZQWEMS.js +84 -0
  60. package/dist/chunk-RP2ZA47V.js +15 -0
  61. package/dist/chunk-RXISBFR5.js +315 -0
  62. package/dist/chunk-S5CCLZL3.js +99 -0
  63. package/dist/chunk-TVTCSBJF.js +122 -0
  64. package/dist/chunk-U4D5S3VQ.js +21 -0
  65. package/dist/chunk-U4VAATKP.js +193 -0
  66. package/dist/chunk-UKU2ZX4C.js +203 -0
  67. package/dist/chunk-UNSKG6DC.js +159 -0
  68. package/dist/chunk-URFKEIHM.js +1091 -0
  69. package/dist/chunk-UTV7YAW7.js +178 -0
  70. package/dist/chunk-V43EQ6VR.js +68 -0
  71. package/dist/chunk-VB3MJGCV.js +610 -0
  72. package/dist/chunk-WHIIIREL.js +223 -0
  73. package/dist/chunk-XMIFYKUT.js +1371 -0
  74. package/dist/chunk-YF2RSV34.js +54 -0
  75. package/dist/chunk-Z6DAKQ3U.js +1 -0
  76. package/dist/chunk-ZIGAZFWE.js +522 -0
  77. package/dist/circuit-breaker.js +3 -191
  78. package/dist/codebase-index/index.js +84 -13688
  79. package/dist/codebase-index/parser-worker-script.js +8 -3995
  80. package/dist/codebase-index/project-server.js +60 -8548
  81. package/dist/codebase-index/worker.js +20 -8416
  82. package/dist/design.js +2 -299
  83. package/dist/diff.js +4 -256
  84. package/dist/document.js +4 -222
  85. package/dist/e2e.js +5 -476
  86. package/dist/edit.js +14 -10200
  87. package/dist/exec.js +16 -3131
  88. package/dist/fetch.js +8 -398
  89. package/dist/format.js +10 -3750
  90. package/dist/generic-parser-VUXDIAOZ.js +13 -0
  91. package/dist/git.js +4 -380
  92. package/dist/glob.js +6 -280
  93. package/dist/go-parser-6CA77WZ4.js +469 -0
  94. package/dist/grep.js +7 -604
  95. package/dist/index.js +318 -35423
  96. package/dist/install.js +10 -4091
  97. package/dist/json-parser-7YMDJSBJ.js +213 -0
  98. package/dist/json.js +4 -665
  99. package/dist/kanban.js +3 -2096
  100. package/dist/languages/index.js +23 -4664
  101. package/dist/legacy-bridge-7UKZT46G.js +18 -0
  102. package/dist/lint.js +10 -3706
  103. package/dist/logs.js +4 -287
  104. package/dist/memory.js +6 -215
  105. package/dist/mode.js +3 -99
  106. package/dist/outdated.js +4 -5170
  107. package/dist/pack.js +65 -33933
  108. package/dist/parser-dispatch-VPOFDO2U.js +14 -0
  109. package/dist/patch.js +13 -9935
  110. package/dist/plan.js +5 -3286
  111. package/dist/process-registry.js +8 -651
  112. package/dist/ps-slash.js +12 -1439
  113. package/dist/py-parser-GPM5VYRG.js +16 -0
  114. package/dist/read.js +13 -9816
  115. package/dist/replace.js +15 -10014
  116. package/dist/rs-parser-WVQ4KYCX.js +81 -0
  117. package/dist/scaffold.js +4 -253
  118. package/dist/search.js +5 -585
  119. package/dist/session-kanban.js +30 -972
  120. package/dist/skill.js +2 -215
  121. package/dist/task.js +5 -3410
  122. package/dist/test.js +10 -3773
  123. package/dist/todo.js +4 -2891
  124. package/dist/tool-help.js +3 -123
  125. package/dist/tool-search.js +3 -79
  126. package/dist/tool-tier.js +68 -34020
  127. package/dist/tool-use.js +2 -93
  128. package/dist/tree-sitter-parser-YCILHGZD.js +17 -0
  129. package/dist/tree.js +4 -288
  130. package/dist/ts-parser-YH4ZMWMH.js +232 -0
  131. package/dist/typecheck.js +10 -3753
  132. package/dist/win32.js +6 -60
  133. package/dist/write.js +14 -9882
  134. package/dist/yaml-parser-GFAOKV53.js +157 -0
  135. 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