@lzehrung/codegraph-core 2.1.0 → 2.1.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 (342) hide show
  1. package/dist/agent/candidateTests.d.ts +12 -0
  2. package/dist/agent/candidateTests.d.ts.map +1 -0
  3. package/dist/agent/candidateTests.js +17 -0
  4. package/dist/agent/candidateTests.js.map +1 -0
  5. package/dist/agent/explore.d.ts.map +1 -1
  6. package/dist/agent/explore.js +9 -6
  7. package/dist/agent/explore.js.map +1 -1
  8. package/dist/agent/fileView.d.ts.map +1 -1
  9. package/dist/agent/fileView.js +113 -120
  10. package/dist/agent/fileView.js.map +1 -1
  11. package/dist/agent/orient.d.ts.map +1 -1
  12. package/dist/agent/orient.js +5 -4
  13. package/dist/agent/orient.js.map +1 -1
  14. package/dist/agent/query-index/candidates.d.ts +13 -2
  15. package/dist/agent/query-index/candidates.d.ts.map +1 -1
  16. package/dist/agent/query-index/candidates.js +28 -39
  17. package/dist/agent/query-index/candidates.js.map +1 -1
  18. package/dist/agent/query-index/schema.d.ts.map +1 -1
  19. package/dist/agent/query-index/schema.js.map +1 -1
  20. package/dist/agent/query-index/sessionStore.d.ts.map +1 -1
  21. package/dist/agent/query-index/sessionStore.js +42 -26
  22. package/dist/agent/query-index/sessionStore.js.map +1 -1
  23. package/dist/agent/query-index/store.d.ts +7 -0
  24. package/dist/agent/query-index/store.d.ts.map +1 -1
  25. package/dist/agent/query-index/store.js +71 -0
  26. package/dist/agent/query-index/store.js.map +1 -1
  27. package/dist/agent/refactorPlan.d.ts.map +1 -1
  28. package/dist/agent/refactorPlan.js +6 -14
  29. package/dist/agent/refactorPlan.js.map +1 -1
  30. package/dist/agent/renamePreview.d.ts +2 -5
  31. package/dist/agent/renamePreview.d.ts.map +1 -1
  32. package/dist/agent/renamePreview.js +82 -78
  33. package/dist/agent/renamePreview.js.map +1 -1
  34. package/dist/agent/search.d.ts.map +1 -1
  35. package/dist/agent/search.js +39 -17
  36. package/dist/agent/search.js.map +1 -1
  37. package/dist/agent/semanticSymbols.d.ts.map +1 -1
  38. package/dist/agent/semanticSymbols.js +2 -1
  39. package/dist/agent/semanticSymbols.js.map +1 -1
  40. package/dist/agent/session.d.ts +4 -0
  41. package/dist/agent/session.d.ts.map +1 -1
  42. package/dist/agent/session.js +19 -6
  43. package/dist/agent/session.js.map +1 -1
  44. package/dist/agent-tools.d.ts +1 -1
  45. package/dist/agent-tools.d.ts.map +1 -1
  46. package/dist/agent-tools.js +6 -15
  47. package/dist/agent-tools.js.map +1 -1
  48. package/dist/chunking/chunkFile.d.ts +5 -0
  49. package/dist/chunking/chunkFile.d.ts.map +1 -1
  50. package/dist/chunking/chunkFile.js +14 -15
  51. package/dist/chunking/chunkFile.js.map +1 -1
  52. package/dist/config.d.ts +3 -0
  53. package/dist/config.d.ts.map +1 -1
  54. package/dist/config.js +35 -3
  55. package/dist/config.js.map +1 -1
  56. package/dist/documentLinks/check.d.ts +2 -1
  57. package/dist/documentLinks/check.d.ts.map +1 -1
  58. package/dist/documentLinks/check.js +2 -2
  59. package/dist/documentLinks/check.js.map +1 -1
  60. package/dist/duplicate-token-normalization.d.ts.map +1 -1
  61. package/dist/duplicate-token-normalization.js +10 -2
  62. package/dist/duplicate-token-normalization.js.map +1 -1
  63. package/dist/duplicates/scoring.d.ts +0 -10
  64. package/dist/duplicates/scoring.d.ts.map +1 -1
  65. package/dist/duplicates/scoring.js +9 -9
  66. package/dist/duplicates/scoring.js.map +1 -1
  67. package/dist/duplicates/unitCache.d.ts +15 -9
  68. package/dist/duplicates/unitCache.d.ts.map +1 -1
  69. package/dist/duplicates/unitCache.js +184 -33
  70. package/dist/duplicates/unitCache.js.map +1 -1
  71. package/dist/duplicates/units.d.ts +6 -15
  72. package/dist/duplicates/units.d.ts.map +1 -1
  73. package/dist/duplicates/units.js +36 -18
  74. package/dist/duplicates/units.js.map +1 -1
  75. package/dist/frameworks/angularjs.d.ts.map +1 -1
  76. package/dist/frameworks/angularjs.js +18 -12
  77. package/dist/frameworks/angularjs.js.map +1 -1
  78. package/dist/graph-builder.d.ts.map +1 -1
  79. package/dist/graph-builder.js +12 -9
  80. package/dist/graph-builder.js.map +1 -1
  81. package/dist/graph-edge-collector.d.ts +1 -0
  82. package/dist/graph-edge-collector.d.ts.map +1 -1
  83. package/dist/graph-edge-collector.js +1 -1
  84. package/dist/graph-edge-collector.js.map +1 -1
  85. package/dist/graphs/grep.d.ts.map +1 -1
  86. package/dist/graphs/grep.js +7 -2
  87. package/dist/graphs/grep.js.map +1 -1
  88. package/dist/graphs/specifiers.d.ts.map +1 -1
  89. package/dist/graphs/specifiers.js +8 -2
  90. package/dist/graphs/specifiers.js.map +1 -1
  91. package/dist/graphs/symbol-graph-detailed.d.ts.map +1 -1
  92. package/dist/graphs/symbol-graph-detailed.js +3 -1
  93. package/dist/graphs/symbol-graph-detailed.js.map +1 -1
  94. package/dist/impact/analyzer.d.ts.map +1 -1
  95. package/dist/impact/analyzer.js +15 -1
  96. package/dist/impact/analyzer.js.map +1 -1
  97. package/dist/impact/call-compatibility/textScanner.d.ts +23 -0
  98. package/dist/impact/call-compatibility/textScanner.d.ts.map +1 -0
  99. package/dist/impact/call-compatibility/textScanner.js +615 -0
  100. package/dist/impact/call-compatibility/textScanner.js.map +1 -0
  101. package/dist/impact/callCompatibility.d.ts.map +1 -1
  102. package/dist/impact/callCompatibility.js +9 -570
  103. package/dist/impact/callCompatibility.js.map +1 -1
  104. package/dist/impact/direct.js +7 -6
  105. package/dist/impact/direct.js.map +1 -1
  106. package/dist/impact/index.d.ts +6 -0
  107. package/dist/impact/index.d.ts.map +1 -1
  108. package/dist/impact/index.js +0 -8
  109. package/dist/impact/index.js.map +1 -1
  110. package/dist/impact/map.js +2 -2
  111. package/dist/impact/map.js.map +1 -1
  112. package/dist/impact/memberResolutionCoverage.d.ts.map +1 -1
  113. package/dist/impact/memberResolutionCoverage.js +5 -1
  114. package/dist/impact/memberResolutionCoverage.js.map +1 -1
  115. package/dist/impact/parse.d.ts.map +1 -1
  116. package/dist/impact/parse.js +98 -36
  117. package/dist/impact/parse.js.map +1 -1
  118. package/dist/impact/referenceCache.js +1 -1
  119. package/dist/impact/referenceCache.js.map +1 -1
  120. package/dist/impact/report-suggestions.d.ts.map +1 -1
  121. package/dist/impact/report-suggestions.js +330 -61
  122. package/dist/impact/report-suggestions.js.map +1 -1
  123. package/dist/impact/reportCompact.js +7 -0
  124. package/dist/impact/reportCompact.js.map +1 -1
  125. package/dist/impact/streaming.d.ts +32 -2
  126. package/dist/impact/streaming.d.ts.map +1 -1
  127. package/dist/impact/streaming.js +61 -2
  128. package/dist/impact/streaming.js.map +1 -1
  129. package/dist/impact/suggestions.d.ts.map +1 -1
  130. package/dist/impact/suggestions.js +1 -1
  131. package/dist/impact/suggestions.js.map +1 -1
  132. package/dist/impact/types.d.ts +7 -20
  133. package/dist/impact/types.d.ts.map +1 -1
  134. package/dist/impact/types.js.map +1 -1
  135. package/dist/index.d.ts +2 -2
  136. package/dist/index.d.ts.map +1 -1
  137. package/dist/index.js +1 -1
  138. package/dist/index.js.map +1 -1
  139. package/dist/indexer/build-cache/location.d.ts +19 -0
  140. package/dist/indexer/build-cache/location.d.ts.map +1 -0
  141. package/dist/indexer/build-cache/location.js +132 -0
  142. package/dist/indexer/build-cache/location.js.map +1 -0
  143. package/dist/indexer/build-cache/manifest.d.ts +9 -3
  144. package/dist/indexer/build-cache/manifest.d.ts.map +1 -1
  145. package/dist/indexer/build-cache/manifest.js +77 -20
  146. package/dist/indexer/build-cache/manifest.js.map +1 -1
  147. package/dist/indexer/build-cache/module-cache.d.ts +23 -2
  148. package/dist/indexer/build-cache/module-cache.d.ts.map +1 -1
  149. package/dist/indexer/build-cache/module-cache.js +92 -32
  150. package/dist/indexer/build-cache/module-cache.js.map +1 -1
  151. package/dist/indexer/build-cache/options.d.ts +3 -1
  152. package/dist/indexer/build-cache/options.d.ts.map +1 -1
  153. package/dist/indexer/build-cache/options.js +10 -2
  154. package/dist/indexer/build-cache/options.js.map +1 -1
  155. package/dist/indexer/build-cache/project-snapshot.d.ts +32 -8
  156. package/dist/indexer/build-cache/project-snapshot.d.ts.map +1 -1
  157. package/dist/indexer/build-cache/project-snapshot.js +333 -44
  158. package/dist/indexer/build-cache/project-snapshot.js.map +1 -1
  159. package/dist/indexer/build-cache/reports.d.ts.map +1 -1
  160. package/dist/indexer/build-cache/reports.js +10 -1
  161. package/dist/indexer/build-cache/reports.js.map +1 -1
  162. package/dist/indexer/build-cache/resolver-environment.d.ts +9 -0
  163. package/dist/indexer/build-cache/resolver-environment.d.ts.map +1 -0
  164. package/dist/indexer/build-cache/resolver-environment.js +133 -0
  165. package/dist/indexer/build-cache/resolver-environment.js.map +1 -0
  166. package/dist/indexer/build-cache.d.ts +4 -3
  167. package/dist/indexer/build-cache.d.ts.map +1 -1
  168. package/dist/indexer/build-cache.js +4 -3
  169. package/dist/indexer/build-cache.js.map +1 -1
  170. package/dist/indexer/build-index.d.ts.map +1 -1
  171. package/dist/indexer/build-index.js +154 -47
  172. package/dist/indexer/build-index.js.map +1 -1
  173. package/dist/indexer/build-manifest.d.ts +1 -0
  174. package/dist/indexer/build-manifest.d.ts.map +1 -1
  175. package/dist/indexer/build-manifest.js +12 -5
  176. package/dist/indexer/build-manifest.js.map +1 -1
  177. package/dist/indexer/call-hierarchy.d.ts.map +1 -1
  178. package/dist/indexer/call-hierarchy.js.map +1 -1
  179. package/dist/indexer/finalize.d.ts.map +1 -1
  180. package/dist/indexer/finalize.js +7 -4
  181. package/dist/indexer/finalize.js.map +1 -1
  182. package/dist/indexer/imports/jsTextImports.d.ts.map +1 -1
  183. package/dist/indexer/imports/jsTextImports.js +14 -6
  184. package/dist/indexer/imports/jsTextImports.js.map +1 -1
  185. package/dist/indexer/imports/languageSpecific.d.ts.map +1 -1
  186. package/dist/indexer/imports/languageSpecific.js +10 -5
  187. package/dist/indexer/imports/languageSpecific.js.map +1 -1
  188. package/dist/indexer/imports/nativeCaptures.d.ts.map +1 -1
  189. package/dist/indexer/imports/nativeCaptures.js +4 -1
  190. package/dist/indexer/imports/nativeCaptures.js.map +1 -1
  191. package/dist/indexer/imports/python.d.ts.map +1 -1
  192. package/dist/indexer/imports/python.js +7 -2
  193. package/dist/indexer/imports/python.js.map +1 -1
  194. package/dist/indexer/load-current-index.d.ts.map +1 -1
  195. package/dist/indexer/load-current-index.js.map +1 -1
  196. package/dist/indexer/locals-and-exports.d.ts.map +1 -1
  197. package/dist/indexer/locals-and-exports.js +52 -22
  198. package/dist/indexer/locals-and-exports.js.map +1 -1
  199. package/dist/indexer/navigation-goto.d.ts.map +1 -1
  200. package/dist/indexer/navigation-goto.js +26 -16
  201. package/dist/indexer/navigation-goto.js.map +1 -1
  202. package/dist/indexer/navigation-local.d.ts.map +1 -1
  203. package/dist/indexer/navigation-local.js +7 -4
  204. package/dist/indexer/navigation-local.js.map +1 -1
  205. package/dist/indexer/navigation-references.d.ts +1 -1
  206. package/dist/indexer/navigation-references.d.ts.map +1 -1
  207. package/dist/indexer/navigation-references.js +27 -16
  208. package/dist/indexer/navigation-references.js.map +1 -1
  209. package/dist/indexer/navigation-resolve.d.ts.map +1 -1
  210. package/dist/indexer/navigation-resolve.js +116 -53
  211. package/dist/indexer/navigation-resolve.js.map +1 -1
  212. package/dist/indexer/navigation.d.ts +2 -1
  213. package/dist/indexer/navigation.d.ts.map +1 -1
  214. package/dist/indexer/navigation.js +24 -20
  215. package/dist/indexer/navigation.js.map +1 -1
  216. package/dist/indexer/parse-context.d.ts +1 -1
  217. package/dist/indexer/parse-context.d.ts.map +1 -1
  218. package/dist/indexer/parse-context.js +2 -2
  219. package/dist/indexer/parse-context.js.map +1 -1
  220. package/dist/indexer/reference-context.d.ts +2 -2
  221. package/dist/indexer/reference-context.d.ts.map +1 -1
  222. package/dist/indexer/reference-context.js +4 -2
  223. package/dist/indexer/reference-context.js.map +1 -1
  224. package/dist/indexer/scope-types.d.ts +3 -0
  225. package/dist/indexer/scope-types.d.ts.map +1 -1
  226. package/dist/indexer/scope.js +37 -38
  227. package/dist/indexer/scope.js.map +1 -1
  228. package/dist/indexer/shared.d.ts.map +1 -1
  229. package/dist/indexer/shared.js +3 -1
  230. package/dist/indexer/shared.js.map +1 -1
  231. package/dist/indexer/type-hierarchy.d.ts.map +1 -1
  232. package/dist/indexer/type-hierarchy.js +12 -8
  233. package/dist/indexer/type-hierarchy.js.map +1 -1
  234. package/dist/indexer/types.d.ts +22 -0
  235. package/dist/indexer/types.d.ts.map +1 -1
  236. package/dist/indexer/workspace-symbols.d.ts.map +1 -1
  237. package/dist/indexer/workspace-symbols.js +5 -3
  238. package/dist/indexer/workspace-symbols.js.map +1 -1
  239. package/dist/languages/definitions/csharp.d.ts.map +1 -1
  240. package/dist/languages/definitions/csharp.js +8 -0
  241. package/dist/languages/definitions/csharp.js.map +1 -1
  242. package/dist/languages/definitions/java.d.ts.map +1 -1
  243. package/dist/languages/definitions/java.js +3 -0
  244. package/dist/languages/definitions/java.js.map +1 -1
  245. package/dist/languages/definitions/python.d.ts.map +1 -1
  246. package/dist/languages/definitions/python.js +2 -0
  247. package/dist/languages/definitions/python.js.map +1 -1
  248. package/dist/languages/definitions/rust.d.ts.map +1 -1
  249. package/dist/languages/definitions/rust.js +2 -0
  250. package/dist/languages/definitions/rust.js.map +1 -1
  251. package/dist/languages/importStatementParsers.d.ts +2 -0
  252. package/dist/languages/importStatementParsers.d.ts.map +1 -1
  253. package/dist/languages/importStatementParsers.js +24 -10
  254. package/dist/languages/importStatementParsers.js.map +1 -1
  255. package/dist/native/byteIndex.d.ts +26 -0
  256. package/dist/native/byteIndex.d.ts.map +1 -0
  257. package/dist/native/byteIndex.js +70 -0
  258. package/dist/native/byteIndex.js.map +1 -0
  259. package/dist/native/projectedTree.d.ts +3 -2
  260. package/dist/native/projectedTree.d.ts.map +1 -1
  261. package/dist/native/projectedTree.js +6 -50
  262. package/dist/native/projectedTree.js.map +1 -1
  263. package/dist/native/queryResults.d.ts +7 -1
  264. package/dist/native/queryResults.d.ts.map +1 -1
  265. package/dist/native/queryResults.js +13 -5
  266. package/dist/native/queryResults.js.map +1 -1
  267. package/dist/review/changes.d.ts +2 -0
  268. package/dist/review/changes.d.ts.map +1 -1
  269. package/dist/review/changes.js +10 -0
  270. package/dist/review/changes.js.map +1 -1
  271. package/dist/review/deleted.d.ts.map +1 -1
  272. package/dist/review/deleted.js +20 -2
  273. package/dist/review/deleted.js.map +1 -1
  274. package/dist/review/summaries.d.ts.map +1 -1
  275. package/dist/review/summaries.js +13 -10
  276. package/dist/review/summaries.js.map +1 -1
  277. package/dist/review.d.ts.map +1 -1
  278. package/dist/review.js +7 -2
  279. package/dist/review.js.map +1 -1
  280. package/dist/session.d.ts +20 -4
  281. package/dist/session.d.ts.map +1 -1
  282. package/dist/session.js +76 -16
  283. package/dist/session.js.map +1 -1
  284. package/dist/sql/types.d.ts.map +1 -1
  285. package/dist/sqlite/query.d.ts +29 -0
  286. package/dist/sqlite/query.d.ts.map +1 -1
  287. package/dist/sqlite/query.js +98 -11
  288. package/dist/sqlite/query.js.map +1 -1
  289. package/dist/sqlite/rawQueryWorker.d.ts +22 -0
  290. package/dist/sqlite/rawQueryWorker.d.ts.map +1 -0
  291. package/dist/sqlite/rawQueryWorker.js +31 -0
  292. package/dist/sqlite/rawQueryWorker.js.map +1 -0
  293. package/dist/sqlite/rawQueryWorkerPool.d.ts +66 -0
  294. package/dist/sqlite/rawQueryWorkerPool.d.ts.map +1 -0
  295. package/dist/sqlite/rawQueryWorkerPool.js +142 -0
  296. package/dist/sqlite/rawQueryWorkerPool.js.map +1 -0
  297. package/dist/sqlite/schema.d.ts.map +1 -1
  298. package/dist/sqlite/schema.js.map +1 -1
  299. package/dist/sqlite-driver.d.ts.map +1 -1
  300. package/dist/sqlite-driver.js +2 -1
  301. package/dist/sqlite-driver.js.map +1 -1
  302. package/dist/sqlite.d.ts +1 -1
  303. package/dist/sqlite.d.ts.map +1 -1
  304. package/dist/sqlite.js +1 -1
  305. package/dist/sqlite.js.map +1 -1
  306. package/dist/util/bloomFilter.d.ts +3 -2
  307. package/dist/util/bloomFilter.d.ts.map +1 -1
  308. package/dist/util/bloomFilter.js +8 -8
  309. package/dist/util/bloomFilter.js.map +1 -1
  310. package/dist/util/confinedFile.d.ts +41 -2
  311. package/dist/util/confinedFile.d.ts.map +1 -1
  312. package/dist/util/confinedFile.js +101 -2
  313. package/dist/util/confinedFile.js.map +1 -1
  314. package/dist/util/git.d.ts +2 -0
  315. package/dist/util/git.d.ts.map +1 -1
  316. package/dist/util/git.js +109 -26
  317. package/dist/util/git.js.map +1 -1
  318. package/dist/util/identifiers.d.ts +75 -0
  319. package/dist/util/identifiers.d.ts.map +1 -0
  320. package/dist/util/identifiers.js +82 -0
  321. package/dist/util/identifiers.js.map +1 -0
  322. package/dist/util/paths.d.ts.map +1 -1
  323. package/dist/util/paths.js.map +1 -1
  324. package/dist/util/projectFiles.d.ts.map +1 -1
  325. package/dist/util/projectFiles.js +43 -14
  326. package/dist/util/projectFiles.js.map +1 -1
  327. package/dist/util/resolution/jvm.d.ts.map +1 -1
  328. package/dist/util/resolution/jvm.js +9 -4
  329. package/dist/util/resolution/jvm.js.map +1 -1
  330. package/dist/util/resolution/php.d.ts.map +1 -1
  331. package/dist/util/resolution/php.js +6 -5
  332. package/dist/util/resolution/php.js.map +1 -1
  333. package/dist/util/rustTestModules.d.ts.map +1 -1
  334. package/dist/util/rustTestModules.js +4 -2
  335. package/dist/util/rustTestModules.js.map +1 -1
  336. package/dist/util/specifiers.d.ts.map +1 -1
  337. package/dist/util/specifiers.js +10 -3
  338. package/dist/util/specifiers.js.map +1 -1
  339. package/dist/util/sqliteSchema.d.ts.map +1 -1
  340. package/dist/util/sqliteSchema.js +10 -1
  341. package/dist/util/sqliteSchema.js.map +1 -1
  342. package/package.json +2 -2
