agent-ide 0.8.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (418) hide show
  1. package/dist/application/index.d.ts +1 -12
  2. package/dist/application/index.d.ts.map +1 -1
  3. package/dist/application/index.js +0 -16
  4. package/dist/application/index.js.map +1 -1
  5. package/dist/application/services/cache-coordinator.service.d.ts.map +1 -1
  6. package/dist/application/services/cache-coordinator.service.js.map +1 -1
  7. package/dist/application/services/module-coordinator.service.d.ts +3 -8
  8. package/dist/application/services/module-coordinator.service.d.ts.map +1 -1
  9. package/dist/application/services/module-coordinator.service.js +5 -139
  10. package/dist/application/services/module-coordinator.service.js.map +1 -1
  11. package/dist/application/types.d.ts +0 -63
  12. package/dist/application/types.d.ts.map +1 -1
  13. package/dist/application/types.js +1 -9
  14. package/dist/application/types.js.map +1 -1
  15. package/dist/core/call-hierarchy/call-hierarchy-analyzer.d.ts.map +1 -1
  16. package/dist/core/call-hierarchy/call-hierarchy-analyzer.js +3 -5
  17. package/dist/core/call-hierarchy/call-hierarchy-analyzer.js.map +1 -1
  18. package/dist/core/change-signature/call-site-updater.d.ts +108 -0
  19. package/dist/core/change-signature/call-site-updater.d.ts.map +1 -0
  20. package/dist/core/change-signature/call-site-updater.js +347 -0
  21. package/dist/core/change-signature/call-site-updater.js.map +1 -0
  22. package/dist/core/change-signature/change-signature-service.d.ts +11 -53
  23. package/dist/core/change-signature/change-signature-service.d.ts.map +1 -1
  24. package/dist/core/change-signature/change-signature-service.js +91 -475
  25. package/dist/core/change-signature/change-signature-service.js.map +1 -1
  26. package/dist/core/change-signature/index.d.ts +4 -0
  27. package/dist/core/change-signature/index.d.ts.map +1 -1
  28. package/dist/core/change-signature/index.js +5 -0
  29. package/dist/core/change-signature/index.js.map +1 -1
  30. package/dist/core/change-signature/signature-parser.d.ts +46 -4
  31. package/dist/core/change-signature/signature-parser.d.ts.map +1 -1
  32. package/dist/core/change-signature/signature-parser.js +180 -9
  33. package/dist/core/change-signature/signature-parser.js.map +1 -1
  34. package/dist/core/change-signature/signature-transformer.d.ts +20 -0
  35. package/dist/core/change-signature/signature-transformer.d.ts.map +1 -0
  36. package/dist/core/change-signature/signature-transformer.js +91 -0
  37. package/dist/core/change-signature/signature-transformer.js.map +1 -0
  38. package/dist/core/change-signature/signature-validator.d.ts +30 -0
  39. package/dist/core/change-signature/signature-validator.d.ts.map +1 -0
  40. package/dist/core/change-signature/signature-validator.js +152 -0
  41. package/dist/core/change-signature/signature-validator.js.map +1 -0
  42. package/dist/core/change-signature/utils.d.ts +19 -0
  43. package/dist/core/change-signature/utils.d.ts.map +1 -0
  44. package/dist/core/change-signature/utils.js +23 -0
  45. package/dist/core/change-signature/utils.js.map +1 -0
  46. package/dist/core/cycles/cycle-detector.d.ts.map +1 -1
  47. package/dist/core/cycles/cycle-detector.js +16 -8
  48. package/dist/core/cycles/cycle-detector.js.map +1 -1
  49. package/dist/core/cycles/index.d.ts +1 -1
  50. package/dist/core/cycles/index.d.ts.map +1 -1
  51. package/dist/core/cycles/index.js +1 -1
  52. package/dist/core/cycles/index.js.map +1 -1
  53. package/dist/core/cycles/types.d.ts +20 -4
  54. package/dist/core/cycles/types.d.ts.map +1 -1
  55. package/dist/core/cycles/types.js +22 -4
  56. package/dist/core/cycles/types.js.map +1 -1
  57. package/dist/core/deadcode/dead-code-detector.d.ts +22 -1
  58. package/dist/core/deadcode/dead-code-detector.d.ts.map +1 -1
  59. package/dist/core/deadcode/dead-code-detector.js +134 -61
  60. package/dist/core/deadcode/dead-code-detector.js.map +1 -1
  61. package/dist/core/deadcode/dead-code-remover.d.ts +11 -93
  62. package/dist/core/deadcode/dead-code-remover.d.ts.map +1 -1
  63. package/dist/core/deadcode/dead-code-remover.js +71 -690
  64. package/dist/core/deadcode/dead-code-remover.js.map +1 -1
  65. package/dist/core/deadcode/file-operations.d.ts +85 -0
  66. package/dist/core/deadcode/file-operations.d.ts.map +1 -0
  67. package/dist/core/deadcode/file-operations.js +263 -0
  68. package/dist/core/deadcode/file-operations.js.map +1 -0
  69. package/dist/core/deadcode/import-cleaner.d.ts +63 -0
  70. package/dist/core/deadcode/import-cleaner.d.ts.map +1 -0
  71. package/dist/core/deadcode/import-cleaner.js +229 -0
  72. package/dist/core/deadcode/import-cleaner.js.map +1 -0
  73. package/dist/core/deadcode/import-parser.d.ts +79 -0
  74. package/dist/core/deadcode/import-parser.d.ts.map +1 -0
  75. package/dist/core/deadcode/import-parser.js +229 -0
  76. package/dist/core/deadcode/import-parser.js.map +1 -0
  77. package/dist/core/deadcode/range-expander.d.ts +38 -0
  78. package/dist/core/deadcode/range-expander.d.ts.map +1 -0
  79. package/dist/core/deadcode/range-expander.js +175 -0
  80. package/dist/core/deadcode/range-expander.js.map +1 -0
  81. package/dist/core/deadcode/types.d.ts +2 -0
  82. package/dist/core/deadcode/types.d.ts.map +1 -1
  83. package/dist/core/deadcode/types.js.map +1 -1
  84. package/dist/core/find-references/index.d.ts +2 -2
  85. package/dist/core/find-references/index.d.ts.map +1 -1
  86. package/dist/core/find-references/index.js +1 -1
  87. package/dist/core/find-references/index.js.map +1 -1
  88. package/dist/core/impact/dependency-extractor.d.ts +25 -0
  89. package/dist/core/impact/dependency-extractor.d.ts.map +1 -0
  90. package/dist/core/impact/dependency-extractor.js +65 -0
  91. package/dist/core/impact/dependency-extractor.js.map +1 -0
  92. package/dist/core/impact/file-scanner.d.ts +52 -0
  93. package/dist/core/impact/file-scanner.d.ts.map +1 -0
  94. package/dist/core/impact/file-scanner.js +131 -0
  95. package/dist/core/impact/file-scanner.js.map +1 -0
  96. package/dist/core/impact/impact-analyzer.d.ts +3 -64
  97. package/dist/core/impact/impact-analyzer.d.ts.map +1 -1
  98. package/dist/core/impact/impact-analyzer.js +13 -312
  99. package/dist/core/impact/impact-analyzer.js.map +1 -1
  100. package/dist/core/impact/index.d.ts +3 -0
  101. package/dist/core/impact/index.d.ts.map +1 -1
  102. package/dist/core/impact/index.js +3 -0
  103. package/dist/core/impact/index.js.map +1 -1
  104. package/dist/core/impact/path-resolver.d.ts +35 -0
  105. package/dist/core/impact/path-resolver.d.ts.map +1 -0
  106. package/dist/core/impact/path-resolver.js +166 -0
  107. package/dist/core/impact/path-resolver.js.map +1 -0
  108. package/dist/core/move/file-scanner.d.ts +48 -0
  109. package/dist/core/move/file-scanner.d.ts.map +1 -0
  110. package/dist/core/move/file-scanner.js +137 -0
  111. package/dist/core/move/file-scanner.js.map +1 -0
  112. package/dist/core/move/import-resolver.d.ts +10 -0
  113. package/dist/core/move/import-resolver.d.ts.map +1 -1
  114. package/dist/core/move/import-resolver.js +31 -6
  115. package/dist/core/move/import-resolver.js.map +1 -1
  116. package/dist/core/move/index.d.ts +7 -3
  117. package/dist/core/move/index.d.ts.map +1 -1
  118. package/dist/core/move/index.js +7 -2
  119. package/dist/core/move/index.js.map +1 -1
  120. package/dist/core/move/move-service.d.ts +41 -52
  121. package/dist/core/move/move-service.d.ts.map +1 -1
  122. package/dist/core/move/move-service.js +189 -358
  123. package/dist/core/move/move-service.js.map +1 -1
  124. package/dist/core/move/path-calculator.d.ts +49 -0
  125. package/dist/core/move/path-calculator.d.ts.map +1 -0
  126. package/dist/core/move/path-calculator.js +158 -0
  127. package/dist/core/move/path-calculator.js.map +1 -0
  128. package/dist/core/move/path-parser.d.ts +33 -0
  129. package/dist/core/move/path-parser.d.ts.map +1 -0
  130. package/dist/core/move/path-parser.js +53 -0
  131. package/dist/core/move/path-parser.js.map +1 -0
  132. package/dist/core/move/path-utils.d.ts +70 -0
  133. package/dist/core/move/path-utils.d.ts.map +1 -0
  134. package/dist/core/move/path-utils.js +201 -0
  135. package/dist/core/move/path-utils.js.map +1 -0
  136. package/dist/core/move/types.d.ts +81 -18
  137. package/dist/core/move/types.d.ts.map +1 -1
  138. package/dist/core/move/types.js +73 -5
  139. package/dist/core/move/types.js.map +1 -1
  140. package/dist/core/move-member/change-applier.d.ts +23 -0
  141. package/dist/core/move-member/change-applier.d.ts.map +1 -0
  142. package/dist/core/move-member/change-applier.js +51 -0
  143. package/dist/core/move-member/change-applier.js.map +1 -0
  144. package/dist/core/move-member/file-change-preparer.d.ts +49 -0
  145. package/dist/core/move-member/file-change-preparer.d.ts.map +1 -0
  146. package/dist/core/move-member/file-change-preparer.js +340 -0
  147. package/dist/core/move-member/file-change-preparer.js.map +1 -0
  148. package/dist/core/move-member/index.d.ts +4 -1
  149. package/dist/core/move-member/index.d.ts.map +1 -1
  150. package/dist/core/move-member/index.js +3 -0
  151. package/dist/core/move-member/index.js.map +1 -1
  152. package/dist/core/move-member/member-extractor.d.ts +11 -0
  153. package/dist/core/move-member/member-extractor.d.ts.map +1 -1
  154. package/dist/core/move-member/member-extractor.js +116 -24
  155. package/dist/core/move-member/member-extractor.js.map +1 -1
  156. package/dist/core/move-member/move-member-service.d.ts +9 -78
  157. package/dist/core/move-member/move-member-service.d.ts.map +1 -1
  158. package/dist/core/move-member/move-member-service.js +86 -413
  159. package/dist/core/move-member/move-member-service.js.map +1 -1
  160. package/dist/core/move-member/reference-updater.d.ts +73 -0
  161. package/dist/core/move-member/reference-updater.d.ts.map +1 -0
  162. package/dist/core/move-member/reference-updater.js +286 -0
  163. package/dist/core/move-member/reference-updater.js.map +1 -0
  164. package/dist/core/move-member/types.d.ts +17 -2
  165. package/dist/core/move-member/types.d.ts.map +1 -1
  166. package/dist/core/move-member/types.js.map +1 -1
  167. package/dist/core/rename/reference-updater.d.ts +1 -35
  168. package/dist/core/rename/reference-updater.d.ts.map +1 -1
  169. package/dist/core/rename/reference-updater.js +8 -251
  170. package/dist/core/rename/reference-updater.js.map +1 -1
  171. package/dist/core/rename/rename-engine.d.ts +16 -22
  172. package/dist/core/rename/rename-engine.d.ts.map +1 -1
  173. package/dist/core/rename/rename-engine.js +59 -208
  174. package/dist/core/rename/rename-engine.js.map +1 -1
  175. package/dist/core/rename/scope-analyzer.d.ts.map +1 -1
  176. package/dist/core/shared/index.d.ts +1 -1
  177. package/dist/core/shared/index.d.ts.map +1 -1
  178. package/dist/core/shared/index.js +1 -1
  179. package/dist/core/shared/index.js.map +1 -1
  180. package/dist/core/shared/indexing/index-engine.d.ts +1 -1
  181. package/dist/core/shared/indexing/index-engine.d.ts.map +1 -1
  182. package/dist/core/shared/indexing/index-engine.js +1 -1
  183. package/dist/core/shared/indexing/index-engine.js.map +1 -1
  184. package/dist/core/shared/symbol-finder/call-site-parser.d.ts +71 -0
  185. package/dist/core/shared/symbol-finder/call-site-parser.d.ts.map +1 -0
  186. package/dist/core/shared/symbol-finder/call-site-parser.js +369 -0
  187. package/dist/core/shared/symbol-finder/call-site-parser.js.map +1 -0
  188. package/dist/core/shared/symbol-finder/index.d.ts +9 -0
  189. package/dist/core/shared/symbol-finder/index.d.ts.map +1 -0
  190. package/dist/core/shared/symbol-finder/index.js +12 -0
  191. package/dist/core/shared/symbol-finder/index.js.map +1 -0
  192. package/dist/core/shared/{symbol-finder.d.ts → symbol-finder/symbol-finder.d.ts} +27 -133
  193. package/dist/core/shared/symbol-finder/symbol-finder.d.ts.map +1 -0
  194. package/dist/core/shared/symbol-finder/symbol-finder.js +552 -0
  195. package/dist/core/shared/symbol-finder/symbol-finder.js.map +1 -0
  196. package/dist/core/shared/symbol-finder/text-matcher.d.ts +45 -0
  197. package/dist/core/shared/symbol-finder/text-matcher.d.ts.map +1 -0
  198. package/dist/core/shared/symbol-finder/text-matcher.js +195 -0
  199. package/dist/core/shared/symbol-finder/text-matcher.js.map +1 -0
  200. package/dist/core/shared/symbol-finder/types.d.ts +108 -0
  201. package/dist/core/shared/symbol-finder/types.d.ts.map +1 -0
  202. package/dist/core/shared/symbol-finder/types.js +71 -0
  203. package/dist/core/shared/symbol-finder/types.js.map +1 -0
  204. package/dist/core/snapshot/snapshot-generator.d.ts +16 -4
  205. package/dist/core/snapshot/snapshot-generator.d.ts.map +1 -1
  206. package/dist/core/snapshot/snapshot-generator.js +91 -18
  207. package/dist/core/snapshot/snapshot-generator.js.map +1 -1
  208. package/dist/infrastructure/cache/cache-manager.d.ts.map +1 -1
  209. package/dist/infrastructure/cache/cache-manager.js +4 -0
  210. package/dist/infrastructure/cache/cache-manager.js.map +1 -1
  211. package/dist/infrastructure/cache/index.d.ts +15 -9
  212. package/dist/infrastructure/cache/index.d.ts.map +1 -1
  213. package/dist/infrastructure/cache/index.js +5 -5
  214. package/dist/infrastructure/cache/index.js.map +1 -1
  215. package/dist/infrastructure/cache/memory-cache.d.ts.map +1 -1
  216. package/dist/infrastructure/cache/memory-cache.js.map +1 -1
  217. package/dist/infrastructure/cache/strategies.d.ts.map +1 -1
  218. package/dist/infrastructure/cache/strategies.js +2 -1
  219. package/dist/infrastructure/cache/strategies.js.map +1 -1
  220. package/dist/infrastructure/cache/types.d.ts +4 -4
  221. package/dist/infrastructure/cache/types.d.ts.map +1 -1
  222. package/dist/infrastructure/changeset/change-applicator.d.ts +95 -0
  223. package/dist/infrastructure/changeset/change-applicator.d.ts.map +1 -0
  224. package/dist/infrastructure/changeset/change-applicator.js +467 -0
  225. package/dist/infrastructure/changeset/change-applicator.js.map +1 -0
  226. package/dist/infrastructure/changeset/changeset-builder.d.ts +107 -0
  227. package/dist/infrastructure/changeset/changeset-builder.d.ts.map +1 -0
  228. package/dist/infrastructure/changeset/changeset-builder.js +188 -0
  229. package/dist/infrastructure/changeset/changeset-builder.js.map +1 -0
  230. package/dist/infrastructure/changeset/changeset-converter.d.ts +15 -0
  231. package/dist/infrastructure/changeset/changeset-converter.d.ts.map +1 -0
  232. package/dist/infrastructure/changeset/changeset-converter.js +370 -0
  233. package/dist/infrastructure/changeset/changeset-converter.js.map +1 -0
  234. package/dist/infrastructure/changeset/index.d.ts +10 -0
  235. package/dist/infrastructure/changeset/index.d.ts.map +1 -0
  236. package/dist/infrastructure/changeset/index.js +13 -0
  237. package/dist/infrastructure/changeset/index.js.map +1 -0
  238. package/dist/infrastructure/changeset/types.d.ts +147 -0
  239. package/dist/infrastructure/changeset/types.d.ts.map +1 -0
  240. package/dist/infrastructure/changeset/types.js +46 -0
  241. package/dist/infrastructure/changeset/types.js.map +1 -0
  242. package/dist/infrastructure/parser/base.d.ts.map +1 -1
  243. package/dist/infrastructure/parser/base.js +4 -3
  244. package/dist/infrastructure/parser/base.js.map +1 -1
  245. package/dist/infrastructure/parser/interface.d.ts +4 -2
  246. package/dist/infrastructure/parser/interface.d.ts.map +1 -1
  247. package/dist/infrastructure/parser/interface.js.map +1 -1
  248. package/dist/infrastructure/storage/file-system.d.ts.map +1 -1
  249. package/dist/infrastructure/storage/file-system.js +61 -54
  250. package/dist/infrastructure/storage/file-system.js.map +1 -1
  251. package/dist/interfaces/cli/cli.d.ts.map +1 -1
  252. package/dist/interfaces/cli/cli.js +1 -2
  253. package/dist/interfaces/cli/cli.js.map +1 -1
  254. package/dist/interfaces/cli/commands/change-signature.command.d.ts.map +1 -1
  255. package/dist/interfaces/cli/commands/change-signature.command.js +31 -107
  256. package/dist/interfaces/cli/commands/change-signature.command.js.map +1 -1
  257. package/dist/interfaces/cli/commands/deadcode.command.js +51 -46
  258. package/dist/interfaces/cli/commands/deadcode.command.js.map +1 -1
  259. package/dist/interfaces/cli/commands/find-references.command.d.ts.map +1 -1
  260. package/dist/interfaces/cli/commands/find-references.command.js +18 -3
  261. package/dist/interfaces/cli/commands/find-references.command.js.map +1 -1
  262. package/dist/interfaces/cli/commands/index.d.ts +0 -1
  263. package/dist/interfaces/cli/commands/index.d.ts.map +1 -1
  264. package/dist/interfaces/cli/commands/index.js +0 -1
  265. package/dist/interfaces/cli/commands/index.js.map +1 -1
  266. package/dist/interfaces/cli/commands/move.command.d.ts +1 -0
  267. package/dist/interfaces/cli/commands/move.command.d.ts.map +1 -1
  268. package/dist/interfaces/cli/commands/move.command.js +170 -65
  269. package/dist/interfaces/cli/commands/move.command.js.map +1 -1
  270. package/dist/interfaces/cli/commands/rename.command.d.ts.map +1 -1
  271. package/dist/interfaces/cli/commands/rename.command.js +133 -59
  272. package/dist/interfaces/cli/commands/rename.command.js.map +1 -1
  273. package/dist/interfaces/cli/output-formatter.d.ts +2 -2
  274. package/dist/interfaces/cli/output-formatter.d.ts.map +1 -1
  275. package/dist/interfaces/cli/output-formatter.js.map +1 -1
  276. package/dist/plugins/javascript/declaration-analyzer.d.ts.map +1 -1
  277. package/dist/plugins/javascript/declaration-analyzer.js +9 -0
  278. package/dist/plugins/javascript/declaration-analyzer.js.map +1 -1
  279. package/dist/plugins/javascript/parser.d.ts +11 -10
  280. package/dist/plugins/javascript/parser.d.ts.map +1 -1
  281. package/dist/plugins/javascript/parser.js +57 -53
  282. package/dist/plugins/javascript/parser.js.map +1 -1
  283. package/dist/plugins/javascript/pattern-analyzer.d.ts.map +1 -1
  284. package/dist/plugins/javascript/pattern-analyzer.js +4 -3
  285. package/dist/plugins/javascript/pattern-analyzer.js.map +1 -1
  286. package/dist/plugins/javascript/reference-finder.d.ts +21 -0
  287. package/dist/plugins/javascript/reference-finder.d.ts.map +1 -1
  288. package/dist/plugins/javascript/reference-finder.js +119 -76
  289. package/dist/plugins/javascript/reference-finder.js.map +1 -1
  290. package/dist/plugins/javascript/types.d.ts +4 -7
  291. package/dist/plugins/javascript/types.d.ts.map +1 -1
  292. package/dist/plugins/javascript/types.js +9 -9
  293. package/dist/plugins/javascript/types.js.map +1 -1
  294. package/dist/plugins/shared/parser-helpers.js.map +1 -1
  295. package/dist/{shared → plugins/shared}/utils/array.d.ts +6 -1
  296. package/dist/plugins/shared/utils/array.d.ts.map +1 -0
  297. package/dist/plugins/shared/utils/array.js.map +1 -0
  298. package/dist/{shared → plugins/shared}/utils/async.d.ts +1 -1
  299. package/dist/plugins/shared/utils/async.d.ts.map +1 -0
  300. package/dist/{shared → plugins/shared}/utils/async.js +2 -0
  301. package/dist/plugins/shared/utils/async.js.map +1 -0
  302. package/dist/{shared → plugins/shared}/utils/index.d.ts +0 -20
  303. package/dist/plugins/shared/utils/index.d.ts.map +1 -0
  304. package/dist/{shared → plugins/shared}/utils/index.js +0 -20
  305. package/dist/plugins/shared/utils/index.js.map +1 -0
  306. package/dist/plugins/shared/utils/memory-monitor.d.ts.map +1 -0
  307. package/dist/plugins/shared/utils/memory-monitor.js.map +1 -0
  308. package/dist/{shared → plugins/shared}/utils/object.d.ts +6 -6
  309. package/dist/plugins/shared/utils/object.d.ts.map +1 -0
  310. package/dist/{shared → plugins/shared}/utils/object.js +21 -3
  311. package/dist/plugins/shared/utils/object.js.map +1 -0
  312. package/dist/plugins/shared/utils/path.d.ts.map +1 -0
  313. package/dist/plugins/shared/utils/path.js.map +1 -0
  314. package/dist/{shared → plugins/shared}/utils/string.d.ts +1 -1
  315. package/dist/plugins/shared/utils/string.d.ts.map +1 -0
  316. package/dist/{shared → plugins/shared}/utils/string.js +7 -4
  317. package/dist/plugins/shared/utils/string.js.map +1 -0
  318. package/dist/plugins/typescript/declaration-analyzer.d.ts +4 -4
  319. package/dist/plugins/typescript/declaration-analyzer.d.ts.map +1 -1
  320. package/dist/plugins/typescript/declaration-analyzer.js +13 -6
  321. package/dist/plugins/typescript/declaration-analyzer.js.map +1 -1
  322. package/dist/plugins/typescript/language-service.d.ts +1 -1
  323. package/dist/plugins/typescript/language-service.d.ts.map +1 -1
  324. package/dist/plugins/typescript/parser.d.ts +3 -2
  325. package/dist/plugins/typescript/parser.d.ts.map +1 -1
  326. package/dist/plugins/typescript/parser.js +18 -13
  327. package/dist/plugins/typescript/parser.js.map +1 -1
  328. package/dist/plugins/typescript/reference-finder.d.ts +3 -0
  329. package/dist/plugins/typescript/reference-finder.d.ts.map +1 -1
  330. package/dist/plugins/typescript/reference-finder.js +16 -4
  331. package/dist/plugins/typescript/reference-finder.js.map +1 -1
  332. package/dist/plugins/typescript/symbol-extractor.d.ts +4 -0
  333. package/dist/plugins/typescript/symbol-extractor.d.ts.map +1 -1
  334. package/dist/plugins/typescript/symbol-extractor.js +24 -6
  335. package/dist/plugins/typescript/symbol-extractor.js.map +1 -1
  336. package/dist/plugins/typescript/types.d.ts +0 -3
  337. package/dist/plugins/typescript/types.d.ts.map +1 -1
  338. package/dist/plugins/typescript/types.js +6 -9
  339. package/dist/plugins/typescript/types.js.map +1 -1
  340. package/dist/shared/errors/index.d.ts +1 -1
  341. package/dist/shared/errors/index.d.ts.map +1 -1
  342. package/dist/shared/errors/parser-error.js +5 -5
  343. package/dist/shared/errors/parser-error.js.map +1 -1
  344. package/dist/shared/errors/validation-error.d.ts +2 -2
  345. package/dist/shared/errors/validation-error.d.ts.map +1 -1
  346. package/dist/shared/errors/validation-error.js.map +1 -1
  347. package/dist/shared/types/ast.d.ts +4 -4
  348. package/dist/shared/types/ast.d.ts.map +1 -1
  349. package/dist/shared/types/ast.js.map +1 -1
  350. package/dist/shared/types/core.d.ts +1 -1
  351. package/dist/shared/types/core.d.ts.map +1 -1
  352. package/dist/shared/types/index.d.ts +1 -0
  353. package/dist/shared/types/index.d.ts.map +1 -1
  354. package/dist/shared/types/index.js +2 -0
  355. package/dist/shared/types/index.js.map +1 -1
  356. package/dist/shared/types/line-number.d.ts +22 -0
  357. package/dist/shared/types/line-number.d.ts.map +1 -0
  358. package/dist/shared/types/line-number.js +28 -0
  359. package/dist/shared/types/line-number.js.map +1 -0
  360. package/package.json +2 -2
  361. package/dist/application/services/workflow-engine.service.d.ts +0 -76
  362. package/dist/application/services/workflow-engine.service.d.ts.map +0 -1
  363. package/dist/application/services/workflow-engine.service.js +0 -405
  364. package/dist/application/services/workflow-engine.service.js.map +0 -1
  365. package/dist/application/workflows/analysis-workflow.d.ts +0 -239
  366. package/dist/application/workflows/analysis-workflow.d.ts.map +0 -1
  367. package/dist/application/workflows/analysis-workflow.js +0 -395
  368. package/dist/application/workflows/analysis-workflow.js.map +0 -1
  369. package/dist/application/workflows/base-workflow.d.ts +0 -108
  370. package/dist/application/workflows/base-workflow.d.ts.map +0 -1
  371. package/dist/application/workflows/base-workflow.js +0 -236
  372. package/dist/application/workflows/base-workflow.js.map +0 -1
  373. package/dist/application/workflows/index.d.ts +0 -115
  374. package/dist/application/workflows/index.d.ts.map +0 -1
  375. package/dist/application/workflows/index.js +0 -218
  376. package/dist/application/workflows/index.js.map +0 -1
  377. package/dist/application/workflows/refactor-workflow.d.ts +0 -107
  378. package/dist/application/workflows/refactor-workflow.d.ts.map +0 -1
  379. package/dist/application/workflows/refactor-workflow.js +0 -310
  380. package/dist/application/workflows/refactor-workflow.js.map +0 -1
  381. package/dist/core/shared/symbol-finder.d.ts.map +0 -1
  382. package/dist/core/shared/symbol-finder.js +0 -882
  383. package/dist/core/shared/symbol-finder.js.map +0 -1
  384. package/dist/interfaces/cli/commands/move-member.command.d.ts +0 -11
  385. package/dist/interfaces/cli/commands/move-member.command.d.ts.map +0 -1
  386. package/dist/interfaces/cli/commands/move-member.command.js +0 -211
  387. package/dist/interfaces/cli/commands/move-member.command.js.map +0 -1
  388. package/dist/plugins/javascript/code-analyzer.d.ts +0 -68
  389. package/dist/plugins/javascript/code-analyzer.d.ts.map +0 -1
  390. package/dist/plugins/javascript/code-analyzer.js +0 -302
  391. package/dist/plugins/javascript/code-analyzer.js.map +0 -1
  392. package/dist/plugins/javascript/index.d.ts +0 -12
  393. package/dist/plugins/javascript/index.d.ts.map +0 -1
  394. package/dist/plugins/javascript/index.js +0 -16
  395. package/dist/plugins/javascript/index.js.map +0 -1
  396. package/dist/plugins/typescript/index.d.ts +0 -14
  397. package/dist/plugins/typescript/index.d.ts.map +0 -1
  398. package/dist/plugins/typescript/index.js +0 -13
  399. package/dist/plugins/typescript/index.js.map +0 -1
  400. package/dist/shared/utils/array.d.ts.map +0 -1
  401. package/dist/shared/utils/array.js.map +0 -1
  402. package/dist/shared/utils/async.d.ts.map +0 -1
  403. package/dist/shared/utils/async.js.map +0 -1
  404. package/dist/shared/utils/index.d.ts.map +0 -1
  405. package/dist/shared/utils/index.js.map +0 -1
  406. package/dist/shared/utils/memory-monitor.d.ts.map +0 -1
  407. package/dist/shared/utils/memory-monitor.js.map +0 -1
  408. package/dist/shared/utils/object.d.ts.map +0 -1
  409. package/dist/shared/utils/object.js.map +0 -1
  410. package/dist/shared/utils/path.d.ts.map +0 -1
  411. package/dist/shared/utils/path.js.map +0 -1
  412. package/dist/shared/utils/string.d.ts.map +0 -1
  413. package/dist/shared/utils/string.js.map +0 -1
  414. /package/dist/{shared → plugins/shared}/utils/array.js +0 -0
  415. /package/dist/{shared → plugins/shared}/utils/memory-monitor.d.ts +0 -0
  416. /package/dist/{shared → plugins/shared}/utils/memory-monitor.js +0 -0
  417. /package/dist/{shared → plugins/shared}/utils/path.d.ts +0 -0
  418. /package/dist/{shared → plugins/shared}/utils/path.js +0 -0
