@colbymchenry/codegraph 0.8.0 → 0.9.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 (381) hide show
  1. package/README.md +23 -7
  2. package/npm-shim.js +43 -0
  3. package/package.json +13 -51
  4. package/LICENSE +0 -21
  5. package/dist/bin/codegraph.d.ts +0 -21
  6. package/dist/bin/codegraph.d.ts.map +0 -1
  7. package/dist/bin/codegraph.js +0 -1257
  8. package/dist/bin/codegraph.js.map +0 -1
  9. package/dist/bin/node-version-check.d.ts +0 -20
  10. package/dist/bin/node-version-check.d.ts.map +0 -1
  11. package/dist/bin/node-version-check.js +0 -42
  12. package/dist/bin/node-version-check.js.map +0 -1
  13. package/dist/bin/uninstall.d.ts +0 -14
  14. package/dist/bin/uninstall.d.ts.map +0 -1
  15. package/dist/bin/uninstall.js +0 -36
  16. package/dist/bin/uninstall.js.map +0 -1
  17. package/dist/config.d.ts +0 -51
  18. package/dist/config.d.ts.map +0 -1
  19. package/dist/config.js +0 -321
  20. package/dist/config.js.map +0 -1
  21. package/dist/context/formatter.d.ts +0 -30
  22. package/dist/context/formatter.d.ts.map +0 -1
  23. package/dist/context/formatter.js +0 -244
  24. package/dist/context/formatter.js.map +0 -1
  25. package/dist/context/index.d.ts +0 -97
  26. package/dist/context/index.d.ts.map +0 -1
  27. package/dist/context/index.js +0 -1050
  28. package/dist/context/index.js.map +0 -1
  29. package/dist/db/index.d.ts +0 -72
  30. package/dist/db/index.d.ts.map +0 -1
  31. package/dist/db/index.js +0 -200
  32. package/dist/db/index.js.map +0 -1
  33. package/dist/db/migrations.d.ts +0 -44
  34. package/dist/db/migrations.d.ts.map +0 -1
  35. package/dist/db/migrations.js +0 -131
  36. package/dist/db/migrations.js.map +0 -1
  37. package/dist/db/queries.d.ts +0 -253
  38. package/dist/db/queries.d.ts.map +0 -1
  39. package/dist/db/queries.js +0 -1207
  40. package/dist/db/queries.js.map +0 -1
  41. package/dist/db/schema.sql +0 -151
  42. package/dist/db/sqlite-adapter.d.ts +0 -52
  43. package/dist/db/sqlite-adapter.d.ts.map +0 -1
  44. package/dist/db/sqlite-adapter.js +0 -237
  45. package/dist/db/sqlite-adapter.js.map +0 -1
  46. package/dist/directory.d.ts +0 -57
  47. package/dist/directory.d.ts.map +0 -1
  48. package/dist/directory.js +0 -264
  49. package/dist/directory.js.map +0 -1
  50. package/dist/errors.d.ts +0 -136
  51. package/dist/errors.d.ts.map +0 -1
  52. package/dist/errors.js +0 -219
  53. package/dist/errors.js.map +0 -1
  54. package/dist/extraction/dfm-extractor.d.ts +0 -31
  55. package/dist/extraction/dfm-extractor.d.ts.map +0 -1
  56. package/dist/extraction/dfm-extractor.js +0 -151
  57. package/dist/extraction/dfm-extractor.js.map +0 -1
  58. package/dist/extraction/grammars.d.ts +0 -78
  59. package/dist/extraction/grammars.d.ts.map +0 -1
  60. package/dist/extraction/grammars.js +0 -322
  61. package/dist/extraction/grammars.js.map +0 -1
  62. package/dist/extraction/index.d.ts +0 -130
  63. package/dist/extraction/index.d.ts.map +0 -1
  64. package/dist/extraction/index.js +0 -1305
  65. package/dist/extraction/index.js.map +0 -1
  66. package/dist/extraction/languages/c-cpp.d.ts +0 -4
  67. package/dist/extraction/languages/c-cpp.d.ts.map +0 -1
  68. package/dist/extraction/languages/c-cpp.js +0 -126
  69. package/dist/extraction/languages/c-cpp.js.map +0 -1
  70. package/dist/extraction/languages/csharp.d.ts +0 -3
  71. package/dist/extraction/languages/csharp.d.ts.map +0 -1
  72. package/dist/extraction/languages/csharp.js +0 -72
  73. package/dist/extraction/languages/csharp.js.map +0 -1
  74. package/dist/extraction/languages/dart.d.ts +0 -3
  75. package/dist/extraction/languages/dart.d.ts.map +0 -1
  76. package/dist/extraction/languages/dart.js +0 -192
  77. package/dist/extraction/languages/dart.js.map +0 -1
  78. package/dist/extraction/languages/go.d.ts +0 -3
  79. package/dist/extraction/languages/go.d.ts.map +0 -1
  80. package/dist/extraction/languages/go.js +0 -58
  81. package/dist/extraction/languages/go.js.map +0 -1
  82. package/dist/extraction/languages/index.d.ts +0 -10
  83. package/dist/extraction/languages/index.d.ts.map +0 -1
  84. package/dist/extraction/languages/index.js +0 -45
  85. package/dist/extraction/languages/index.js.map +0 -1
  86. package/dist/extraction/languages/java.d.ts +0 -3
  87. package/dist/extraction/languages/java.d.ts.map +0 -1
  88. package/dist/extraction/languages/java.js +0 -64
  89. package/dist/extraction/languages/java.js.map +0 -1
  90. package/dist/extraction/languages/javascript.d.ts +0 -3
  91. package/dist/extraction/languages/javascript.d.ts.map +0 -1
  92. package/dist/extraction/languages/javascript.js +0 -90
  93. package/dist/extraction/languages/javascript.js.map +0 -1
  94. package/dist/extraction/languages/kotlin.d.ts +0 -3
  95. package/dist/extraction/languages/kotlin.d.ts.map +0 -1
  96. package/dist/extraction/languages/kotlin.js +0 -253
  97. package/dist/extraction/languages/kotlin.js.map +0 -1
  98. package/dist/extraction/languages/pascal.d.ts +0 -3
  99. package/dist/extraction/languages/pascal.d.ts.map +0 -1
  100. package/dist/extraction/languages/pascal.js +0 -66
  101. package/dist/extraction/languages/pascal.js.map +0 -1
  102. package/dist/extraction/languages/php.d.ts +0 -3
  103. package/dist/extraction/languages/php.d.ts.map +0 -1
  104. package/dist/extraction/languages/php.js +0 -107
  105. package/dist/extraction/languages/php.js.map +0 -1
  106. package/dist/extraction/languages/python.d.ts +0 -3
  107. package/dist/extraction/languages/python.d.ts.map +0 -1
  108. package/dist/extraction/languages/python.js +0 -56
  109. package/dist/extraction/languages/python.js.map +0 -1
  110. package/dist/extraction/languages/ruby.d.ts +0 -3
  111. package/dist/extraction/languages/ruby.d.ts.map +0 -1
  112. package/dist/extraction/languages/ruby.js +0 -114
  113. package/dist/extraction/languages/ruby.js.map +0 -1
  114. package/dist/extraction/languages/rust.d.ts +0 -3
  115. package/dist/extraction/languages/rust.d.ts.map +0 -1
  116. package/dist/extraction/languages/rust.js +0 -109
  117. package/dist/extraction/languages/rust.js.map +0 -1
  118. package/dist/extraction/languages/scala.d.ts +0 -3
  119. package/dist/extraction/languages/scala.d.ts.map +0 -1
  120. package/dist/extraction/languages/scala.js +0 -139
  121. package/dist/extraction/languages/scala.js.map +0 -1
  122. package/dist/extraction/languages/swift.d.ts +0 -3
  123. package/dist/extraction/languages/swift.d.ts.map +0 -1
  124. package/dist/extraction/languages/swift.js +0 -91
  125. package/dist/extraction/languages/swift.js.map +0 -1
  126. package/dist/extraction/languages/typescript.d.ts +0 -3
  127. package/dist/extraction/languages/typescript.d.ts.map +0 -1
  128. package/dist/extraction/languages/typescript.js +0 -129
  129. package/dist/extraction/languages/typescript.js.map +0 -1
  130. package/dist/extraction/liquid-extractor.d.ts +0 -52
  131. package/dist/extraction/liquid-extractor.d.ts.map +0 -1
  132. package/dist/extraction/liquid-extractor.js +0 -313
  133. package/dist/extraction/liquid-extractor.js.map +0 -1
  134. package/dist/extraction/parse-worker.d.ts +0 -8
  135. package/dist/extraction/parse-worker.d.ts.map +0 -1
  136. package/dist/extraction/parse-worker.js +0 -94
  137. package/dist/extraction/parse-worker.js.map +0 -1
  138. package/dist/extraction/svelte-extractor.d.ts +0 -56
  139. package/dist/extraction/svelte-extractor.d.ts.map +0 -1
  140. package/dist/extraction/svelte-extractor.js +0 -272
  141. package/dist/extraction/svelte-extractor.js.map +0 -1
  142. package/dist/extraction/tree-sitter-helpers.d.ts +0 -28
  143. package/dist/extraction/tree-sitter-helpers.d.ts.map +0 -1
  144. package/dist/extraction/tree-sitter-helpers.js +0 -103
  145. package/dist/extraction/tree-sitter-helpers.js.map +0 -1
  146. package/dist/extraction/tree-sitter-types.d.ts +0 -179
  147. package/dist/extraction/tree-sitter-types.d.ts.map +0 -1
  148. package/dist/extraction/tree-sitter-types.js +0 -10
  149. package/dist/extraction/tree-sitter-types.js.map +0 -1
  150. package/dist/extraction/tree-sitter.d.ts +0 -233
  151. package/dist/extraction/tree-sitter.d.ts.map +0 -1
  152. package/dist/extraction/tree-sitter.js +0 -2393
  153. package/dist/extraction/tree-sitter.js.map +0 -1
  154. package/dist/extraction/vue-extractor.d.ts +0 -36
  155. package/dist/extraction/vue-extractor.d.ts.map +0 -1
  156. package/dist/extraction/vue-extractor.js +0 -163
  157. package/dist/extraction/vue-extractor.js.map +0 -1
  158. package/dist/extraction/wasm/tree-sitter-pascal.wasm +0 -0
  159. package/dist/extraction/wasm/tree-sitter-scala.wasm +0 -0
  160. package/dist/graph/index.d.ts +0 -8
  161. package/dist/graph/index.d.ts.map +0 -1
  162. package/dist/graph/index.js +0 -13
  163. package/dist/graph/index.js.map +0 -1
  164. package/dist/graph/queries.d.ts +0 -106
  165. package/dist/graph/queries.d.ts.map +0 -1
  166. package/dist/graph/queries.js +0 -366
  167. package/dist/graph/queries.js.map +0 -1
  168. package/dist/graph/traversal.d.ts +0 -127
  169. package/dist/graph/traversal.d.ts.map +0 -1
  170. package/dist/graph/traversal.js +0 -493
  171. package/dist/graph/traversal.js.map +0 -1
  172. package/dist/index.d.ts +0 -447
  173. package/dist/index.d.ts.map +0 -1
  174. package/dist/index.js +0 -825
  175. package/dist/index.js.map +0 -1
  176. package/dist/installer/claude-md-template.d.ts +0 -14
  177. package/dist/installer/claude-md-template.d.ts.map +0 -1
  178. package/dist/installer/claude-md-template.js +0 -21
  179. package/dist/installer/claude-md-template.js.map +0 -1
  180. package/dist/installer/config-writer.d.ts +0 -29
  181. package/dist/installer/config-writer.d.ts.map +0 -1
  182. package/dist/installer/config-writer.js +0 -111
  183. package/dist/installer/config-writer.js.map +0 -1
  184. package/dist/installer/index.d.ts +0 -65
  185. package/dist/installer/index.d.ts.map +0 -1
  186. package/dist/installer/index.js +0 -406
  187. package/dist/installer/index.js.map +0 -1
  188. package/dist/installer/instructions-template.d.ts +0 -28
  189. package/dist/installer/instructions-template.d.ts.map +0 -1
  190. package/dist/installer/instructions-template.js +0 -64
  191. package/dist/installer/instructions-template.js.map +0 -1
  192. package/dist/installer/targets/claude.d.ts +0 -31
  193. package/dist/installer/targets/claude.d.ts.map +0 -1
  194. package/dist/installer/targets/claude.js +0 -308
  195. package/dist/installer/targets/claude.js.map +0 -1
  196. package/dist/installer/targets/codex.d.ts +0 -18
  197. package/dist/installer/targets/codex.d.ts.map +0 -1
  198. package/dist/installer/targets/codex.js +0 -185
  199. package/dist/installer/targets/codex.js.map +0 -1
  200. package/dist/installer/targets/cursor.d.ts +0 -35
  201. package/dist/installer/targets/cursor.d.ts.map +0 -1
  202. package/dist/installer/targets/cursor.js +0 -229
  203. package/dist/installer/targets/cursor.js.map +0 -1
  204. package/dist/installer/targets/opencode.d.ts +0 -30
  205. package/dist/installer/targets/opencode.d.ts.map +0 -1
  206. package/dist/installer/targets/opencode.js +0 -235
  207. package/dist/installer/targets/opencode.js.map +0 -1
  208. package/dist/installer/targets/registry.d.ts +0 -35
  209. package/dist/installer/targets/registry.d.ts.map +0 -1
  210. package/dist/installer/targets/registry.js +0 -83
  211. package/dist/installer/targets/registry.js.map +0 -1
  212. package/dist/installer/targets/shared.d.ts +0 -77
  213. package/dist/installer/targets/shared.d.ts.map +0 -1
  214. package/dist/installer/targets/shared.js +0 -246
  215. package/dist/installer/targets/shared.js.map +0 -1
  216. package/dist/installer/targets/toml.d.ts +0 -52
  217. package/dist/installer/targets/toml.d.ts.map +0 -1
  218. package/dist/installer/targets/toml.js +0 -147
  219. package/dist/installer/targets/toml.js.map +0 -1
  220. package/dist/installer/targets/types.d.ts +0 -116
  221. package/dist/installer/targets/types.d.ts.map +0 -1
  222. package/dist/installer/targets/types.js +0 -16
  223. package/dist/installer/targets/types.js.map +0 -1
  224. package/dist/mcp/index.d.ts +0 -94
  225. package/dist/mcp/index.d.ts.map +0 -1
  226. package/dist/mcp/index.js +0 -453
  227. package/dist/mcp/index.js.map +0 -1
  228. package/dist/mcp/server-instructions.d.ts +0 -19
  229. package/dist/mcp/server-instructions.d.ts.map +0 -1
  230. package/dist/mcp/server-instructions.js +0 -71
  231. package/dist/mcp/server-instructions.js.map +0 -1
  232. package/dist/mcp/tools.d.ts +0 -257
  233. package/dist/mcp/tools.d.ts.map +0 -1
  234. package/dist/mcp/tools.js +0 -1633
  235. package/dist/mcp/tools.js.map +0 -1
  236. package/dist/mcp/transport.d.ts +0 -106
  237. package/dist/mcp/transport.d.ts.map +0 -1
  238. package/dist/mcp/transport.js +0 -233
  239. package/dist/mcp/transport.js.map +0 -1
  240. package/dist/resolution/frameworks/cargo-workspace.d.ts +0 -18
  241. package/dist/resolution/frameworks/cargo-workspace.d.ts.map +0 -1
  242. package/dist/resolution/frameworks/cargo-workspace.js +0 -225
  243. package/dist/resolution/frameworks/cargo-workspace.js.map +0 -1
  244. package/dist/resolution/frameworks/csharp.d.ts +0 -8
  245. package/dist/resolution/frameworks/csharp.d.ts.map +0 -1
  246. package/dist/resolution/frameworks/csharp.js +0 -213
  247. package/dist/resolution/frameworks/csharp.js.map +0 -1
  248. package/dist/resolution/frameworks/express.d.ts +0 -8
  249. package/dist/resolution/frameworks/express.d.ts.map +0 -1
  250. package/dist/resolution/frameworks/express.js +0 -225
  251. package/dist/resolution/frameworks/express.js.map +0 -1
  252. package/dist/resolution/frameworks/go.d.ts +0 -8
  253. package/dist/resolution/frameworks/go.d.ts.map +0 -1
  254. package/dist/resolution/frameworks/go.js +0 -158
  255. package/dist/resolution/frameworks/go.js.map +0 -1
  256. package/dist/resolution/frameworks/index.d.ts +0 -42
  257. package/dist/resolution/frameworks/index.d.ts.map +0 -1
  258. package/dist/resolution/frameworks/index.js +0 -133
  259. package/dist/resolution/frameworks/index.js.map +0 -1
  260. package/dist/resolution/frameworks/java.d.ts +0 -8
  261. package/dist/resolution/frameworks/java.d.ts.map +0 -1
  262. package/dist/resolution/frameworks/java.js +0 -177
  263. package/dist/resolution/frameworks/java.js.map +0 -1
  264. package/dist/resolution/frameworks/laravel.d.ts +0 -13
  265. package/dist/resolution/frameworks/laravel.d.ts.map +0 -1
  266. package/dist/resolution/frameworks/laravel.js +0 -248
  267. package/dist/resolution/frameworks/laravel.js.map +0 -1
  268. package/dist/resolution/frameworks/nestjs.d.ts +0 -26
  269. package/dist/resolution/frameworks/nestjs.d.ts.map +0 -1
  270. package/dist/resolution/frameworks/nestjs.js +0 -374
  271. package/dist/resolution/frameworks/nestjs.js.map +0 -1
  272. package/dist/resolution/frameworks/python.d.ts +0 -10
  273. package/dist/resolution/frameworks/python.d.ts.map +0 -1
  274. package/dist/resolution/frameworks/python.js +0 -278
  275. package/dist/resolution/frameworks/python.js.map +0 -1
  276. package/dist/resolution/frameworks/react.d.ts +0 -8
  277. package/dist/resolution/frameworks/react.d.ts.map +0 -1
  278. package/dist/resolution/frameworks/react.js +0 -272
  279. package/dist/resolution/frameworks/react.js.map +0 -1
  280. package/dist/resolution/frameworks/ruby.d.ts +0 -8
  281. package/dist/resolution/frameworks/ruby.d.ts.map +0 -1
  282. package/dist/resolution/frameworks/ruby.js +0 -198
  283. package/dist/resolution/frameworks/ruby.js.map +0 -1
  284. package/dist/resolution/frameworks/rust.d.ts +0 -8
  285. package/dist/resolution/frameworks/rust.d.ts.map +0 -1
  286. package/dist/resolution/frameworks/rust.js +0 -207
  287. package/dist/resolution/frameworks/rust.js.map +0 -1
  288. package/dist/resolution/frameworks/svelte.d.ts +0 -9
  289. package/dist/resolution/frameworks/svelte.d.ts.map +0 -1
  290. package/dist/resolution/frameworks/svelte.js +0 -249
  291. package/dist/resolution/frameworks/svelte.js.map +0 -1
  292. package/dist/resolution/frameworks/swift.d.ts +0 -10
  293. package/dist/resolution/frameworks/swift.d.ts.map +0 -1
  294. package/dist/resolution/frameworks/swift.js +0 -376
  295. package/dist/resolution/frameworks/swift.js.map +0 -1
  296. package/dist/resolution/frameworks/vue.d.ts +0 -9
  297. package/dist/resolution/frameworks/vue.d.ts.map +0 -1
  298. package/dist/resolution/frameworks/vue.js +0 -306
  299. package/dist/resolution/frameworks/vue.js.map +0 -1
  300. package/dist/resolution/import-resolver.d.ts +0 -40
  301. package/dist/resolution/import-resolver.d.ts.map +0 -1
  302. package/dist/resolution/import-resolver.js +0 -663
  303. package/dist/resolution/import-resolver.js.map +0 -1
  304. package/dist/resolution/index.d.ts +0 -106
  305. package/dist/resolution/index.d.ts.map +0 -1
  306. package/dist/resolution/index.js +0 -709
  307. package/dist/resolution/index.js.map +0 -1
  308. package/dist/resolution/name-matcher.d.ts +0 -32
  309. package/dist/resolution/name-matcher.d.ts.map +0 -1
  310. package/dist/resolution/name-matcher.js +0 -384
  311. package/dist/resolution/name-matcher.js.map +0 -1
  312. package/dist/resolution/path-aliases.d.ts +0 -68
  313. package/dist/resolution/path-aliases.d.ts.map +0 -1
  314. package/dist/resolution/path-aliases.js +0 -238
  315. package/dist/resolution/path-aliases.js.map +0 -1
  316. package/dist/resolution/strip-comments.d.ts +0 -27
  317. package/dist/resolution/strip-comments.d.ts.map +0 -1
  318. package/dist/resolution/strip-comments.js +0 -441
  319. package/dist/resolution/strip-comments.js.map +0 -1
  320. package/dist/resolution/types.d.ts +0 -172
  321. package/dist/resolution/types.d.ts.map +0 -1
  322. package/dist/resolution/types.js +0 -8
  323. package/dist/resolution/types.js.map +0 -1
  324. package/dist/search/query-parser.d.ts +0 -57
  325. package/dist/search/query-parser.d.ts.map +0 -1
  326. package/dist/search/query-parser.js +0 -177
  327. package/dist/search/query-parser.js.map +0 -1
  328. package/dist/search/query-utils.d.ts +0 -53
  329. package/dist/search/query-utils.d.ts.map +0 -1
  330. package/dist/search/query-utils.js +0 -350
  331. package/dist/search/query-utils.js.map +0 -1
  332. package/dist/sync/git-hooks.d.ts +0 -45
  333. package/dist/sync/git-hooks.d.ts.map +0 -1
  334. package/dist/sync/git-hooks.js +0 -223
  335. package/dist/sync/git-hooks.js.map +0 -1
  336. package/dist/sync/index.d.ts +0 -17
  337. package/dist/sync/index.d.ts.map +0 -1
  338. package/dist/sync/index.js +0 -28
  339. package/dist/sync/index.js.map +0 -1
  340. package/dist/sync/watch-policy.d.ts +0 -48
  341. package/dist/sync/watch-policy.d.ts.map +0 -1
  342. package/dist/sync/watch-policy.js +0 -124
  343. package/dist/sync/watch-policy.js.map +0 -1
  344. package/dist/sync/watcher.d.ts +0 -81
  345. package/dist/sync/watcher.d.ts.map +0 -1
  346. package/dist/sync/watcher.js +0 -194
  347. package/dist/sync/watcher.js.map +0 -1
  348. package/dist/types.d.ts +0 -423
  349. package/dist/types.d.ts.map +0 -1
  350. package/dist/types.js +0 -256
  351. package/dist/types.js.map +0 -1
  352. package/dist/ui/glyphs.d.ts +0 -42
  353. package/dist/ui/glyphs.d.ts.map +0 -1
  354. package/dist/ui/glyphs.js +0 -78
  355. package/dist/ui/glyphs.js.map +0 -1
  356. package/dist/ui/shimmer-progress.d.ts +0 -11
  357. package/dist/ui/shimmer-progress.d.ts.map +0 -1
  358. package/dist/ui/shimmer-progress.js +0 -90
  359. package/dist/ui/shimmer-progress.js.map +0 -1
  360. package/dist/ui/shimmer-worker.d.ts +0 -2
  361. package/dist/ui/shimmer-worker.d.ts.map +0 -1
  362. package/dist/ui/shimmer-worker.js +0 -118
  363. package/dist/ui/shimmer-worker.js.map +0 -1
  364. package/dist/ui/types.d.ts +0 -17
  365. package/dist/ui/types.d.ts.map +0 -1
  366. package/dist/ui/types.js +0 -3
  367. package/dist/ui/types.js.map +0 -1
  368. package/dist/utils.d.ts +0 -205
  369. package/dist/utils.d.ts.map +0 -1
  370. package/dist/utils.js +0 -549
  371. package/dist/utils.js.map +0 -1
  372. package/scripts/agent-eval/audit.sh +0 -68
  373. package/scripts/agent-eval/itrun.sh +0 -107
  374. package/scripts/agent-eval/parse-run.mjs +0 -45
  375. package/scripts/agent-eval/parse-session.mjs +0 -93
  376. package/scripts/agent-eval/run-agent.sh +0 -34
  377. package/scripts/agent-eval/run-all.sh +0 -67
  378. package/scripts/extract-release-notes.mjs +0 -130
  379. package/scripts/local-install.sh +0 -41
  380. package/scripts/patch-tree-sitter-dart.js +0 -112
  381. package/scripts/release.sh +0 -68