@@ -7,14 +7,14 @@ import { logWithLevel } from "../logging.js";
7
7
  import { cacheDatabasePath } from "../indexer/build-cache/module-cache.js";
8
8
  import { createSqliteTableIfMissing, ensureSqliteVersionedTableSchema, recreateSqliteTable, sqliteTableColumns, } from "../util/sqliteSchema.js";
9
9
  import { lruMapGet } from "../util/lruMap.js";
10
- import { fileIdentityKey, normalizePath } from "../util/paths.js";
11
- // v3: drop dead `text`/`normalizedTokens` fields (never read after construction) and
12
- // brotli-compress the payload; both cut on-disk cache size by roughly 8x.
13
- export const DUPLICATE_UNIT_CACHE_VERSION = 3;
14
- export const DUPLICATE_UNIT_CACHE_SCHEMA_VERSION = 1;
10
+ import { assertFilePathWithinRoot, fileIdentityKey, normalizePath } from "../util/paths.js";
11
+ import { cacheAbsolutePath, cacheRelativePath } from "../indexer/build-cache/module-cache.js";
12
+ // v4: project-relative file fields and handles.
13
+ export const DUPLICATE_UNIT_CACHE_VERSION = 4;
14
+ export const DUPLICATE_UNIT_CACHE_SCHEMA_VERSION = 2;
15
15
  export const DUPLICATE_UNIT_CACHE_TABLE = "duplicate_unit_cache";