@@ -0,0 +1,195 @@
1
+ /**
2
+ * 文字匹配工具類別
3
+ * 負責基於文字的符號引用查找(降級方法)
4
+ */
5
+ import { SymbolReferenceType } from './types.js';
6
+ /**
7
+ * 文字匹配器
8
+ * 提供基於正則表達式的符號查找能力
9
+ */
10
+ export class TextMatcher {
11
+ /**
12
+ * 使用文字匹配查找引用(降級方法)
13
+ */
14
+ findReferencesByText(filePath, content, symbolName) {
15
+ const references = [];
16
+ const lines = content.split('\n');
17
+ const regex = new RegExp(`\\b${this.escapeRegex(symbolName)}\\b`, 'g');
18
+ for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
19
+ const line = lines[lineIndex];
20
+ let match;
21
+ while ((match = regex.exec(line)) !== null) {
22
+ const startColumn = match.index + 1;
23
+ references.push({
24
+ symbolName,
25
+ location: {
26
+ filePath,
27
+ range: {
28
+ start: { line: lineIndex + 1, column: startColumn },
29
+ end: { line: lineIndex + 1, column: startColumn + symbolName.length }
30
+ }
31
+ },
32
+ type: SymbolReferenceType.Usage,
33
+ // 保留原始行內容(不 trim),讓 diff 輸出保持正確的縮排
34
+ context: line
35
+ });
36
+ }
37
+ }
38
+ return references;
39
+ }
40
+ /**
41
+ * 使用文字匹配查找引用(過濾字串和註解版本)
42
+ *
43
+ * 此方法會過濾掉:
44
+ * 1. 字串字面值中的符號(單引號、雙引號、模板字串)
45
+ * 2. 單行註解中的符號(// 和 #)
46
+ * 3. 多行註解中的符號
47
+ */
48
+ findReferencesByTextFiltered(filePath, content, symbolName) {
49
+ const references = [];
50
+ const lines = content.split('\n');
51
+ const regex = new RegExp(`\\b${this.escapeRegex(symbolName)}\\b`, 'g');
52
+ let inBlockComment = false;
53
+ for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
54
+ const line = lines[lineIndex];
55
+ let match;
56
+ // 追蹤多行註解狀態
57
+ if (inBlockComment) {
58
+ const closeCommentIndex = line.indexOf('*/');
59
+ if (closeCommentIndex >= 0) {
60
+ inBlockComment = false;
61
+ }
62
+ else {
63
+ continue; // 整行在多行註解中,跳過
64
+ }
65
+ }
66
+ while ((match = regex.exec(line)) !== null) {
67
+ const position = match.index;
68
+ // 檢查是否在字串中
69
+ if (this.isInString(line, position)) {
70
+ continue;
71
+ }
72
+ // 檢查是否在單行註解中
73
+ if (this.isInSingleLineComment(line, position)) {
74
+ continue;
75
+ }
76
+ // 檢查是否在多行註解開始後
77
+ const openCommentIndex = line.lastIndexOf('/*', position);
78
+ if (openCommentIndex >= 0) {
79
+ const closeCommentIndex = line.indexOf('*/', openCommentIndex);
80
+ if (closeCommentIndex < 0 || closeCommentIndex > position) {
81
+ // 在未關閉的多行註解中
82
+ if (closeCommentIndex < 0) {
83
+ inBlockComment = true;
84
+ }
85
+ continue;
86
+ }
87
+ }
88
+ const startColumn = position + 1;
89
+ references.push({
90
+ symbolName,
91
+ location: {
92
+ filePath,
93
+ range: {
94
+ start: { line: lineIndex + 1, column: startColumn },
95
+ end: { line: lineIndex + 1, column: startColumn + symbolName.length }
96
+ }
97
+ },
98
+ type: SymbolReferenceType.Usage,
99
+ // 保留原始行內容(不 trim),讓 diff 輸出保持正確的縮排
100
+ context: line
101
+ });
102
+ }
103
+ }
104
+ return references;
105
+ }
106
+ /**
107
+ * 批次文字匹配查找(降級方法)
108
+ */
109
+ findReferencesMultipleByText(filePath, content, symbolNames, results) {
110
+ const lines = content.split('\n');
111
+ for (const symbolName of symbolNames) {
112
+ const regex = new RegExp(`\\b${this.escapeRegex(symbolName)}\\b`, 'g');
113
+ const refs = results.get(symbolName);
114
+ if (!refs) {
115
+ continue;
116
+ }
117
+ for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
118
+ const line = lines[lineIndex];
119
+ let match;
120
+ while ((match = regex.exec(line)) !== null) {
121
+ refs.push({
122
+ symbolName,
123
+ location: {
124
+ filePath,
125
+ range: {
126
+ start: { line: lineIndex + 1, column: match.index + 1 },
127
+ end: { line: lineIndex + 1, column: match.index + 1 + symbolName.length }
128
+ }
129
+ },
130
+ type: SymbolReferenceType.Usage,
131
+ context: line.trim()
132
+ });
133
+ }
134
+ }
135
+ }
136
+ }
137
+ /**
138
+ * 檢查位置是否在字串字面值中
139
+ */
140
+ isInString(line, position) {
141
+ let inSingleQuote = false;
142
+ let inDoubleQuote = false;
143
+ let inTemplate = false;
144
+ for (let i = 0; i < position; i++) {
145
+ const char = line[i];
146
+ const prevChar = i > 0 ? line[i - 1] : '';
147
+ // 跳過轉義字元
148
+ if (prevChar === '\\') {
149
+ continue;
150
+ }
151
+ if (char === '\'' && !inDoubleQuote && !inTemplate) {
152
+ inSingleQuote = !inSingleQuote;
153
+ }
154
+ else if (char === '"' && !inSingleQuote && !inTemplate) {
155
+ inDoubleQuote = !inDoubleQuote;
156
+ }
157
+ else if (char === '`' && !inSingleQuote && !inDoubleQuote) {
158
+ inTemplate = !inTemplate;
159
+ }
160
+ }
161
+ return inSingleQuote || inDoubleQuote || inTemplate;
162
+ }
163
+ /**
164
+ * 檢查位置是否在單行註解中
165
+ */
166
+ isInSingleLineComment(line, position) {
167
+ const beforePosition = line.substring(0, position);
168
+ // TypeScript/JavaScript 單行註解
169
+ if (beforePosition.includes('//')) {
170
+ return true;
171
+ }
172
+ // Python/Shell 單行註解
173
+ if (beforePosition.includes('#')) {
174
+ // 排除 # 在字串中的情況
175
+ const hashIndex = beforePosition.indexOf('#');
176
+ if (!this.isInString(line, hashIndex)) {
177
+ return true;
178
+ }
179
+ }
180
+ return false;
181
+ }
182
+ /**
183
+ * 跳脫正則表達式特殊字元
184
+ */
185
+ escapeRegex(str) {
186
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
187
+ }
188
+ }
189
+ /**
190
+ * 建立 TextMatcher 實例
191
+ */
192
+ export function createTextMatcher() {
193
+ return new TextMatcher();
194
+ }
195
+ //# sourceMappingURL=text-matcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-matcher.js","sourceRoot":"","sources":["../../../../src/core/shared/symbol-finder/text-matcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * 符號查找器型別定義
3
+ */
4
+ import type { Range, Location } from '../../../shared/types/core.js';
5
+ import type { Symbol } from '../../../shared/types/symbol.js';
6
+ /**
7
+ * 符號引用
8
+ */
9
+ export interface SymbolReference {
10
+ readonly symbolName: string;
11
+ readonly location: Location;
12
+ readonly type: SymbolReferenceType;
13
+ /** 引用所在行的完整程式碼(用於輸出顯示) */
14
+ readonly context?: string;
15
+ /** 所屬容器名稱(class、interface 等,用於作用域識別) */
16
+ readonly containerName?: string;
17
+ /** 是否為方法呼叫(用於區分同名方法) */
18
+ readonly isMethodCall?: boolean;
19
+ /** 呼叫者類型名稱(用於精確匹配方法所屬類別) */
20
+ readonly receiverType?: string;
21
+ }
22
+ /**
23
+ * 符號引用類型
24
+ */
25
+ export declare enum SymbolReferenceType {
26
+ Definition = "definition",
27
+ Usage = "usage",
28
+ Import = "import",
29
+ Export = "export"
30
+ }
31
+ /**
32
+ * 函式呼叫點
33
+ */
34
+ export interface CallSite {
35
+ readonly functionName: string;
36
+ readonly location: Location;
37
+ readonly arguments: readonly CallSiteArgument[];
38
+ readonly isMethodCall: boolean;
39
+ readonly receiver?: string;
40
+ }
41
+ /**
42
+ * 呼叫點參數
43
+ */
44
+ export interface CallSiteArgument {
45
+ readonly index: number;
46
+ readonly name?: string;
47
+ readonly value: string;
48
+ readonly range: Range;
49
+ }
50
+ /**
51
+ * 類別成員
52
+ */
53
+ export interface ClassMember {
54
+ readonly name: string;
55
+ readonly type: ClassMemberType;
56
+ readonly location: Location;
57
+ readonly modifiers: readonly string[];
58
+ readonly valueType?: string;
59
+ }
60
+ /**
61
+ * 類別成員類型
62
+ */
63
+ export declare enum ClassMemberType {
64
+ Method = "method",
65
+ Property = "property",
66
+ Getter = "getter",
67
+ Setter = "setter",
68
+ Constructor = "constructor"
69
+ }
70
+ /**
71
+ * 符號定義
72
+ */
73
+ export interface SymbolDefinition {
74
+ readonly symbol: Symbol;
75
+ readonly signature?: string;
76
+ readonly documentation?: string;
77
+ }
78
+ /**
79
+ * 符號唯一識別鍵
80
+ * 用於區分不同作用域的同名符號(如 Dog.bark vs Car.bark)
81
+ */
82
+ export interface SymbolKey {
83
+ /** 符號名稱 */
84
+ readonly name: string;
85
+ /** 所屬容器(類別、介面等)*/
86
+ readonly containerName: string | undefined;
87
+ /** 定義檔案路徑 */
88
+ readonly filePath: string;
89
+ /** 定義行號(用於同檔案同容器內的區分)*/
90
+ readonly line: number;
91
+ }
92
+ /**
93
+ * 將 Symbol 轉換為 SymbolKey
94
+ */
95
+ export declare function symbolToKey(symbol: Symbol): SymbolKey;
96
+ /**
97
+ * 將 SymbolKey 序列化為字串(用於 Map 鍵)
98
+ * 格式:v1:filePath:line:containerName:name
99
+ *
100
+ * 版本控制:當格式需要變更時,更新 SYMBOL_KEY_VERSION 並新增對應的解析邏輯
101
+ */
102
+ export declare function serializeSymbolKey(key: SymbolKey): string;
103
+ /**
104
+ * 將序列化字串反序列化為 SymbolKey
105
+ * 支援版本控制,可向後相容舊格式
106
+ */
107
+ export declare function deserializeSymbolKey(serialized: string): SymbolKey;
108
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/shared/symbol-finder/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,0BAA0B;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,wCAAwC;IACxC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,wBAAwB;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,4BAA4B;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,oBAAY,mBAAmB;IAC7B,UAAU,eAAe;IACzB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,MAAM,WAAW;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAChD,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,oBAAY,eAAe;IACzB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,WAAW,gBAAgB;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,WAAW;IACX,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,kBAAkB;IAClB,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,aAAa;IACb,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,wBAAwB;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAOrD;AAKD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAEzD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAsBlE"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * 符號查找器型別定義
3
+ */
4
+ /**
5
+ * 符號引用類型
6
+ */
7
+ export var SymbolReferenceType;
8
+ (function (SymbolReferenceType) {
9
+ SymbolReferenceType["Definition"] = "definition";
10
+ SymbolReferenceType["Usage"] = "usage";
11
+ SymbolReferenceType["Import"] = "import";
12
+ SymbolReferenceType["Export"] = "export";
13
+ })(SymbolReferenceType || (SymbolReferenceType = {}));
14
+ /**
15
+ * 類別成員類型
16
+ */
17
+ export var ClassMemberType;
18
+ (function (ClassMemberType) {
19
+ ClassMemberType["Method"] = "method";
20
+ ClassMemberType["Property"] = "property";
21
+ ClassMemberType["Getter"] = "getter";
22
+ ClassMemberType["Setter"] = "setter";
23
+ ClassMemberType["Constructor"] = "constructor";
24
+ })(ClassMemberType || (ClassMemberType = {}));
25
+ /**
26
+ * 將 Symbol 轉換為 SymbolKey
27
+ */
28
+ export function symbolToKey(symbol) {
29
+ return {
30
+ name: symbol.name,
31
+ containerName: symbol.scope?.name,
32
+ filePath: symbol.location.filePath,
33
+ line: symbol.location.range.start.line
34
+ };
35
+ }
36
+ /** SymbolKey 序列化格式版本(用於未來擴展和向後相容) */
37
+ const SYMBOL_KEY_VERSION = 'v1';
38
+ /**
39
+ * 將 SymbolKey 序列化為字串(用於 Map 鍵)
40
+ * 格式:v1:filePath:line:containerName:name
41
+ *
42
+ * 版本控制:當格式需要變更時,更新 SYMBOL_KEY_VERSION 並新增對應的解析邏輯
43
+ */
44
+ export function serializeSymbolKey(key) {
45
+ return `${SYMBOL_KEY_VERSION}:${key.filePath}:${key.line}:${key.containerName ?? ''}:${key.name}`;
46
+ }
47
+ /**
48
+ * 將序列化字串反序列化為 SymbolKey
49
+ * 支援版本控制,可向後相容舊格式
50
+ */
51
+ export function deserializeSymbolKey(serialized) {
52
+ const parts = serialized.split(':');
53
+ // 檢查版本前綴
54
+ const version = parts[0];
55
+ if (version === SYMBOL_KEY_VERSION) {
56
+ // v1 格式:v1:filePath:line:containerName:name
57
+ parts.shift(); // 移除版本前綴
58
+ const name = parts.pop();
59
+ const containerName = parts.pop() || undefined;
60
+ const line = parseInt(parts.pop(), 10);
61
+ const filePath = parts.join(':');
62
+ return { name, containerName, filePath, line };
63
+ }
64
+ // 向後相容:舊格式(無版本前綴)filePath:line:containerName:name
65
+ const name = parts.pop();
66
+ const containerName = parts.pop() || undefined;
67
+ const line = parseInt(parts.pop(), 10);
68
+ const filePath = parts.join(':');
69
+ return { name, containerName, filePath, line };
70
+ }
71
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/shared/symbol-finder/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsBH;;GAEG;AACH,MAAM,CAAN,IAAY,mBAKX;AALD,WAAY,mBAAmB;IAC7B,gDAAyB,CAAA;IACzB,sCAAe,CAAA;IACf,wCAAiB,CAAA;IACjB,wCAAiB,CAAA;AACnB,CAAC,EALW,mBAAmB,KAAnB,mBAAmB,QAK9B;AAkCD;;GAEG;AACH,MAAM,CAAN,IAAY,eAMX;AAND,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,wCAAqB,CAAA;IACrB,oCAAiB,CAAA;IACjB,oCAAiB,CAAA;IACjB,8CAA2B,CAAA;AAC7B,CAAC,EANW,eAAe,KAAf,eAAe,QAM1B;AA0BD;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,aAAa,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI;QACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;QAClC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI;KACvC,CAAC;AACJ,CAAC;AAED,qCAAqC;AACrC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAc;IAC/C,OAAO,GAAG,kBAAkB,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,aAAa,IAAI,EAAE,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;AACpG,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,UAAkB;IACrD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEpC,SAAS;IACT,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,OAAO,KAAK,kBAAkB,EAAE,CAAC;QACnC,4CAA4C;QAC5C,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QAC1B,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,SAAS,CAAC;QAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAG,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjD,CAAC;IAED,kDAAkD;IAClD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;IAC1B,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,SAAS,CAAC;IAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAG,EAAE,EAAE,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEjC,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACjD,CAAC"}
@@ -34,6 +34,10 @@ export declare class SnapshotGenerator {
34
34
  * 產生模組快照
35
35
  */
36
36
  private generateModuleSnapshot;
37
+ /**
38
+ * 載入模組目錄下所有檔案內容
39
+ */
40
+ private loadFileContents;
37
41
  /**
38
42
  * 使用 Parser 識別模組內的 factory 模式
39
43
  */
@@ -49,6 +53,7 @@ export declare class SnapshotGenerator {
49
53
  /**
50
54
  * 建構模組快照
51
55
  * @param factoryPatterns Parser 識別的 factory 模式(優先使用,若為空則 fallback 到名稱比對)
56
+ * @param fileContents 檔案內容 Map(供 Parser 簽章解析使用)
52
57
  */
53
58
  private buildModuleSnapshot;
54
59
  /**
@@ -60,13 +65,20 @@ export declare class SnapshotGenerator {
60
65
  */
61
66
  private getClassFields;
62
67
  /**
63
- * 格式化方法簽章
68
+ * 格式化符號簽章(方法或函數)
69
+ * 優先使用 Parser AST 解析,fallback 到 simplifySignature
70
+ * @param fileContents 檔案內容 Map(供 Parser 使用)
64
71
  */
65
- private formatMethodSignature;
72
+ private formatSymbolSignature;
66
73
  /**
67
- * 格式化函數簽章
74
+ * 使用 Parser AST 格式化簽章
75
+ * @param filePath 檔案路徑(用於選擇 Parser)
76
+ * @param symbolName 符號名稱
77
+ * @param line 行號(1-based)
78
+ * @param code 檔案內容
79
+ * @returns 格式化後的簽章字串,如果無法解析則返回 null(fallback 到 simplifySignature)
68
80
  */
69
- private formatFunctionSignature;
81
+ private formatSignatureWithParser;
70
82
  /**
71
83
  * 簡化簽章格式(移除函數名稱,保留參數和回傳型別)
72
84
  * 使用括號平衡算法處理巢狀泛型
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot-generator.d.ts","sourceRoot":"","sources":["../../../src/core/snapshot/snapshot-generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAKpE,OAAO,KAAK,EAAmC,cAAc,EAAe,MAAM,YAAY,CAAC;AAG/F,OAAO,KAAK,EAAE,mBAAmB,EAAiB,MAAM,qBAAqB,CAAC;AAQ9E;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAc;IACzC,OAAO,CAAC,YAAY,CAAqC;gBAE7C,UAAU,EAAE,WAAW;IAInC;;OAEG;IACG,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAU3D;;;;OAIG;IACG,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA0C1F;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAmB/B;;OAEG;YACW,WAAW;IA0BzB;;OAEG;YACW,sBAAsB;IAwBpC;;OAEG;YACW,uBAAuB;IAwCrC;;OAEG;YACW,uBAAuB;IAoBrC;;OAEG;YACW,cAAc;IA8B5B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAqE3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAmBvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAQ7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAQ/B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAiBzB;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAuDnC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAsB7B;;OAEG;IACH,OAAO,CAAC,eAAe;CAMxB"}
1
+ {"version":3,"file":"snapshot-generator.d.ts","sourceRoot":"","sources":["../../../src/core/snapshot/snapshot-generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAKpE,OAAO,KAAK,EAAmC,cAAc,EAAe,MAAM,YAAY,CAAC;AAG/F,OAAO,KAAK,EAAE,mBAAmB,EAAiB,MAAM,qBAAqB,CAAC;AAQ9E;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAc;IACzC,OAAO,CAAC,YAAY,CAAqC;gBAE7C,UAAU,EAAE,WAAW;IAInC;;OAEG;IACG,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAU3D;;;;OAIG;IACG,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA0C1F;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAmB/B;;OAEG;YACW,WAAW;IA0BzB;;OAEG;YACW,sBAAsB;IA2BpC;;OAEG;YACW,gBAAgB;IA6B9B;;OAEG;YACW,uBAAuB;IAwCrC;;OAEG;YACW,uBAAuB;IAoBrC;;OAEG;YACW,cAAc;IA8B5B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAsE3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAuB7B;;;;;;;OAOG;IACH,OAAO,CAAC,yBAAyB;IA4BjC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAiBzB;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAuDnC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAsB7B;;OAEG;IACH,OAAO,CAAC,eAAe;CAMxB"}
@@ -123,12 +123,46 @@ export class SnapshotGenerator {
123
123
  const relativePath = path.basename(modulePath);
124
124
  // 使用 Parser 識別 factory 模式
125
125
  const factoryPatterns = await this.identifyFactoryPatterns(modulePath);
126
- return this.buildModuleSnapshot(relativePath, symbols, modulePath, factoryPatterns);
126
+ // 預載入所有檔案內容(供 formatSignatureWithParser 使用)
127
+ const fileContents = await this.loadFileContents(modulePath);
128
+ return this.buildModuleSnapshot(relativePath, symbols, modulePath, factoryPatterns, fileContents);
127
129
  }
128
130
  finally {
129
131
  indexEngine.dispose();
130
132
  }
131
133
  }
134
+ /**
135
+ * 載入模組目錄下所有檔案內容
136
+ */
137
+ async loadFileContents(modulePath) {
138
+ const contents = new Map();
139
+ const supportedExtensions = ParserRegistry.getInstance().getSupportedExtensions();
140
+ try {
141
+ const entries = await this.fileSystem.readDirectory(modulePath);
142
+ for (const entry of entries) {
143
+ if (entry.isDirectory) {
144
+ continue;
145
+ }
146
+ const ext = path.extname(entry.name);
147
+ if (!supportedExtensions.includes(ext)) {
148
+ continue;
149
+ }
150
+ const filePath = path.join(modulePath, entry.name);
151
+ try {
152
+ const content = await this.fileSystem.readFile(filePath);
153
+ const codeString = typeof content === 'string' ? content : content.toString('utf-8');
154
+ contents.set(filePath, codeString);
155
+ }
156
+ catch {
157
+ // 忽略單一檔案的讀取錯誤
158
+ }
159
+ }
160
+ }
161
+ catch {
162
+ // 忽略目錄讀取錯誤
163
+ }
164
+ return contents;
165
+ }
132
166
  /**
133
167
  * 使用 Parser 識別模組內的 factory 模式
134
168
  */
@@ -219,8 +253,9 @@ export class SnapshotGenerator {
219
253
  /**
220
254
  * 建構模組快照
221
255
  * @param factoryPatterns Parser 識別的 factory 模式(優先使用,若為空則 fallback 到名稱比對)
256
+ * @param fileContents 檔案內容 Map(供 Parser 簽章解析使用)
222
257
  */
223
- buildModuleSnapshot(moduleName, symbols, _modulePath, factoryPatterns = new Map()) {
258
+ buildModuleSnapshot(moduleName, symbols, _modulePath, factoryPatterns = new Map(), fileContents = new Map()) {
224
259
  // 轉型為 ExtendedSymbol 以存取 signature 和 typeInfo
225
260
  const extendedSymbols = symbols;
226
261
  const api = {};
@@ -234,7 +269,7 @@ export class SnapshotGenerator {
234
269
  const typeAliases = extendedSymbols.filter(s => s.type === SymbolType.Type);
235
270
  // 處理 class
236
271
  for (const cls of classes) {
237
- const methods = this.getClassMethods(cls, extendedSymbols);
272
+ const methods = this.getClassMethods(cls, extendedSymbols, fileContents);
238
273
  if (Object.keys(methods).length > 0) {
239
274
  api[cls.name] = methods;
240
275
  }
@@ -253,11 +288,11 @@ export class SnapshotGenerator {
253
288
  const parserPattern = factoryPatterns.get(func.name);
254
289
  if (parserPattern) {
255
290
  // Parser 識別為 factory(語義分析)
256
- factories[func.name] = this.formatFunctionSignature(func);
291
+ factories[func.name] = this.formatSymbolSignature(func, fileContents);
257
292
  }
258
293
  else if (factoryPatterns.size === 0 && func.name.startsWith('create')) {
259
294
  // Fallback:Parser 未提供任何結果時,使用名稱比對(向後相容)
260
- factories[func.name] = this.formatFunctionSignature(func);
295
+ factories[func.name] = this.formatSymbolSignature(func, fileContents);
261
296
  }
262
297
  }
263
298
  // 處理 interface
@@ -279,7 +314,7 @@ export class SnapshotGenerator {
279
314
  /**
280
315
  * 取得 class 的方法
281
316
  */
282
- getClassMethods(cls, allSymbols) {
317
+ getClassMethods(cls, allSymbols, fileContents) {
283
318
  const methods = {};
284
319
  // 找出屬於此 class 的方法
285
320
  // 方法的 scope 是 function scope(方法名),其 parent 才是 class scope
@@ -289,7 +324,7 @@ export class SnapshotGenerator {
289
324
  && s.name !== 'constructor' // 排除 constructor
290
325
  );
291
326
  for (const method of classMethods) {
292
- methods[method.name] = this.formatMethodSignature(method);
327
+ methods[method.name] = this.formatSymbolSignature(method, fileContents);
293
328
  }
294
329
  return methods;
295
330
  }
@@ -307,24 +342,62 @@ export class SnapshotGenerator {
307
342
  return fields;
308
343
  }
309
344
  /**
310
- * 格式化方法簽章
345
+ * 格式化符號簽章(方法或函數)
346
+ * 優先使用 Parser AST 解析,fallback 到 simplifySignature
347
+ * @param fileContents 檔案內容 Map(供 Parser 使用)
311
348
  */
312
- formatMethodSignature(method) {
313
- // 優先使用 Parser 提取的完整簽章
314
- if (method.signature) {
315
- return this.simplifySignature(method.signature);
349
+ formatSymbolSignature(symbol, fileContents) {
350
+ // 優先使用 Parser AST 解析簽章
351
+ const filePath = symbol.location?.filePath;
352
+ const line = symbol.location?.range?.start?.line;
353
+ const code = filePath ? fileContents.get(filePath) : undefined;
354
+ if (filePath && line !== undefined && code) {
355
+ const parserResult = this.formatSignatureWithParser(filePath, symbol.name, line, code);
356
+ if (parserResult) {
357
+ return parserResult;
358
+ }
359
+ }
360
+ // Fallback:使用 IndexEngine 提取的簽章
361
+ if (symbol.signature) {
362
+ return this.simplifySignature(symbol.signature);
316
363
  }
317
364
  return '() → unknown';
318
365
  }
319
366
  /**
320
- * 格式化函數簽章
367
+ * 使用 Parser AST 格式化簽章
368
+ * @param filePath 檔案路徑(用於選擇 Parser)
369
+ * @param symbolName 符號名稱
370
+ * @param line 行號(1-based)
371
+ * @param code 檔案內容
372
+ * @returns 格式化後的簽章字串,如果無法解析則返回 null(fallback 到 simplifySignature)
321
373
  */
322
- formatFunctionSignature(func) {
323
- // 優先使用 Parser 提取的完整簽章
324
- if (func.signature) {
325
- return this.simplifySignature(func.signature);
374
+ formatSignatureWithParser(filePath, symbolName, line, code) {
375
+ const ext = path.extname(filePath);
376
+ const parser = ParserRegistry.getInstance().getParser(ext);
377
+ if (!parser?.formatSignature) {
378
+ return null;
326
379
  }
327
- return '() unknown';
380
+ const sig = parser.formatSignature(code, symbolName, line);
381
+ if (!sig) {
382
+ return null;
383
+ }
384
+ // 轉換 FormattedSignature → 簡化字串
385
+ const params = sig.parameters
386
+ .map(p => {
387
+ let str = p.name;
388
+ if (p.optional && !p.defaultValue) {
389
+ str += '?';
390
+ }
391
+ if (p.type && p.type !== 'any') {
392
+ str += `: ${p.type}`;
393
+ }
394
+ if (p.defaultValue) {
395
+ str += ` = ${p.defaultValue}`;
396
+ }
397
+ return str;
398
+ })
399
+ .join(', ');
400
+ return params ? `(${params}) → ${sig.returnType}` : `() → ${sig.returnType}`;
328
401
  }
329
402
  /**
330
403
  * 簡化簽章格式(移除函數名稱,保留參數和回傳型別)