@@ -1,57 +0,0 @@
1
- /**
2
- * Field-qualified search query parser.
3
- *
4
- * Splits a raw query like
5
- *
6
- * kind:function name:auth path:src/api authenticate
7
- *
8
- * into structured filters (kind=function, name="auth", path prefix
9
- * "src/api") plus the free-text portion ("authenticate") that goes
10
- * to FTS. Free-text and filters compose: filters narrow the result
11
- * set, FTS scores within the narrowed set.
12
- *
13
- * Recognised fields (case-insensitive, value is the rest until
14
- * whitespace):
15
- *
16
- * kind: one of function|method|class|interface|struct|...
17
- * lang: one of typescript|python|go|... (alias: language:)
18
- * path: case-insensitive substring of file_path
19
- * name: case-insensitive substring of the symbol's name
20
- *
21
- * Unknown field prefixes (e.g. `foo:bar`) are passed through to FTS
22
- * as plain text — that's how someone searching for `TODO:` gets a
23
- * result instead of a parse error.
24
- *
25
- * Quoting:
26
- * kind:function path:"src/some path/with spaces" → handled by stripping
27
- * the surrounding double quotes from the value (single token only,
28
- * no nested escapes).
29
- */
30
- import type { NodeKind, Language } from '../types';
31
- export interface ParsedQuery {
32
- /** Free-text portion to feed to FTS / LIKE. May be empty. */
33
- text: string;
34
- /** kind: filters (OR'd). Empty when none specified. */
35
- kinds: NodeKind[];
36
- /** lang:/language: filters (OR'd). Empty when none specified. */
37
- languages: Language[];
38
- /** path: filters (OR'd, case-insensitive substring of file_path). Empty when none. */
39
- pathFilters: string[];
40
- /** name: filters (OR'd, case-insensitive substring of node.name). */
41
- nameFilters: string[];
42
- }
43
- /**
44
- * Parse a raw query into structured filters + remaining text.
45
- * Always returns a value; never throws.
46
- */
47
- export declare function parseQuery(raw: string): ParsedQuery;
48
- /**
49
- * Damerau-Levenshtein-ish bounded edit distance. Returns `maxDist + 1`
50
- * as soon as the distance is known to exceed `maxDist`; that early-exit
51
- * makes the fuzzy fallback cheap even over tens of thousands of names.
52
- *
53
- * Pure DP, O(min(len(a), len(b))) memory. Compares case-folded inputs;
54
- * callers should pass `lowercase(name)` strings.
55
- */
56
- export declare function boundedEditDistance(a: string, b: string, maxDist: number): number;
57
- //# sourceMappingURL=query-parser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"query-parser.d.ts","sourceRoot":"","sources":["../../src/search/query-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEnD,MAAM,WAAW,WAAW;IAC1B,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,iEAAiE;IACjE,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,sFAAsF;IACtF,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,qEAAqE;IACrE,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAiBD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAiFnD;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CA2BjF"}
@@ -1,177 +0,0 @@
1
- "use strict";
2
- /**
3
- * Field-qualified search query parser.
4
- *
5
- * Splits a raw query like
6
- *
7
- * kind:function name:auth path:src/api authenticate
8
- *
9
- * into structured filters (kind=function, name="auth", path prefix
10
- * "src/api") plus the free-text portion ("authenticate") that goes
11
- * to FTS. Free-text and filters compose: filters narrow the result
12
- * set, FTS scores within the narrowed set.
13
- *
14
- * Recognised fields (case-insensitive, value is the rest until
15
- * whitespace):
16
- *
17
- * kind: one of function|method|class|interface|struct|...
18
- * lang: one of typescript|python|go|... (alias: language:)
19
- * path: case-insensitive substring of file_path
20
- * name: case-insensitive substring of the symbol's name
21
- *
22
- * Unknown field prefixes (e.g. `foo:bar`) are passed through to FTS
23
- * as plain text — that's how someone searching for `TODO:` gets a
24
- * result instead of a parse error.
25
- *
26
- * Quoting:
27
- * kind:function path:"src/some path/with spaces" → handled by stripping
28
- * the surrounding double quotes from the value (single token only,
29
- * no nested escapes).
30
- */
31
- Object.defineProperty(exports, "__esModule", { value: true });
32
- exports.parseQuery = parseQuery;
33
- exports.boundedEditDistance = boundedEditDistance;
34
- const types_1 = require("../types");
35
- // Derived from the canonical `NODE_KINDS` / `LANGUAGES` arrays in
36
- // types.ts so adding a new kind or language doesn't silently fall
37
- // through to plain text here.
38
- const KIND_VALUES = new Set(types_1.NODE_KINDS);
39
- const LANGUAGE_VALUES = new Set(types_1.LANGUAGES);
40
- /**
41
- * Strip a surrounding pair of double quotes from `s`. Allows users to
42
- * keep whitespace in path filters: `path:"my dir/file"`.
43
- */
44
- function unquote(s) {
45
- if (s.length >= 2 && s.startsWith('"') && s.endsWith('"'))
46
- return s.slice(1, -1);
47
- return s;
48
- }
49
- /**
50
- * Parse a raw query into structured filters + remaining text.
51
- * Always returns a value; never throws.
52
- */
53
- function parseQuery(raw) {
54
- const out = {
55
- text: '',
56
- kinds: [],
57
- languages: [],
58
- pathFilters: [],
59
- nameFilters: [],
60
- };
61
- // Tokenise on whitespace, preserving quoted spans as part of the
62
- // current token. Quotes can appear at the start (`"…"`) OR mid-token
63
- // (`path:"…"`); in both cases everything from the opening `"` to the
64
- // matching `"` is included in the token, whitespace and all.
65
- const tokens = [];
66
- let i = 0;
67
- while (i < raw.length) {
68
- while (i < raw.length && /\s/.test(raw[i]))
69
- i++;
70
- if (i >= raw.length)
71
- break;
72
- const start = i;
73
- while (i < raw.length && !/\s/.test(raw[i])) {
74
- if (raw[i] === '"') {
75
- const end = raw.indexOf('"', i + 1);
76
- if (end === -1) {
77
- // Unterminated quote — swallow the rest of the input as
78
- // one token. Forgiving rather than throwing.
79
- i = raw.length;
80
- break;
81
- }
82
- i = end + 1;
83
- continue;
84
- }
85
- i++;
86
- }
87
- tokens.push(raw.slice(start, i));
88
- }
89
- const textParts = [];
90
- for (const tok of tokens) {
91
- const colon = tok.indexOf(':');
92
- if (colon <= 0 || colon === tok.length - 1) {
93
- textParts.push(tok);
94
- continue;
95
- }
96
- const key = tok.slice(0, colon).toLowerCase();
97
- const valueRaw = unquote(tok.slice(colon + 1));
98
- if (!valueRaw) {
99
- textParts.push(tok);
100
- continue;
101
- }
102
- switch (key) {
103
- case 'kind': {
104
- if (KIND_VALUES.has(valueRaw)) {
105
- out.kinds.push(valueRaw);
106
- }
107
- else {
108
- textParts.push(tok);
109
- }
110
- break;
111
- }
112
- case 'lang':
113
- case 'language': {
114
- const lower = valueRaw.toLowerCase();
115
- if (LANGUAGE_VALUES.has(lower)) {
116
- out.languages.push(lower);
117
- }
118
- else {
119
- textParts.push(tok);
120
- }
121
- break;
122
- }
123
- case 'path':
124
- out.pathFilters.push(valueRaw);
125
- break;
126
- case 'name':
127
- out.nameFilters.push(valueRaw);
128
- break;
129
- default:
130
- textParts.push(tok);
131
- }
132
- }
133
- out.text = textParts.join(' ').trim();
134
- return out;
135
- }
136
- /**
137
- * Damerau-Levenshtein-ish bounded edit distance. Returns `maxDist + 1`
138
- * as soon as the distance is known to exceed `maxDist`; that early-exit
139
- * makes the fuzzy fallback cheap even over tens of thousands of names.
140
- *
141
- * Pure DP, O(min(len(a), len(b))) memory. Compares case-folded inputs;
142
- * callers should pass `lowercase(name)` strings.
143
- */
144
- function boundedEditDistance(a, b, maxDist) {
145
- if (a === b)
146
- return 0;
147
- const al = a.length;
148
- const bl = b.length;
149
- if (Math.abs(al - bl) > maxDist)
150
- return maxDist + 1;
151
- if (al === 0)
152
- return bl;
153
- if (bl === 0)
154
- return al;
155
- let prev = new Array(bl + 1);
156
- let cur = new Array(bl + 1);
157
- for (let j = 0; j <= bl; j++)
158
- prev[j] = j;
159
- for (let i = 1; i <= al; i++) {
160
- cur[0] = i;
161
- let rowMin = cur[0];
162
- for (let j = 1; j <= bl; j++) {
163
- const cost = a.charCodeAt(i - 1) === b.charCodeAt(j - 1) ? 0 : 1;
164
- const insertion = cur[j - 1] + 1;
165
- const deletion = prev[j] + 1;
166
- const substitution = prev[j - 1] + cost;
167
- cur[j] = Math.min(insertion, deletion, substitution);
168
- if (cur[j] < rowMin)
169
- rowMin = cur[j];
170
- }
171
- if (rowMin > maxDist)
172
- return maxDist + 1;
173
- [prev, cur] = [cur, prev];
174
- }
175
- return prev[bl];
176
- }
177
- //# sourceMappingURL=query-parser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"query-parser.js","sourceRoot":"","sources":["../../src/search/query-parser.ts"],"names":[],"mappings":"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"}
@@ -1,53 +0,0 @@
1
- /**
2
- * Search Query Utilities
3
- *
4
- * Shared module for search term extraction and scoring.
5
- */
6
- import { Node } from '../types';
7
- /**
8
- * Common stop words to filter from search queries.
9
- * Includes generic English + code-specific noise words.
10
- */
11
- export declare const STOP_WORDS: Set<string>;
12
- /**
13
- * Generate stem variants of a search term by removing common English suffixes.
14
- * Used for FTS query expansion so "caching" also finds "cache", "eviction" finds "evict", etc.
15
- * Stems are used as PREFIX matches in FTS, so they don't need to be perfect English words.
16
- */
17
- export declare function getStemVariants(term: string): string[];
18
- /**
19
- * Extract meaningful search terms from a natural language query.
20
- * Splits camelCase, PascalCase, snake_case, SCREAMING_SNAKE, and dot.notation
21
- * into individual tokens before filtering.
22
- *
23
- * Preserves original compound identifiers (e.g., "scrapeLoop") alongside
24
- * their split parts so that FTS can match both the full symbol name and
25
- * individual words within it.
26
- *
27
- * Also generates stem variants (e.g., "caching"→"cache", "eviction"→"evict")
28
- * so FTS prefix matching can find related code symbols.
29
- */
30
- export declare function extractSearchTerms(query: string, options?: {
31
- stems?: boolean;
32
- }): string[];
33
- /**
34
- * Score path relevance to a query
35
- * Higher score = more relevant path
36
- */
37
- export declare function scorePathRelevance(filePath: string, query: string): number;
38
- /**
39
- * Check if a file path looks like a test file
40
- */
41
- export declare function isTestFile(filePath: string): boolean;
42
- /**
43
- * Bonus when a node's name matches the search query.
44
- * Exact matches get the largest boost; prefix matches get smaller boosts.
45
- * Multi-word queries also check individual term matches against the name.
46
- */
47
- export declare function nameMatchBonus(nodeName: string, query: string): number;
48
- /**
49
- * Kind-based bonus for search ranking
50
- * Functions and classes are typically more relevant than variables/imports
51
- */
52
- export declare function kindBonus(kind: Node['kind']): number;
53
- //# sourceMappingURL=query-utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"query-utils.d.ts","sourceRoot":"","sources":["../../src/search/query-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC;;;GAGG;AACH,eAAO,MAAM,UAAU,aAkBrB,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAyDtD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,EAAE,CA2DzF;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CA4B1E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAuCpD;AAmBD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAuCtE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CA0BpD"}
@@ -1,350 +0,0 @@
1
- "use strict";
2
- /**
3
- * Search Query Utilities
4
- *
5
- * Shared module for search term extraction and scoring.
6
- */
7
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
- if (k2 === undefined) k2 = k;
9
- var desc = Object.getOwnPropertyDescriptor(m, k);
10
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
- desc = { enumerable: true, get: function() { return m[k]; } };
12
- }
13
- Object.defineProperty(o, k2, desc);
14
- }) : (function(o, m, k, k2) {
15
- if (k2 === undefined) k2 = k;
16
- o[k2] = m[k];
17
- }));
18
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
- Object.defineProperty(o, "default", { enumerable: true, value: v });
20
- }) : function(o, v) {
21
- o["default"] = v;
22
- });
23
- var __importStar = (this && this.__importStar) || (function () {
24
- var ownKeys = function(o) {
25
- ownKeys = Object.getOwnPropertyNames || function (o) {
26
- var ar = [];
27
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
- return ar;
29
- };
30
- return ownKeys(o);
31
- };
32
- return function (mod) {
33
- if (mod && mod.__esModule) return mod;
34
- var result = {};
35
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
- __setModuleDefault(result, mod);
37
- return result;
38
- };
39
- })();
40
- Object.defineProperty(exports, "__esModule", { value: true });
41
- exports.STOP_WORDS = void 0;
42
- exports.getStemVariants = getStemVariants;
43
- exports.extractSearchTerms = extractSearchTerms;
44
- exports.scorePathRelevance = scorePathRelevance;
45
- exports.isTestFile = isTestFile;
46
- exports.nameMatchBonus = nameMatchBonus;
47
- exports.kindBonus = kindBonus;
48
- const path = __importStar(require("path"));
49
- /**
50
- * Common stop words to filter from search queries.
51
- * Includes generic English + code-specific noise words.
52
- */
53
- exports.STOP_WORDS = new Set([
54
- // English
55
- 'the', 'a', 'an', 'and', 'or', 'but', 'in', 'on', 'at', 'to', 'for',
56
- 'of', 'with', 'by', 'from', 'is', 'it', 'that', 'this', 'are', 'was',
57
- 'be', 'has', 'had', 'have', 'do', 'does', 'did', 'will', 'would', 'could',
58
- 'should', 'may', 'might', 'can', 'shall', 'not', 'no', 'all', 'each',
59
- 'every', 'how', 'what', 'where', 'when', 'who', 'which', 'why',
60
- 'i', 'me', 'my', 'we', 'our', 'you', 'your', 'he', 'she', 'they',
61
- 'show', 'give', 'tell',
62
- 'been', 'done', 'made', 'used', 'using', 'work', 'works', 'found',
63
- 'also', 'into', 'then', 'than', 'just', 'more', 'some', 'such',
64
- 'over', 'only', 'out', 'its', 'so', 'up', 'as', 'if',
65
- 'look', 'need', 'needs', 'want', 'happen', 'happens',
66
- 'affect', 'affected', 'break', 'breaks', 'failing',
67
- 'implemented', 'implement',
68
- // Code-specific noise (avoid filtering common symbol names like get/set/add/build/find/list)
69
- 'code', 'file', 'files', 'function', 'method', 'class', 'type',
70
- 'fix', 'bug', 'called',
71
- ]);
72
- /**
73
- * Generate stem variants of a search term by removing common English suffixes.
74
- * Used for FTS query expansion so "caching" also finds "cache", "eviction" finds "evict", etc.
75
- * Stems are used as PREFIX matches in FTS, so they don't need to be perfect English words.
76
- */
77
- function getStemVariants(term) {
78
- const variants = new Set();
79
- const t = term.toLowerCase();
80
- // -ing: caching→cach/cache, handling→handl/handle, running→run
81
- if (t.endsWith('ing') && t.length > 5) {
82
- const base = t.slice(0, -3);
83
- variants.add(base);
84
- variants.add(base + 'e');
85
- if (base.length >= 2 && base[base.length - 1] === base[base.length - 2]) {
86
- variants.add(base.slice(0, -1));
87
- }
88
- }
89
- // -tion/-sion: eviction→evict, expression→express
90
- if ((t.endsWith('tion') || t.endsWith('sion')) && t.length > 5) {
91
- variants.add(t.slice(0, -3));
92
- }
93
- // -ment: management→manage
94
- if (t.endsWith('ment') && t.length > 6) {
95
- variants.add(t.slice(0, -4));
96
- }
97
- // -ies: entries→entry
98
- if (t.endsWith('ies') && t.length > 4) {
99
- variants.add(t.slice(0, -3) + 'y');
100
- }
101
- // -es: processes→process, classes→class
102
- else if (t.endsWith('es') && t.length > 4) {
103
- variants.add(t.slice(0, -2));
104
- }
105
- // -s: errors→error (skip -ss endings like "class")
106
- else if (t.endsWith('s') && !t.endsWith('ss') && t.length > 4) {
107
- variants.add(t.slice(0, -1));
108
- }
109
- // -ed: handled→handle, propagated→propagate, carried→carry
110
- if (t.endsWith('ed') && !t.endsWith('eed') && t.length > 4) {
111
- variants.add(t.slice(0, -1));
112
- variants.add(t.slice(0, -2));
113
- if (t.endsWith('ied') && t.length > 5) {
114
- variants.add(t.slice(0, -3) + 'y');
115
- }
116
- }
117
- // -er: builder→build/builde, handler→handl/handle, getter→get
118
- if (t.endsWith('er') && t.length > 4) {
119
- const base = t.slice(0, -2);
120
- variants.add(base);
121
- variants.add(base + 'e');
122
- if (base.length >= 2 && base[base.length - 1] === base[base.length - 2]) {
123
- variants.add(base.slice(0, -1));
124
- }
125
- }
126
- return [...variants].filter(v => v.length >= 3 && v !== t);
127
- }
128
- /**
129
- * Extract meaningful search terms from a natural language query.
130
- * Splits camelCase, PascalCase, snake_case, SCREAMING_SNAKE, and dot.notation
131
- * into individual tokens before filtering.
132
- *
133
- * Preserves original compound identifiers (e.g., "scrapeLoop") alongside
134
- * their split parts so that FTS can match both the full symbol name and
135
- * individual words within it.
136
- *
137
- * Also generates stem variants (e.g., "caching"→"cache", "eviction"→"evict")
138
- * so FTS prefix matching can find related code symbols.
139
- */
140
- function extractSearchTerms(query, options) {
141
- const includeStems = options?.stems !== false;
142
- const tokens = new Set();
143
- // First, extract and preserve compound identifiers before splitting
144
- // CamelCase: scrapeLoop, UserService, getCallGraph
145
- const compoundPattern = /\b([a-zA-Z][a-zA-Z0-9]*(?:[A-Z][a-z]+)+|[A-Z][a-z]+(?:[A-Z][a-z]*)+)\b/g;
146
- let match;
147
- while ((match = compoundPattern.exec(query)) !== null) {
148
- if (match[1] && match[1].length >= 3) {
149
- tokens.add(match[1].toLowerCase()); // preserve full compound: "scrapeloop"
150
- }
151
- }
152
- // snake_case: scrape_loop, user_service
153
- const snakePattern = /\b([a-zA-Z][a-zA-Z0-9]*(?:_[a-zA-Z0-9]+)+)\b/g;
154
- while ((match = snakePattern.exec(query)) !== null) {
155
- if (match[1] && match[1].length >= 3) {
156
- tokens.add(match[1].toLowerCase());
157
- }
158
- }
159
- // Split camelCase / PascalCase: "getUserName" → "get User Name"
160
- const camelSplit = query
161
- .replace(/([a-z])([A-Z])/g, '$1 $2')
162
- .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2');
163
- // Replace underscores and dots with spaces (snake_case, dot.notation)
164
- const normalised = camelSplit.replace(/[_.]+/g, ' ');
165
- // Split on any non-alphanumeric character
166
- const words = normalised.split(/[^a-zA-Z0-9]+/).filter(Boolean);
167
- for (const word of words) {
168
- const lower = word.toLowerCase();
169
- if (lower.length < 3)
170
- continue;
171
- if (exports.STOP_WORDS.has(lower))
172
- continue;
173
- tokens.add(lower);
174
- }
175
- // Generate stem variants for broader FTS matching.
176
- // "caching" → "cache" finds CacheBuilder; "eviction" → "evict" finds evictEntries.
177
- // Also enables co-occurrence dampening by increasing term count above 1.
178
- // Stems are skipped when scoring path relevance (stems inflate path scores).
179
- if (includeStems) {
180
- const stems = new Set();
181
- for (const token of tokens) {
182
- for (const variant of getStemVariants(token)) {
183
- if (!tokens.has(variant) && !exports.STOP_WORDS.has(variant)) {
184
- stems.add(variant);
185
- }
186
- }
187
- }
188
- for (const stem of stems) {
189
- tokens.add(stem);
190
- }
191
- }
192
- return [...tokens];
193
- }
194
- /**
195
- * Score path relevance to a query
196
- * Higher score = more relevant path
197
- */
198
- function scorePathRelevance(filePath, query) {
199
- // Use base terms only — stem variants inflate path scores by generating
200
- // many near-duplicate terms that all match the same path segments.
201
- const terms = extractSearchTerms(query, { stems: false });
202
- if (terms.length === 0)
203
- return 0;
204
- const pathLower = filePath.toLowerCase();
205
- const fileName = path.basename(filePath).toLowerCase();
206
- const dirName = path.dirname(filePath).toLowerCase();
207
- let score = 0;
208
- for (const term of terms) {
209
- // Exact filename match (strongest)
210
- if (fileName.includes(term))
211
- score += 10;
212
- // Directory match
213
- if (dirName.includes(term))
214
- score += 5;
215
- // General path match
216
- else if (pathLower.includes(term))
217
- score += 3;
218
- }
219
- // Deprioritize test files unless the query is explicitly about tests
220
- const queryLower = query.toLowerCase();
221
- const isTestQuery = queryLower.includes('test') || queryLower.includes('spec');
222
- if (!isTestQuery && isTestFile(filePath)) {
223
- score -= 15;
224
- }
225
- return score;
226
- }
227
- /**
228
- * Check if a file path looks like a test file
229
- */
230
- function isTestFile(filePath) {
231
- const lower = filePath.toLowerCase();
232
- const fileName = path.basename(filePath); // original case — needed for camelCase boundaries
233
- const lowerName = fileName.toLowerCase();
234
- // --- Filename patterns ---
235
- if (lowerName.startsWith('test_') || // python: test_foo.py
236
- lowerName.startsWith('test.') ||
237
- // separator-delimited: foo_test.go, foo.test.ts, foo-spec.rb, bar_spec.py
238
- /[._-](test|tests|spec|specs)\.[a-z0-9]+$/.test(lowerName) ||
239
- // CamelCase suffix (Java/Kotlin/Swift/C#/Scala): FooTest.kt, BarTests.swift,
240
- // BazSpec.scala, QuxTestCase.java. Capital-led so "latest.kt"/"manifest.kt"
241
- // (lowercase "test") are NOT matched.
242
- /(?:Test|Tests|TestCase|Tester|Spec|Specs)\.[A-Za-z0-9]+$/.test(fileName)) {
243
- return true;
244
- }
245
- // --- Directory patterns ---
246
- if (lower.includes('/tests/') || lower.includes('/test/') ||
247
- lower.includes('/__tests__/') || lower.includes('/spec/') ||
248
- lower.includes('/specs/') || lower.includes('/testlib/') ||
249
- lower.includes('/testing/') ||
250
- lower.startsWith('test/') || lower.startsWith('tests/') ||
251
- lower.startsWith('spec/') || lower.startsWith('specs/') ||
252
- // CamelCase test source-set dirs (Kotlin Multiplatform / Gradle / Xcode):
253
- // jvmTest/, commonTest/, androidTest/, iosTest/, integrationTest/. Capital-led
254
- // so "latest/" / "manifest/" are not matched.
255
- /(?:^|\/)[A-Za-z0-9]*(?:Test|Tests|Spec)\//.test(filePath)) {
256
- return true;
257
- }
258
- // Non-production directories: examples, samples, benchmarks, fixtures, demos.
259
- // Check both mid-path (/integration/) and start-of-path (integration/) since
260
- // file paths may be stored as relative paths without a leading slash.
261
- return matchesNonProductionDir(lower);
262
- }
263
- /**
264
- * Check if a path is in a non-production directory (integration, sample, example, etc.)
265
- * Handles both absolute paths (/foo/integration/bar) and relative paths (integration/bar).
266
- */
267
- function matchesNonProductionDir(lowerPath) {
268
- const dirs = [
269
- 'integration', 'sample', 'samples', 'example', 'examples',
270
- 'fixture', 'fixtures', 'benchmark', 'benchmarks', 'demo', 'demos',
271
- ];
272
- for (const dir of dirs) {
273
- if (lowerPath.includes('/' + dir + '/') || lowerPath.startsWith(dir + '/')) {
274
- return true;
275
- }
276
- }
277
- return false;
278
- }
279
- /**
280
- * Bonus when a node's name matches the search query.
281
- * Exact matches get the largest boost; prefix matches get smaller boosts.
282
- * Multi-word queries also check individual term matches against the name.
283
- */
284
- function nameMatchBonus(nodeName, query) {
285
- const nameLower = nodeName.toLowerCase();
286
- // Split query into word-level terms (handles "CacheBuilder build" → ["cache","builder","build"])
287
- const rawTerms = query
288
- .replace(/([a-z])([A-Z])/g, '$1 $2')
289
- .split(/[\s_.\-]+/)
290
- .map(t => t.toLowerCase())
291
- .filter(t => t.length >= 2);
292
- // Also keep original space-separated tokens for exact-term matching
293
- const queryTokens = query.split(/\s+/).map(t => t.toLowerCase()).filter(t => t.length >= 2);
294
- // Full query as a single token (for compound identifiers like "CacheBuilder")
295
- const queryLower = query.replace(/[\s]+/g, '').toLowerCase();
296
- // Exact match: query exactly equals the node name
297
- if (nameLower === queryLower)
298
- return 80;
299
- // Exact match on a query token: "CacheBuilder build" and node name is "build"
300
- if (queryTokens.length > 1 && queryTokens.includes(nameLower))
301
- return 60;
302
- // Name starts with query — scale by length ratio so "Pod"→"Pod" (exact, handled above)
303
- // scores much higher than "Pod"→"PodGCControllerOptions" (ratio 0.125).
304
- if (nameLower.startsWith(queryLower)) {
305
- const ratio = queryLower.length / nameLower.length;
306
- return Math.round(10 + 30 * ratio);
307
- }
308
- // All camelCase-split terms appear in the name
309
- if (rawTerms.length > 1) {
310
- const allMatch = rawTerms.every(t => nameLower.includes(t));
311
- if (allMatch)
312
- return 15;
313
- }
314
- // Name contains the full query as substring
315
- if (nameLower.includes(queryLower))
316
- return 10;
317
- return 0;
318
- }
319
- /**
320
- * Kind-based bonus for search ranking
321
- * Functions and classes are typically more relevant than variables/imports
322
- */
323
- function kindBonus(kind) {
324
- const bonuses = {
325
- function: 10,
326
- method: 10,
327
- class: 8,
328
- interface: 9,
329
- type_alias: 6,
330
- struct: 6,
331
- trait: 9,
332
- enum: 5,
333
- component: 8,
334
- route: 9,
335
- module: 4,
336
- property: 3,
337
- field: 3,
338
- variable: 2,
339
- constant: 3,
340
- import: 1,
341
- export: 1,
342
- parameter: 0,
343
- namespace: 4,
344
- file: 0,
345
- protocol: 9,
346
- enum_member: 3,
347
- };
348
- return bonuses[kind] ?? 0;
349
- }
350
- //# sourceMappingURL=query-utils.js.map