16
16
  export const DUPLICATE_UNIT_CACHE_SCHEMA_VERSION_KEY = "duplicate_unit_cache.schema_version";
17
- export const DUPLICATE_TOKENIZER_REVISION = 2;
17
+ export const DUPLICATE_TOKENIZER_REVISION = 5;
18
18
  export const DUPLICATE_UNIT_CACHE_MAX_ROWS = 5_000;
19
19
  export const DUPLICATE_UNIT_CACHE_MAX_AGE_MS = 30 * 24 * 60 * 60 * 1_000;
20
20
  export const DUPLICATE_UNIT_MEMORY_CACHE_MAX_ENTRIES = 2_048;
@@ -84,11 +84,13 @@ function writeDuplicateUnitMemoryCache(key, entry) {
84
84
  duplicateUnitMemoryCache.set(key, entry);
85
85
  duplicateUnitMemoryCacheBytes += entryBytes;
86
86
  }
87
- export function duplicateUnitCacheVariant(index, minTokens, maxTokens, shingleSize, windowSize) {
87
+ export function duplicateUnitCacheVariant(index, minTokens, maxTokens, shingleSize, windowSize, projectRoot) {
88
+ const normalizedProjectRoot = normalizePath(projectRoot ?? index.projectRoot ?? "");
88
89
  const nativeMode = normalizedDuplicateUnitCacheNativeMode(index.nativeMode);
89
90
  return JSON.stringify({
90
91
  version: DUPLICATE_UNIT_CACHE_VERSION,
91
92
  tokenizerRevision: DUPLICATE_TOKENIZER_REVISION,
93
+ projectRoot: normalizedProjectRoot,
92
94
  nativeMode,
93
95
  nativeDuplicateTokens: isNativeDuplicateTokenizationAvailable(index.nativeMode),
94
96
  nativeSyntaxLanguages: getNativeTreeSitterSupportedLanguageIds(index.nativeMode),
@@ -104,9 +106,13 @@ export function normalizedDuplicateUnitCacheNativeMode(nativeMode) {
104
106
  return undefined;
105
107
  return nativeMode;
106
108
  }
107
- export function duplicateUnitCacheSignature(index, file) {
108
- const entry = index.manifestEntries?.get(file);
109
- return entry?.gitSig ?? entry?.sig;
109
+ export function duplicateUnitCacheSignature(index, file, projectRoot) {
110
+ const root = projectRoot ?? index.projectRoot;
111
+ const entry = index.manifestEntries?.get(file) ?? (root ? index.manifestEntries?.get(cacheRelativePath(root, file)) : undefined);
112
+ // `cacheSig` is git- or content-hash-derived and distinguishes a same-size edit whose mtime
113
+ // got restored; falling back straight to `sig` would let a non-Git project reuse stale
114
+ // duplicate units for a file whose content actually changed.
115
+ return entry?.cacheSig ?? entry?.gitSig ?? entry?.sig;
110
116
  }
111
117
  export function duplicateUnitCacheKey(file, variant) {
112
118
  return `${file}\u0000${variant}`;
@@ -125,7 +131,7 @@ export function createDuplicateUnitCacheTable(db) {
125
131
  export function recreateDuplicateUnitCacheTable(db) {
126
132
  recreateSqliteTable(db, DUPLICATE_UNIT_CACHE_TABLE, createDuplicateUnitCacheTable);
127
133
  }
128
- export function migrateDuplicateUnitCacheTable(db) {
134
+ export function migrateDuplicateUnitCacheTable(db, projectRoot) {
129
135
  const columns = sqliteTableColumns(db, DUPLICATE_UNIT_CACHE_TABLE);
130
136
  if (!columns.size) {
131
137
  createDuplicateUnitCacheTable(db);
@@ -144,15 +150,22 @@ export function migrateDuplicateUnitCacheTable(db) {
144
150
  if (!columns.has("updated_at")) {
145
151
  db.exec("ALTER TABLE duplicate_unit_cache ADD COLUMN updated_at INTEGER NOT NULL DEFAULT 0;");
146
152
  }
153
+ const rows = db.prepare("SELECT file FROM duplicate_unit_cache").all();
154
+ const update = db.prepare("UPDATE duplicate_unit_cache SET file = ? WHERE file = ?");
155
+ for (const row of rows) {
156
+ const relative = cacheRelativePath(projectRoot, row.file);
157
+ if (relative !== row.file)
158
+ update.run(relative, row.file);
159
+ }
147
160
  }
148
- export function ensureDuplicateUnitCacheSchema(db) {
161
+ export function ensureDuplicateUnitCacheSchema(db, projectRoot) {
149
162
  ensureSqliteVersionedTableSchema({
150
163
  db,
151
164
  tableName: DUPLICATE_UNIT_CACHE_TABLE,
152
165
  schemaVersionKey: DUPLICATE_UNIT_CACHE_SCHEMA_VERSION_KEY,
153
166
  schemaVersion: DUPLICATE_UNIT_CACHE_SCHEMA_VERSION,
154
167
  createTable: createDuplicateUnitCacheTable,
155
- migrateTable: migrateDuplicateUnitCacheTable,
168
+ migrateTable: (database) => migrateDuplicateUnitCacheTable(database, projectRoot),
156
169
  });
157
170
  }
158
171
  export function createDuplicateUnitDiskStatements(db) {
@@ -201,7 +214,7 @@ export function duplicateUnitDiskCache(index) {
201
214
  const db = new SqliteDatabase(dbPath);
202
215
  db.pragma("journal_mode = WAL");
203
216
  db.pragma("synchronous = NORMAL");
204
- ensureDuplicateUnitCacheSchema(db);
217
+ ensureDuplicateUnitCacheSchema(db, index.projectRoot ?? path.dirname(index.cacheRootDir));
205
218
  entry.db = db;
206
219
  entry.statements = createDuplicateUnitDiskStatements(db);
207
220
  }
@@ -265,34 +278,83 @@ export function closeDuplicateUnitCacheForIndex(index) {
265
278
  return;
266
279
  closeDuplicateUnitDiskDatabaseEntry(dbPath, entry);
267
280
  }
268
- export function tryLoadDuplicateUnitsFromCache(index, file, variant) {
269
- const sig = duplicateUnitCacheSignature(index, file);
281
+ export function tryLoadDuplicateUnitsFromCache(index, file, variant, projectRoot) {
282
+ const sig = duplicateUnitCacheSignature(index, file, projectRoot);
270
283
  if (!sig)
271
284
  return null;
272
285
  const key = duplicateUnitCacheKey(file, variant);
273
286
  if (index.cacheMode === "memory") {
274
287
  const entry = readDuplicateUnitMemoryCache(key);
275
- if (entry && entry.sig === sig)
276
- return entry.units;
288
+ return entry && entry.sig === sig ? entry.units : null;
289
+ }
290
+ if (index.cacheMode !== "disk")
277
291
  return null;
292
+ try {
293
+ const entry = duplicateUnitDiskCache(index);
294
+ const root = projectRoot ?? index.projectRoot ?? "";
295
+ const relativeFile = root ? cacheRelativePath(root, file) : file;
296
+ const row = entry?.statements?.load.get(relativeFile, variant);
297
+ if (!row || row.sig !== sig || row.version !== DUPLICATE_UNIT_CACHE_VERSION)
298
+ return null;
299
+ const parsed = JSON.parse(brotliDecompressSync(row.payload).toString("utf8"));
300
+ if (!Array.isArray(parsed))
301
+ return null;
302
+ if (root && !validatePersistedDuplicateUnits(root, parsed))
303
+ return null;
304
+ return deserializeDuplicateUnits(root ? transformDuplicateUnits(root, parsed, false) : parsed);
278
305
  }
279
- if (index.cacheMode === "disk") {
280
- try {
281
- const entry = duplicateUnitDiskCache(index);
282
- const row = entry?.statements?.load.get(file, variant);
283
- if (!row || row.sig !== sig || row.version !== DUPLICATE_UNIT_CACHE_VERSION)
284
- return null;
285
- const parsed = JSON.parse(brotliDecompressSync(row.payload).toString("utf8"));
286
- return deserializeDuplicateUnits(parsed);
306
+ catch {
307
+ return null;
308
+ }
309
+ }
310
+ export function writeDuplicateUnitsBatchToCache(index, writes, projectRoot) {
311
+ if (!writes.length)
312
+ return;
313
+ const root = projectRoot ?? index.projectRoot ?? "";
314
+ if (index.cacheMode === "memory") {
315
+ for (const write of writes) {
316
+ const sig = duplicateUnitCacheSignature(index, write.file, projectRoot);
317
+ if (!sig)
318
+ continue;
319
+ writeDuplicateUnitMemoryCache(duplicateUnitCacheKey(write.file, write.variant), {
320
+ sig,
321
+ units: write.units,
322
+ });
287
323
  }
288
- catch {
289
- return null;
324
+ return;
325
+ }
326
+ if (index.cacheMode !== "disk")
327
+ return;
328
+ try {
329
+ const entry = duplicateUnitDiskCache(index);
330
+ const preparedWrites = [];
331
+ for (const write of writes) {
332
+ const sig = duplicateUnitCacheSignature(index, write.file, projectRoot);
333
+ if (!sig)
334
+ continue;
335
+ const payload = brotliCompressSync(JSON.stringify(transformDuplicateUnits(root, serializeDuplicateUnits(write.units), true)), { params: { [zlibConstants.BROTLI_PARAM_QUALITY]: 4 } });
336
+ preparedWrites.push({
337
+ file: cacheRelativePath(root, write.file),
338
+ variant: write.variant,
339
+ sig,
340
+ payload,
341
+ });
290
342
  }
343
+ if (!preparedWrites.length || !entry?.db || !entry.statements)
344
+ return;
345
+ const now = Date.now();
346
+ entry.db.transaction(() => {
347
+ for (const write of preparedWrites) {
348
+ entry.statements?.write.run(write.file, write.variant, write.sig, DUPLICATE_UNIT_CACHE_VERSION, write.payload, now);
349
+ }
350
+ })();
351
+ }
352
+ catch {
353
+ // best-effort cache
291
354
  }
292
- return null;
293
355
  }
294
- export function writeDuplicateUnitsToCache(index, file, variant, units) {
295
- const sig = duplicateUnitCacheSignature(index, file);
356
+ export function writeDuplicateUnitsToCache(index, file, variant, units, projectRoot) {
357
+ const sig = duplicateUnitCacheSignature(index, file, projectRoot);
296
358
  if (!sig)
297
359
  return;
298
360
  const key = duplicateUnitCacheKey(file, variant);
@@ -302,11 +364,13 @@ export function writeDuplicateUnitsToCache(index, file, variant, units) {
302
364
  }
303
365
  if (index.cacheMode === "disk") {
304
366
  try {
367
+ const root = projectRoot ?? index.projectRoot ?? "";
305
368
  const entry = duplicateUnitDiskCache(index);
306
- const payload = brotliCompressSync(JSON.stringify(serializeDuplicateUnits(units)), {
369
+ const serialized = serializeDuplicateUnits(units);
370
+ const payload = brotliCompressSync(JSON.stringify(root ? transformDuplicateUnits(root, serialized, true) : serialized), {
307
371
  params: { [zlibConstants.BROTLI_PARAM_QUALITY]: 4 },
308
372
  });
309
- entry?.statements?.write.run(file, variant, sig, DUPLICATE_UNIT_CACHE_VERSION, payload, Date.now());
373
+ entry?.statements?.write.run(root ? cacheRelativePath(root, file) : file, variant, sig, DUPLICATE_UNIT_CACHE_VERSION, payload, Date.now());
310
374
  }
311
375
  catch {
312
376
  // best-effort cache
@@ -329,6 +393,93 @@ export function serializeDuplicateUnits(units) {
329
393
  signatures: [...unit.signatures],
330
394
  }));
331
395
  }
396
+ function transformDuplicateHandle(root, value) {
397
+ const parts = value.split(":");
398
+ let filePartIndex = -1;
399
+ if (parts[0] === "file" || parts[0] === "chunk" || parts[0] === "symbol") {
400
+ filePartIndex = 1;
401
+ }
402
+ else if (parts[0] === "sql") {
403
+ filePartIndex = 2;
404
+ }
405
+ if (filePartIndex < 0 || parts.length <= filePartIndex)
406
+ return value;
407
+ const encodedFile = parts[filePartIndex];
408
+ if (encodedFile === undefined)
409
+ return value;
410
+ try {
411
+ parts[filePartIndex] = encodeURIComponent(cacheRelativePath(root, decodeURIComponent(encodedFile)));
412
+ return parts.join(":");
413
+ }
414
+ catch {
415
+ return value;
416
+ }
417
+ }
418
+ function duplicateHandleFilePartIndex(value) {
419
+ const parts = value.split(":");
420
+ if (parts[0] === "file" && parts.length === 2)
421
+ return 1;
422
+ if (parts[0] === "chunk" && parts.length === 3)
423
+ return 1;
424
+ if (parts[0] === "symbol" && parts.length === 5)
425
+ return 1;
426
+ if (parts[0] === "sql" && parts.length === 4)
427
+ return 2;
428
+ return null;
429
+ }
430
+ function hasPersistedDuplicateHandlePathWithinRoot(root, value) {
431
+ const filePartIndex = duplicateHandleFilePartIndex(value);
432
+ const handlePrefix = value.split(":")[0];
433
+ if (filePartIndex === null) {
434
+ return handlePrefix !== "file" && handlePrefix !== "chunk" && handlePrefix !== "symbol" && handlePrefix !== "sql";
435
+ }
436
+ const encodedFile = value.split(":")[filePartIndex];
437
+ if (!encodedFile)
438
+ return false;
439
+ try {
440
+ assertFilePathWithinRoot(root, cacheAbsolutePath(root, decodeURIComponent(encodedFile)), "Persisted duplicate handle path");
441
+ return true;
442
+ }
443
+ catch {
444
+ return false;
445
+ }
446
+ }
447
+ function validatePersistedDuplicateUnits(root, value) {
448
+ return value.every((unit) => {
449
+ if (!isDuplicateSerializedUnit(unit))
450
+ return false;
451
+ try {
452
+ assertFilePathWithinRoot(root, cacheAbsolutePath(root, unit.file), "Persisted duplicate unit file");
453
+ assertFilePathWithinRoot(root, cacheAbsolutePath(root, unit.absoluteFile), "Persisted duplicate unit path");
454
+ }
455
+ catch {
456
+ return false;
457
+ }
458
+ const handles = [unit.handle, unit.fileHandle, unit.chunkHandle, unit.symbolHandle, unit.sqlHandle];
459
+ return handles.every((handle) => handle === undefined || hasPersistedDuplicateHandlePathWithinRoot(root, handle));
460
+ });
461
+ }
462
+ function duplicateUnitId(unit, absoluteFile) {
463
+ return `${normalizePath(absoluteFile)}:${unit.startLine}:${unit.endLine}:${unit.kind}:${unit.name ?? ""}`;
464
+ }
465
+ function transformDuplicateUnits(root, units, toRelative) {
466
+ return units.map((unit) => {
467
+ const absoluteFile = toRelative
468
+ ? cacheRelativePath(root, unit.absoluteFile)
469
+ : assertFilePathWithinRoot(root, cacheAbsolutePath(root, unit.absoluteFile), "Persisted duplicate unit path");
470
+ return {
471
+ ...unit,
472
+ file: cacheRelativePath(root, unit.file),
473
+ absoluteFile,
474
+ id: duplicateUnitId(unit, absoluteFile),
475
+ handle: transformDuplicateHandle(root, unit.handle),
476
+ fileHandle: transformDuplicateHandle(root, unit.fileHandle),
477
+ ...(unit.sqlHandle ? { sqlHandle: transformDuplicateHandle(root, unit.sqlHandle) } : {}),
478
+ chunkHandle: transformDuplicateHandle(root, unit.chunkHandle),
479
+ ...(unit.symbolHandle ? { symbolHandle: transformDuplicateHandle(root, unit.symbolHandle) } : {}),
480
+ };
481
+ });
482
+ }
332
483
  export function isDuplicateSerializedUnit(value) {
333
484
  if (!value || typeof value !== "object")
334
485
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"unitCache.js","sourceRoot":"","sources":["../../src/duplicates/unitCache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"unitCache.js","sourceRoot":"","sources":["../../src/duplicates/unitCache.ts"],"names":[],"mappings":"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"}
@@ -1,27 +1,14 @@
1
1
  import { type Chunk } from "../chunking/chunkFile.js";
2
2
  import type { ParsedFileContext } from "../indexer/parse-context.js";
3
- import { SymbolKind, type ProjectIndex, type SymbolDef } from "../indexer/types.js";
3
+ import { type ProjectIndex, type SymbolDef } from "../indexer/types.js";
4
4
  import type { SyntaxNodeLike } from "../languages/types.js";
5
- import type { CollectedDuplicateUnits, DuplicateAstContext, DuplicateAstContextCache, DuplicateInternalUnit, DuplicateUnitCollectionOptions, DuplicateUnitDraft, DuplicateUnitRef, LanguageForFileResult } from "./types.js";
5
+ import type { CollectedDuplicateUnits, DuplicateAstContext, DuplicateAstContextCache, DuplicateInternalUnit, DuplicateUnitCollectionOptions, DuplicateUnitDraft, DuplicateUnitRef } from "./types.js";
6
6
  export declare const DEFAULT_MAX_FINGERPRINTS = 128;
7
7
  export declare function lineSpan(unit: Pick<DuplicateUnitRef, "startLine" | "endLine">): number;
8
- export declare const textLanguageByExtension: Record<string, string>;
9
- export declare const chunkLanguageAliases: Record<string, string>;
10
- export declare const symbolUnitKinds: Set<SymbolKind>;
11
- export declare function hashText(value: string): string;
12
8
  export declare function shortHashText(value: string): string;
13
- /** Builds hashed token windows used as local structural fingerprints. */
14
- export declare function makeShingles(tokens: readonly string[], size: number): string[];
15
- /** Keeps stable representative fingerprints from nearby shingle windows. */
16
- export declare function winnowShingles(shingles: readonly string[], windowSize: number, maxFingerprints: number): Set<string>;
17
- export declare function languageForFile(filePath: string): LanguageForFileResult | undefined;
18
- export declare function formatDuplicateFileHandle(file: string): string;
19
- export declare function formatDuplicateChunkHandle(file: string, line: number): string;
20
9
  export declare function formatDuplicateSqlHandle(file: string, name: string, line: number): string;
21
- export declare function sqlHandleForDuplicateSymbol(symbol: SymbolDef, file: string): string | undefined;
22
10
  export declare function formatDuplicateSymbolHandle(file: string, name: string, line: number, column: number): string;
23
11
  export declare function normalizeDetectionFile(filePath: string, projectRoot: string | undefined): string;
24
- export declare function internalUnitId(unit: DuplicateUnitDraft, absoluteFile: string): string;
25
12
  export declare function normalizedDuplicateTokens(text: string, nativeMode: ProjectIndex["nativeMode"] | undefined): string[];
26
13
  export declare function duplicateTextLines(text: string): string[];
27
14
  export declare function maskedDuplicateStatements(text: string): string[];
@@ -38,6 +25,10 @@ export declare function buildInternalUnit(unit: DuplicateUnitDraft, absoluteFile
38
25
  }, astShapeHash?: string): DuplicateInternalUnit;
39
26
  export declare function makeSymbolUnit(symbol: SymbolDef, chunk: Chunk, projectRoot: string | undefined, nativeMode: ProjectIndex["nativeMode"] | undefined, shingleSize: number, windowSize: number, astContext: DuplicateAstContext | undefined): DuplicateInternalUnit | undefined;
40
27
  export declare function makeDuplicateChunks(filePath: string, languageId: string, textOnly: boolean, source: string, minTokens: number, maxTokens: number): Chunk[];
28
+ export declare function makeDuplicateChunksWithSymbols(filePath: string, languageId: string, textOnly: boolean, source: string, minTokens: number, maxTokens: number): {
29
+ chunks: Chunk[];
30
+ symbolChunks: Chunk[];
31
+ };
41
32
  export declare function makeSymbolSourceChunks(filePath: string, languageId: string, textOnly: boolean, source: string, maxTokens: number): Chunk[];
42
33
  export declare function findChunkForSymbol(symbol: SymbolDef, chunks: readonly Chunk[]): Chunk | undefined;
43
34
  export declare function getDuplicateAstContext(index: ProjectIndex, file: string, source: string, cache: DuplicateAstContextCache): Promise<DuplicateAstContext | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"units.d.ts","sourceRoot":"","sources":["../../src/duplicates/units.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"units.d.ts","sourceRoot":"","sources":["../../src/duplicates/units.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import crypto from "node:crypto";
2
2
  import fsp from "node:fs/promises";
3
3
  import path from "node:path";
4
4
  import { LANG_CONFIGS } from "../bootstrap/treeSitterLanguages.js";
5
- import { chunkFile } from "../chunking/chunkFile.js";
5
+ import { chunkFile, chunkFileWithSymbols } from "../chunking/chunkFile.js";
6
6
  import { chunkTextFile } from "../chunking/chunkTextFile.js";
7
7
  import { countDuplicateTokens, hasUnterminatedQuotedLiteral, normalizeDuplicateSourceTokens, } from "../duplicate-token-normalization.js";
8
8
  import { supportForFile } from "../languages.js";
@@ -14,12 +14,12 @@ import { maskJsLikeCommentsStringsAndRegex } from "../util/comments.js";
14
14
  import { collectLineStartOffsets } from "../util/lines.js";
15
15
  import { assertFilePathWithinRoot, fileIdentityKey, normalizePath, toProjectDisplayPath } from "../util/paths.js";
16
16
  import { logWithLevel } from "../logging.js";
17
- import { duplicateUnitCacheVariant, tryLoadDuplicateUnitsFromCache, writeDuplicateUnitsToCache } from "./unitCache.js";
17
+ import { duplicateUnitCacheVariant, tryLoadDuplicateUnitsFromCache, writeDuplicateUnitsBatchToCache, writeDuplicateUnitsToCache, } from "./unitCache.js";
18
18
  export const DEFAULT_MAX_FINGERPRINTS = 128;
19
19
  export function lineSpan(unit) {
20
20
  return Math.max(1, unit.endLine - unit.startLine + 1);
21
21
  }
22
- export const textLanguageByExtension = {
22
+ const textLanguageByExtension = {
23
23
  ".json": "json",
24
24
  ".jsonc": "jsonc",
25
25
  ".lock": "text",
@@ -28,11 +28,11 @@ export const textLanguageByExtension = {
28
28
  ".yaml": "yaml",
29
29
  ".yml": "yaml",
30
30
  };
31
- export const chunkLanguageAliases = {
31
+ const chunkLanguageAliases = {
32
32
  js: "javascript",
33
33
  ts: "typescript",
34
34
  };
35
- export const symbolUnitKinds = new Set([
35
+ const symbolUnitKinds = new Set([
36
36
  SymbolKind.Function,
37
37
  SymbolKind.Class,
38
38
  SymbolKind.Interface,
@@ -41,14 +41,14 @@ export const symbolUnitKinds = new Set([
41
41
  SymbolKind.Table,
42
42
  SymbolKind.View,
43
43
  ]);
44
- export function hashText(value) {
44
+ function hashText(value) {
45
45
  return crypto.createHash("sha256").update(value).digest("hex");
46
46
  }
47
47
  export function shortHashText(value) {
48
48
  return hashText(value).slice(0, 16);
49
49
  }
50
50
  /** Builds hashed token windows used as local structural fingerprints. */
51
- export function makeShingles(tokens, size) {
51
+ function makeShingles(tokens, size) {
52
52
  if (tokens.length < size)
53
53
  return [];
54
54
  const shingles = [];
@@ -58,7 +58,7 @@ export function makeShingles(tokens, size) {
58
58
  return shingles;
59
59
  }
60
60
  /** Keeps stable representative fingerprints from nearby shingle windows. */
61
- export function winnowShingles(shingles, windowSize, maxFingerprints) {
61
+ function winnowShingles(shingles, windowSize, maxFingerprints) {
62
62
  if (!shingles.length)
63
63
  return new Set();
64
64
  if (shingles.length <= windowSize)
@@ -77,7 +77,7 @@ export function winnowShingles(shingles, windowSize, maxFingerprints) {
77
77
  }
78
78
  return fingerprints;
79
79
  }
80
- export function languageForFile(filePath) {
80
+ function languageForFile(filePath) {
81
81
  const support = supportForFile(filePath);
82
82
  if (support) {
83
83
  return { id: support.id, textOnly: false };
@@ -88,16 +88,16 @@ export function languageForFile(filePath) {
88
88
  }
89
89
  return undefined;
90
90
  }
91
- export function formatDuplicateFileHandle(file) {
91
+ function formatDuplicateFileHandle(file) {
92
92
  return ["file", encodeURIComponent(file)].join(":");
93
93
  }
94
- export function formatDuplicateChunkHandle(file, line) {
94
+ function formatDuplicateChunkHandle(file, line) {
95
95
  return ["chunk", encodeURIComponent(file), String(line)].join(":");
96
96
  }
97
97
  export function formatDuplicateSqlHandle(file, name, line) {
98
98
  return ["sql", encodeURIComponent(name), encodeURIComponent(file), String(line)].join(":");
99
99
  }
100
- export function sqlHandleForDuplicateSymbol(symbol, file) {
100
+ function sqlHandleForDuplicateSymbol(symbol, file) {
101
101
  if (symbol.kind !== SymbolKind.Routine && symbol.kind !== SymbolKind.Table && symbol.kind !== SymbolKind.View) {
102
102
  return undefined;
103
103
  }
@@ -113,7 +113,7 @@ export function normalizeDetectionFile(filePath, projectRoot) {
113
113
  return normalizePath(filePath);
114
114
  return assertFilePathWithinRoot(projectRoot, filePath, "Duplicate input file");
115
115
  }
116
- export function internalUnitId(unit, absoluteFile) {
116
+ function internalUnitId(unit, absoluteFile) {
117
117
  return `${normalizePath(absoluteFile)}:${unit.startLine}:${unit.endLine}:${unit.kind}:${unit.name ?? ""}`;
118
118
  }
119
119
  export function normalizedDuplicateTokens(text, nativeMode) {
@@ -222,6 +222,21 @@ export function makeDuplicateChunks(filePath, languageId, textOnly, source, minT
222
222
  }
223
223
  return chunkTextFile({ source, filePath, languageId, minTokens, maxTokens, tokenizer: countDuplicateTokens });
224
224
  }
225
+ export function makeDuplicateChunksWithSymbols(filePath, languageId, textOnly, source, minTokens, maxTokens) {
226
+ const langConfig = LANG_CONFIGS[chunkLanguageAliases[languageId] ?? languageId];
227
+ if (langConfig && !textOnly) {
228
+ return chunkFileWithSymbols({
229
+ language: langConfig,
230
+ source,
231
+ filePath,
232
+ minTokens,
233
+ maxTokens,
234
+ tokenizer: countDuplicateTokens,
235
+ });
236
+ }
237
+ const chunks = chunkTextFile({ source, filePath, languageId, minTokens, maxTokens, tokenizer: countDuplicateTokens });
238
+ return { chunks, symbolChunks: [] };
239
+ }
225
240
  export function makeSymbolSourceChunks(filePath, languageId, textOnly, source, maxTokens) {
226
241
  if (textOnly)
227
242
  return [];
@@ -386,15 +401,16 @@ export async function collectDuplicateUnits(index, options) {
386
401
  const normalizedFiles = [...filesByIdentity.values()].sort();
387
402
  const units = [];
388
403
  const astContextCache = new Map();
389
- const variant = duplicateUnitCacheVariant(index, options.minTokens, options.maxTokens, options.shingleSize, options.windowSize);
404
+ const variant = duplicateUnitCacheVariant(index, options.minTokens, options.maxTokens, options.shingleSize, options.windowSize, options.projectRoot);
390
405
  let belowThresholdUnits = 0;
391
406
  const belowThresholdUnitsByFile = new Map();
407
+ const pendingWrites = [];
392
408
  for (const file of normalizedFiles) {
393
- const cachedUnits = tryLoadDuplicateUnitsFromCache(index, file, variant);
409
+ const cachedUnits = tryLoadDuplicateUnitsFromCache(index, file, variant, options.projectRoot);
394
410
  const fileUnits = cachedUnits ??
395
411
  (await buildDuplicateUnitsForFile(index, file, options.projectRoot, options.minTokens, options.maxTokens, options.shingleSize, options.windowSize, astContextCache));
396
412
  if (!cachedUnits) {
397
- writeDuplicateUnitsToCache(index, file, variant, fileUnits);
413
+ pendingWrites.push({ file, variant, units: fileUnits });
398
414
  }
399
415
  for (const unit of fileUnits) {
400
416
  if (!shouldKeepUnit(unit, options.includeSmall, options.minTokens)) {
@@ -405,6 +421,9 @@ export async function collectDuplicateUnits(index, options) {
405
421
  units.push(unit);
406
422
  }
407
423
  }
424
+ if (pendingWrites.length) {
425
+ writeDuplicateUnitsBatchToCache(index, pendingWrites, options.projectRoot);
426
+ }
408
427
  units.sort((left, right) => {
409
428
  const fileCompare = left.absoluteFile.localeCompare(right.absoluteFile);
410
429
  if (fileCompare)
@@ -431,8 +450,7 @@ export async function buildDuplicateUnitsForFile(index, file, projectRoot, minTo
431
450
  }
432
451
  }
433
452
  const astContext = language.textOnly ? undefined : await getDuplicateAstContext(index, file, source, astContextCache);
434
- const chunks = makeDuplicateChunks(file, language.id, language.textOnly, source, minTokens, maxTokens);
435
- const symbolChunks = makeSymbolSourceChunks(file, language.id, language.textOnly, source, maxTokens);
453
+ const { chunks, symbolChunks } = makeDuplicateChunksWithSymbols(file, language.id, language.textOnly, source, minTokens, maxTokens);
436
454
  const symbolUnits = (moduleIndex?.locals ?? [])
437
455
  .map((symbol) => {
438
456
  const chunk = findChunkForSymbol(symbol, symbolChunks);