agent-ide 0.3.3 → 0.4.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 (452) hide show
  1. package/README.md +11 -10
  2. package/dist/application/services/module-coordinator.service.d.ts +1 -21
  3. package/dist/application/services/module-coordinator.service.d.ts.map +1 -1
  4. package/dist/application/services/module-coordinator.service.js +10 -149
  5. package/dist/application/services/module-coordinator.service.js.map +1 -1
  6. package/dist/core/{transform/symbol/change-signature → change-signature}/change-signature-service.d.ts +2 -2
  7. package/dist/core/change-signature/change-signature-service.d.ts.map +1 -0
  8. package/dist/core/{transform/symbol/change-signature → change-signature}/change-signature-service.js +1 -1
  9. package/dist/core/change-signature/change-signature-service.js.map +1 -0
  10. package/dist/core/change-signature/index.d.ts.map +1 -0
  11. package/dist/core/change-signature/index.js.map +1 -0
  12. package/dist/core/{transform/symbol/change-signature → change-signature}/signature-parser.d.ts +2 -2
  13. package/dist/core/change-signature/signature-parser.d.ts.map +1 -0
  14. package/dist/core/change-signature/signature-parser.js.map +1 -0
  15. package/dist/core/{transform/symbol/change-signature → change-signature}/types.d.ts +1 -1
  16. package/dist/core/change-signature/types.d.ts.map +1 -0
  17. package/dist/core/change-signature/types.js.map +1 -0
  18. package/dist/core/indexing/index-engine.d.ts.map +1 -1
  19. package/dist/core/indexing/index-engine.js +1 -2
  20. package/dist/core/indexing/index-engine.js.map +1 -1
  21. package/dist/core/indexing/index.d.ts +1 -9
  22. package/dist/core/indexing/index.d.ts.map +1 -1
  23. package/dist/core/indexing/index.js +2 -12
  24. package/dist/core/indexing/index.js.map +1 -1
  25. package/dist/core/indexing/types.d.ts +12 -0
  26. package/dist/core/indexing/types.d.ts.map +1 -1
  27. package/dist/core/indexing/types.js +12 -0
  28. package/dist/core/indexing/types.js.map +1 -1
  29. package/dist/core/{transform/location/move-file → move-file}/import-resolver.d.ts +1 -1
  30. package/dist/core/move-file/import-resolver.d.ts.map +1 -0
  31. package/dist/core/{transform/location/move-file → move-file}/import-resolver.js +2 -2
  32. package/dist/core/move-file/import-resolver.js.map +1 -0
  33. package/dist/core/move-file/index.d.ts.map +1 -0
  34. package/dist/core/move-file/index.js.map +1 -0
  35. package/dist/core/{transform/location/move-file → move-file}/move-service.d.ts +3 -3
  36. package/dist/core/move-file/move-service.d.ts.map +1 -0
  37. package/dist/core/{transform/location/move-file → move-file}/move-service.js +1 -1
  38. package/dist/core/move-file/move-service.js.map +1 -0
  39. package/dist/core/{transform/location/move-file → move-file}/types.d.ts +1 -1
  40. package/dist/core/move-file/types.d.ts.map +1 -0
  41. package/dist/core/move-file/types.js.map +1 -0
  42. package/dist/core/move-member/index.d.ts.map +1 -0
  43. package/dist/core/move-member/index.js.map +1 -0
  44. package/dist/core/{transform/location/move-member → move-member}/member-extractor.d.ts +2 -2
  45. package/dist/core/move-member/member-extractor.d.ts.map +1 -0
  46. package/dist/core/move-member/member-extractor.js.map +1 -0
  47. package/dist/core/{transform/location/move-member → move-member}/move-member-service.d.ts +2 -2
  48. package/dist/core/move-member/move-member-service.d.ts.map +1 -0
  49. package/dist/core/{transform/location/move-member → move-member}/move-member-service.js +1 -1
  50. package/dist/core/move-member/move-member-service.js.map +1 -0
  51. package/dist/core/{transform/location/move-member → move-member}/types.d.ts +1 -1
  52. package/dist/core/move-member/types.d.ts.map +1 -0
  53. package/dist/core/move-member/types.js.map +1 -0
  54. package/dist/core/rename/index.d.ts.map +1 -0
  55. package/dist/core/rename/index.js.map +1 -0
  56. package/dist/core/{transform/symbol/rename → rename}/reference-updater.d.ts +5 -3
  57. package/dist/core/rename/reference-updater.d.ts.map +1 -0
  58. package/dist/core/{transform/symbol/rename → rename}/reference-updater.js +9 -6
  59. package/dist/core/rename/reference-updater.js.map +1 -0
  60. package/dist/core/{transform/symbol/rename → rename}/rename-engine.d.ts +5 -3
  61. package/dist/core/rename/rename-engine.d.ts.map +1 -0
  62. package/dist/core/{transform/symbol/rename → rename}/rename-engine.js +11 -8
  63. package/dist/core/rename/rename-engine.js.map +1 -0
  64. package/dist/core/{transform/symbol/rename → rename}/scope-analyzer.d.ts +3 -3
  65. package/dist/core/rename/scope-analyzer.d.ts.map +1 -0
  66. package/dist/core/{transform/symbol/rename → rename}/scope-analyzer.js +2 -2
  67. package/dist/core/rename/scope-analyzer.js.map +1 -0
  68. package/dist/core/{transform/symbol/rename → rename}/types.d.ts +2 -2
  69. package/dist/core/rename/types.d.ts.map +1 -0
  70. package/dist/core/rename/types.js.map +1 -0
  71. package/dist/core/shared/call-hierarchy-analyzer.d.ts +102 -0
  72. package/dist/core/shared/call-hierarchy-analyzer.d.ts.map +1 -0
  73. package/dist/core/shared/call-hierarchy-analyzer.js +328 -0
  74. package/dist/core/shared/call-hierarchy-analyzer.js.map +1 -0
  75. package/dist/core/shared/index.d.ts +7 -0
  76. package/dist/core/shared/index.d.ts.map +1 -0
  77. package/dist/core/shared/index.js +7 -0
  78. package/dist/core/shared/index.js.map +1 -0
  79. package/dist/core/{transform/shared → shared}/symbol-finder.d.ts +4 -4
  80. package/dist/core/shared/symbol-finder.d.ts.map +1 -0
  81. package/dist/core/shared/symbol-finder.js.map +1 -0
  82. package/dist/infrastructure/formatters/diff-generator.d.ts.map +1 -1
  83. package/dist/infrastructure/formatters/diff-generator.js +11 -1
  84. package/dist/infrastructure/formatters/diff-generator.js.map +1 -1
  85. package/dist/infrastructure/formatters/index.d.ts +1 -1
  86. package/dist/infrastructure/formatters/index.d.ts.map +1 -1
  87. package/dist/infrastructure/formatters/index.js.map +1 -1
  88. package/dist/infrastructure/formatters/query-formatter.d.ts +20 -0
  89. package/dist/infrastructure/formatters/query-formatter.d.ts.map +1 -1
  90. package/dist/infrastructure/formatters/query-formatter.js +145 -14
  91. package/dist/infrastructure/formatters/query-formatter.js.map +1 -1
  92. package/dist/infrastructure/formatters/query-types.d.ts +99 -26
  93. package/dist/infrastructure/formatters/query-types.d.ts.map +1 -1
  94. package/dist/infrastructure/formatters/query-types.js +2 -3
  95. package/dist/infrastructure/formatters/query-types.js.map +1 -1
  96. package/dist/infrastructure/formatters/types.d.ts +10 -0
  97. package/dist/infrastructure/formatters/types.d.ts.map +1 -1
  98. package/dist/infrastructure/parser/base.d.ts +0 -32
  99. package/dist/infrastructure/parser/base.d.ts.map +1 -1
  100. package/dist/infrastructure/parser/base.js +0 -64
  101. package/dist/infrastructure/parser/base.js.map +1 -1
  102. package/dist/infrastructure/parser/index.d.ts +0 -2
  103. package/dist/infrastructure/parser/index.d.ts.map +1 -1
  104. package/dist/infrastructure/parser/index.js +1 -2
  105. package/dist/infrastructure/parser/index.js.map +1 -1
  106. package/dist/infrastructure/parser/interface.d.ts +1 -58
  107. package/dist/infrastructure/parser/interface.d.ts.map +1 -1
  108. package/dist/infrastructure/parser/interface.js +1 -11
  109. package/dist/infrastructure/parser/interface.js.map +1 -1
  110. package/dist/infrastructure/storage/index.d.ts +0 -2
  111. package/dist/infrastructure/storage/index.d.ts.map +1 -1
  112. package/dist/infrastructure/storage/index.js +0 -2
  113. package/dist/infrastructure/storage/index.js.map +1 -1
  114. package/dist/interfaces/cli/cli.d.ts.map +1 -1
  115. package/dist/interfaces/cli/cli.js +11 -17
  116. package/dist/interfaces/cli/cli.js.map +1 -1
  117. package/dist/interfaces/cli/commands/call-hierarchy.command.d.ts +11 -0
  118. package/dist/interfaces/cli/commands/call-hierarchy.command.d.ts.map +1 -0
  119. package/dist/interfaces/cli/commands/call-hierarchy.command.js +161 -0
  120. package/dist/interfaces/cli/commands/call-hierarchy.command.js.map +1 -0
  121. package/dist/interfaces/cli/commands/change-signature.command.js +8 -17
  122. package/dist/interfaces/cli/commands/change-signature.command.js.map +1 -1
  123. package/dist/interfaces/cli/commands/cycles.command.d.ts +11 -0
  124. package/dist/interfaces/cli/commands/cycles.command.d.ts.map +1 -0
  125. package/dist/interfaces/cli/commands/cycles.command.js +87 -0
  126. package/dist/interfaces/cli/commands/cycles.command.js.map +1 -0
  127. package/dist/interfaces/cli/commands/find-references.command.d.ts +11 -0
  128. package/dist/interfaces/cli/commands/find-references.command.d.ts.map +1 -0
  129. package/dist/interfaces/cli/commands/find-references.command.js +122 -0
  130. package/dist/interfaces/cli/commands/find-references.command.js.map +1 -0
  131. package/dist/interfaces/cli/commands/impact.command.d.ts +11 -0
  132. package/dist/interfaces/cli/commands/impact.command.d.ts.map +1 -0
  133. package/dist/interfaces/cli/commands/impact.command.js +98 -0
  134. package/dist/interfaces/cli/commands/impact.command.js.map +1 -0
  135. package/dist/interfaces/cli/commands/index.d.ts +4 -6
  136. package/dist/interfaces/cli/commands/index.d.ts.map +1 -1
  137. package/dist/interfaces/cli/commands/index.js +6 -6
  138. package/dist/interfaces/cli/commands/index.js.map +1 -1
  139. package/dist/interfaces/cli/commands/move-member.command.js +7 -16
  140. package/dist/interfaces/cli/commands/move-member.command.js.map +1 -1
  141. package/dist/interfaces/cli/commands/move.command.js +21 -29
  142. package/dist/interfaces/cli/commands/move.command.js.map +1 -1
  143. package/dist/interfaces/cli/commands/rename.command.js +105 -119
  144. package/dist/interfaces/cli/commands/rename.command.js.map +1 -1
  145. package/dist/interfaces/cli/unified-output-handler.d.ts +3 -1
  146. package/dist/interfaces/cli/unified-output-handler.d.ts.map +1 -1
  147. package/dist/interfaces/cli/unified-output-handler.js +11 -2
  148. package/dist/interfaces/cli/unified-output-handler.js.map +1 -1
  149. package/dist/plugins/python/index.d.ts +0 -8
  150. package/dist/plugins/python/index.d.ts.map +1 -1
  151. package/dist/plugins/python/index.js +0 -9
  152. package/dist/plugins/python/index.js.map +1 -1
  153. package/dist/plugins/python/parser.d.ts +8 -41
  154. package/dist/plugins/python/parser.d.ts.map +1 -1
  155. package/dist/plugins/python/parser.js +30 -92
  156. package/dist/plugins/python/parser.js.map +1 -1
  157. package/dist/plugins/swift/parser.d.ts +4 -0
  158. package/dist/plugins/swift/parser.d.ts.map +1 -1
  159. package/dist/plugins/swift/parser.js +22 -4
  160. package/dist/plugins/swift/parser.js.map +1 -1
  161. package/dist/plugins/typescript/parser.d.ts +4 -37
  162. package/dist/plugins/typescript/parser.d.ts.map +1 -1
  163. package/dist/plugins/typescript/parser.js +17 -328
  164. package/dist/plugins/typescript/parser.js.map +1 -1
  165. package/dist/shared/types/symbol.d.ts +2 -1
  166. package/dist/shared/types/symbol.d.ts.map +1 -1
  167. package/dist/shared/types/symbol.js +1 -0
  168. package/dist/shared/types/symbol.js.map +1 -1
  169. package/package.json +2 -3
  170. package/dist/core/indexing/file-watcher.d.ts +0 -112
  171. package/dist/core/indexing/file-watcher.d.ts.map +0 -1
  172. package/dist/core/indexing/file-watcher.js +0 -284
  173. package/dist/core/indexing/file-watcher.js.map +0 -1
  174. package/dist/core/search/engines/text-engine.d.ts +0 -55
  175. package/dist/core/search/engines/text-engine.d.ts.map +0 -1
  176. package/dist/core/search/engines/text-engine.js +0 -377
  177. package/dist/core/search/engines/text-engine.js.map +0 -1
  178. package/dist/core/search/index.d.ts +0 -10
  179. package/dist/core/search/index.d.ts.map +0 -1
  180. package/dist/core/search/index.js +0 -11
  181. package/dist/core/search/index.js.map +0 -1
  182. package/dist/core/search/service.d.ts +0 -106
  183. package/dist/core/search/service.d.ts.map +0 -1
  184. package/dist/core/search/service.js +0 -384
  185. package/dist/core/search/service.js.map +0 -1
  186. package/dist/core/search/types.d.ts +0 -357
  187. package/dist/core/search/types.d.ts.map +0 -1
  188. package/dist/core/search/types.js +0 -47
  189. package/dist/core/search/types.js.map +0 -1
  190. package/dist/core/transform/index.d.ts +0 -10
  191. package/dist/core/transform/index.d.ts.map +0 -1
  192. package/dist/core/transform/index.js +0 -21
  193. package/dist/core/transform/index.js.map +0 -1
  194. package/dist/core/transform/location/index.d.ts +0 -8
  195. package/dist/core/transform/location/index.d.ts.map +0 -1
  196. package/dist/core/transform/location/index.js +0 -9
  197. package/dist/core/transform/location/index.js.map +0 -1
  198. package/dist/core/transform/location/move-file/import-resolver.d.ts.map +0 -1
  199. package/dist/core/transform/location/move-file/import-resolver.js.map +0 -1
  200. package/dist/core/transform/location/move-file/index.d.ts.map +0 -1
  201. package/dist/core/transform/location/move-file/index.js.map +0 -1
  202. package/dist/core/transform/location/move-file/move-service.d.ts.map +0 -1
  203. package/dist/core/transform/location/move-file/move-service.js.map +0 -1
  204. package/dist/core/transform/location/move-file/types.d.ts.map +0 -1
  205. package/dist/core/transform/location/move-file/types.js.map +0 -1
  206. package/dist/core/transform/location/move-member/index.d.ts.map +0 -1
  207. package/dist/core/transform/location/move-member/index.js.map +0 -1
  208. package/dist/core/transform/location/move-member/member-extractor.d.ts.map +0 -1
  209. package/dist/core/transform/location/move-member/member-extractor.js.map +0 -1
  210. package/dist/core/transform/location/move-member/move-member-service.d.ts.map +0 -1
  211. package/dist/core/transform/location/move-member/move-member-service.js.map +0 -1
  212. package/dist/core/transform/location/move-member/types.d.ts.map +0 -1
  213. package/dist/core/transform/location/move-member/types.js.map +0 -1
  214. package/dist/core/transform/location/shift/file-generator.d.ts +0 -45
  215. package/dist/core/transform/location/shift/file-generator.d.ts.map +0 -1
  216. package/dist/core/transform/location/shift/file-generator.js +0 -94
  217. package/dist/core/transform/location/shift/file-generator.js.map +0 -1
  218. package/dist/core/transform/location/shift/index.d.ts +0 -11
  219. package/dist/core/transform/location/shift/index.d.ts.map +0 -1
  220. package/dist/core/transform/location/shift/index.js +0 -13
  221. package/dist/core/transform/location/shift/index.js.map +0 -1
  222. package/dist/core/transform/location/shift/line-extractor.d.ts +0 -55
  223. package/dist/core/transform/location/shift/line-extractor.d.ts.map +0 -1
  224. package/dist/core/transform/location/shift/line-extractor.js +0 -123
  225. package/dist/core/transform/location/shift/line-extractor.js.map +0 -1
  226. package/dist/core/transform/location/shift/shift-service.d.ts +0 -57
  227. package/dist/core/transform/location/shift/shift-service.d.ts.map +0 -1
  228. package/dist/core/transform/location/shift/shift-service.js +0 -199
  229. package/dist/core/transform/location/shift/shift-service.js.map +0 -1
  230. package/dist/core/transform/location/shift/types.d.ts +0 -195
  231. package/dist/core/transform/location/shift/types.d.ts.map +0 -1
  232. package/dist/core/transform/location/shift/types.js +0 -89
  233. package/dist/core/transform/location/shift/types.js.map +0 -1
  234. package/dist/core/transform/shared/code-editor.d.ts +0 -70
  235. package/dist/core/transform/shared/code-editor.d.ts.map +0 -1
  236. package/dist/core/transform/shared/code-editor.js +0 -206
  237. package/dist/core/transform/shared/code-editor.js.map +0 -1
  238. package/dist/core/transform/shared/index.d.ts +0 -7
  239. package/dist/core/transform/shared/index.d.ts.map +0 -1
  240. package/dist/core/transform/shared/index.js +0 -7
  241. package/dist/core/transform/shared/index.js.map +0 -1
  242. package/dist/core/transform/shared/symbol-finder.d.ts.map +0 -1
  243. package/dist/core/transform/shared/symbol-finder.js.map +0 -1
  244. package/dist/core/transform/structure/extract/extract-function.d.ts +0 -197
  245. package/dist/core/transform/structure/extract/extract-function.d.ts.map +0 -1
  246. package/dist/core/transform/structure/extract/extract-function.js +0 -730
  247. package/dist/core/transform/structure/extract/extract-function.js.map +0 -1
  248. package/dist/core/transform/structure/extract/index.d.ts +0 -7
  249. package/dist/core/transform/structure/extract/index.d.ts.map +0 -1
  250. package/dist/core/transform/structure/extract/index.js +0 -9
  251. package/dist/core/transform/structure/extract/index.js.map +0 -1
  252. package/dist/core/transform/structure/extract/swift-extractor.d.ts +0 -98
  253. package/dist/core/transform/structure/extract/swift-extractor.d.ts.map +0 -1
  254. package/dist/core/transform/structure/extract/swift-extractor.js +0 -283
  255. package/dist/core/transform/structure/extract/swift-extractor.js.map +0 -1
  256. package/dist/core/transform/structure/index.d.ts +0 -8
  257. package/dist/core/transform/structure/index.d.ts.map +0 -1
  258. package/dist/core/transform/structure/index.js +0 -8
  259. package/dist/core/transform/structure/index.js.map +0 -1
  260. package/dist/core/transform/structure/inline/index.d.ts +0 -6
  261. package/dist/core/transform/structure/inline/index.d.ts.map +0 -1
  262. package/dist/core/transform/structure/inline/index.js +0 -6
  263. package/dist/core/transform/structure/inline/index.js.map +0 -1
  264. package/dist/core/transform/structure/inline/inline-function.d.ts +0 -175
  265. package/dist/core/transform/structure/inline/inline-function.d.ts.map +0 -1
  266. package/dist/core/transform/structure/inline/inline-function.js +0 -436
  267. package/dist/core/transform/structure/inline/inline-function.js.map +0 -1
  268. package/dist/core/transform/structure/patterns/design-patterns.d.ts +0 -178
  269. package/dist/core/transform/structure/patterns/design-patterns.d.ts.map +0 -1
  270. package/dist/core/transform/structure/patterns/design-patterns.js +0 -656
  271. package/dist/core/transform/structure/patterns/design-patterns.js.map +0 -1
  272. package/dist/core/transform/structure/patterns/index.d.ts +0 -6
  273. package/dist/core/transform/structure/patterns/index.d.ts.map +0 -1
  274. package/dist/core/transform/structure/patterns/index.js +0 -6
  275. package/dist/core/transform/structure/patterns/index.js.map +0 -1
  276. package/dist/core/transform/symbol/change-signature/change-signature-service.d.ts.map +0 -1
  277. package/dist/core/transform/symbol/change-signature/change-signature-service.js.map +0 -1
  278. package/dist/core/transform/symbol/change-signature/index.d.ts.map +0 -1
  279. package/dist/core/transform/symbol/change-signature/index.js.map +0 -1
  280. package/dist/core/transform/symbol/change-signature/signature-parser.d.ts.map +0 -1
  281. package/dist/core/transform/symbol/change-signature/signature-parser.js.map +0 -1
  282. package/dist/core/transform/symbol/change-signature/types.d.ts.map +0 -1
  283. package/dist/core/transform/symbol/change-signature/types.js.map +0 -1
  284. package/dist/core/transform/symbol/index.d.ts +0 -7
  285. package/dist/core/transform/symbol/index.d.ts.map +0 -1
  286. package/dist/core/transform/symbol/index.js +0 -7
  287. package/dist/core/transform/symbol/index.js.map +0 -1
  288. package/dist/core/transform/symbol/rename/index.d.ts.map +0 -1
  289. package/dist/core/transform/symbol/rename/index.js.map +0 -1
  290. package/dist/core/transform/symbol/rename/reference-updater.d.ts.map +0 -1
  291. package/dist/core/transform/symbol/rename/reference-updater.js.map +0 -1
  292. package/dist/core/transform/symbol/rename/rename-engine.d.ts.map +0 -1
  293. package/dist/core/transform/symbol/rename/rename-engine.js.map +0 -1
  294. package/dist/core/transform/symbol/rename/scope-analyzer.d.ts.map +0 -1
  295. package/dist/core/transform/symbol/rename/scope-analyzer.js.map +0 -1
  296. package/dist/core/transform/symbol/rename/types.d.ts.map +0 -1
  297. package/dist/core/transform/symbol/rename/types.js.map +0 -1
  298. package/dist/core/transform/types.d.ts +0 -185
  299. package/dist/core/transform/types.d.ts.map +0 -1
  300. package/dist/core/transform/types.js +0 -150
  301. package/dist/core/transform/types.js.map +0 -1
  302. package/dist/infrastructure/parser/factory.d.ts +0 -141
  303. package/dist/infrastructure/parser/factory.d.ts.map +0 -1
  304. package/dist/infrastructure/parser/factory.js +0 -306
  305. package/dist/infrastructure/parser/factory.js.map +0 -1
  306. package/dist/infrastructure/storage/file-watcher.d.ts +0 -84
  307. package/dist/infrastructure/storage/file-watcher.d.ts.map +0 -1
  308. package/dist/infrastructure/storage/file-watcher.js +0 -249
  309. package/dist/infrastructure/storage/file-watcher.js.map +0 -1
  310. package/dist/infrastructure/storage/path-utils.d.ts +0 -96
  311. package/dist/infrastructure/storage/path-utils.d.ts.map +0 -1
  312. package/dist/infrastructure/storage/path-utils.js +0 -272
  313. package/dist/infrastructure/storage/path-utils.js.map +0 -1
  314. package/dist/interfaces/cli/commands/analyze.command.d.ts +0 -11
  315. package/dist/interfaces/cli/commands/analyze.command.d.ts.map +0 -1
  316. package/dist/interfaces/cli/commands/analyze.command.js +0 -460
  317. package/dist/interfaces/cli/commands/analyze.command.js.map +0 -1
  318. package/dist/interfaces/cli/commands/deps.command.d.ts +0 -11
  319. package/dist/interfaces/cli/commands/deps.command.d.ts.map +0 -1
  320. package/dist/interfaces/cli/commands/deps.command.js +0 -143
  321. package/dist/interfaces/cli/commands/deps.command.js.map +0 -1
  322. package/dist/interfaces/cli/commands/extract.command.d.ts +0 -11
  323. package/dist/interfaces/cli/commands/extract.command.d.ts.map +0 -1
  324. package/dist/interfaces/cli/commands/extract.command.js +0 -314
  325. package/dist/interfaces/cli/commands/extract.command.js.map +0 -1
  326. package/dist/interfaces/cli/commands/inline.command.d.ts +0 -11
  327. package/dist/interfaces/cli/commands/inline.command.d.ts.map +0 -1
  328. package/dist/interfaces/cli/commands/inline.command.js +0 -208
  329. package/dist/interfaces/cli/commands/inline.command.js.map +0 -1
  330. package/dist/interfaces/cli/commands/refactor.command.d.ts +0 -11
  331. package/dist/interfaces/cli/commands/refactor.command.d.ts.map +0 -1
  332. package/dist/interfaces/cli/commands/refactor.command.js +0 -414
  333. package/dist/interfaces/cli/commands/refactor.command.js.map +0 -1
  334. package/dist/interfaces/cli/commands/search.command.d.ts +0 -11
  335. package/dist/interfaces/cli/commands/search.command.d.ts.map +0 -1
  336. package/dist/interfaces/cli/commands/search.command.js +0 -409
  337. package/dist/interfaces/cli/commands/search.command.js.map +0 -1
  338. package/dist/interfaces/cli/commands/shift.command.d.ts +0 -11
  339. package/dist/interfaces/cli/commands/shift.command.d.ts.map +0 -1
  340. package/dist/interfaces/cli/commands/shift.command.js +0 -143
  341. package/dist/interfaces/cli/commands/shift.command.js.map +0 -1
  342. package/dist/plugins/python/analyzers/complexity-analyzer.d.ts +0 -50
  343. package/dist/plugins/python/analyzers/complexity-analyzer.d.ts.map +0 -1
  344. package/dist/plugins/python/analyzers/complexity-analyzer.js +0 -172
  345. package/dist/plugins/python/analyzers/complexity-analyzer.js.map +0 -1
  346. package/dist/plugins/python/analyzers/duplication-detector.d.ts +0 -39
  347. package/dist/plugins/python/analyzers/duplication-detector.d.ts.map +0 -1
  348. package/dist/plugins/python/analyzers/duplication-detector.js +0 -146
  349. package/dist/plugins/python/analyzers/duplication-detector.js.map +0 -1
  350. package/dist/plugins/python/analyzers/error-handling-checker.d.ts +0 -28
  351. package/dist/plugins/python/analyzers/error-handling-checker.d.ts.map +0 -1
  352. package/dist/plugins/python/analyzers/error-handling-checker.js +0 -143
  353. package/dist/plugins/python/analyzers/error-handling-checker.js.map +0 -1
  354. package/dist/plugins/python/analyzers/naming-checker.d.ts +0 -56
  355. package/dist/plugins/python/analyzers/naming-checker.d.ts.map +0 -1
  356. package/dist/plugins/python/analyzers/naming-checker.js +0 -220
  357. package/dist/plugins/python/analyzers/naming-checker.js.map +0 -1
  358. package/dist/plugins/python/analyzers/pattern-detector.d.ts +0 -44
  359. package/dist/plugins/python/analyzers/pattern-detector.d.ts.map +0 -1
  360. package/dist/plugins/python/analyzers/pattern-detector.js +0 -222
  361. package/dist/plugins/python/analyzers/pattern-detector.js.map +0 -1
  362. package/dist/plugins/python/analyzers/security-checker.d.ts +0 -56
  363. package/dist/plugins/python/analyzers/security-checker.d.ts.map +0 -1
  364. package/dist/plugins/python/analyzers/security-checker.js +0 -279
  365. package/dist/plugins/python/analyzers/security-checker.js.map +0 -1
  366. package/dist/plugins/python/analyzers/type-safety-checker.d.ts +0 -44
  367. package/dist/plugins/python/analyzers/type-safety-checker.d.ts.map +0 -1
  368. package/dist/plugins/python/analyzers/type-safety-checker.js +0 -177
  369. package/dist/plugins/python/analyzers/type-safety-checker.js.map +0 -1
  370. package/dist/plugins/python/analyzers/unused-symbol-detector.d.ts +0 -37
  371. package/dist/plugins/python/analyzers/unused-symbol-detector.d.ts.map +0 -1
  372. package/dist/plugins/python/analyzers/unused-symbol-detector.js +0 -141
  373. package/dist/plugins/python/analyzers/unused-symbol-detector.js.map +0 -1
  374. package/dist/plugins/swift/analyzers/complexity-analyzer.d.ts +0 -41
  375. package/dist/plugins/swift/analyzers/complexity-analyzer.d.ts.map +0 -1
  376. package/dist/plugins/swift/analyzers/complexity-analyzer.js +0 -206
  377. package/dist/plugins/swift/analyzers/complexity-analyzer.js.map +0 -1
  378. package/dist/plugins/swift/analyzers/duplication-detector.d.ts +0 -89
  379. package/dist/plugins/swift/analyzers/duplication-detector.d.ts.map +0 -1
  380. package/dist/plugins/swift/analyzers/duplication-detector.js +0 -271
  381. package/dist/plugins/swift/analyzers/duplication-detector.js.map +0 -1
  382. package/dist/plugins/swift/analyzers/error-handling-checker.d.ts +0 -34
  383. package/dist/plugins/swift/analyzers/error-handling-checker.d.ts.map +0 -1
  384. package/dist/plugins/swift/analyzers/error-handling-checker.js +0 -135
  385. package/dist/plugins/swift/analyzers/error-handling-checker.js.map +0 -1
  386. package/dist/plugins/swift/analyzers/naming-checker.d.ts +0 -47
  387. package/dist/plugins/swift/analyzers/naming-checker.d.ts.map +0 -1
  388. package/dist/plugins/swift/analyzers/naming-checker.js +0 -161
  389. package/dist/plugins/swift/analyzers/naming-checker.js.map +0 -1
  390. package/dist/plugins/swift/analyzers/pattern-detector.d.ts +0 -78
  391. package/dist/plugins/swift/analyzers/pattern-detector.d.ts.map +0 -1
  392. package/dist/plugins/swift/analyzers/pattern-detector.js +0 -247
  393. package/dist/plugins/swift/analyzers/pattern-detector.js.map +0 -1
  394. package/dist/plugins/swift/analyzers/security-checker.d.ts +0 -38
  395. package/dist/plugins/swift/analyzers/security-checker.d.ts.map +0 -1
  396. package/dist/plugins/swift/analyzers/security-checker.js +0 -135
  397. package/dist/plugins/swift/analyzers/security-checker.js.map +0 -1
  398. package/dist/plugins/swift/analyzers/type-safety-checker.d.ts +0 -41
  399. package/dist/plugins/swift/analyzers/type-safety-checker.d.ts.map +0 -1
  400. package/dist/plugins/swift/analyzers/type-safety-checker.js +0 -121
  401. package/dist/plugins/swift/analyzers/type-safety-checker.js.map +0 -1
  402. package/dist/plugins/swift/analyzers/unused-symbol-detector.d.ts +0 -38
  403. package/dist/plugins/swift/analyzers/unused-symbol-detector.d.ts.map +0 -1
  404. package/dist/plugins/swift/analyzers/unused-symbol-detector.js +0 -211
  405. package/dist/plugins/swift/analyzers/unused-symbol-detector.js.map +0 -1
  406. package/dist/plugins/typescript/analyzers/complexity-analyzer.d.ts +0 -39
  407. package/dist/plugins/typescript/analyzers/complexity-analyzer.d.ts.map +0 -1
  408. package/dist/plugins/typescript/analyzers/complexity-analyzer.js +0 -196
  409. package/dist/plugins/typescript/analyzers/complexity-analyzer.js.map +0 -1
  410. package/dist/plugins/typescript/analyzers/duplication-detector.d.ts +0 -181
  411. package/dist/plugins/typescript/analyzers/duplication-detector.d.ts.map +0 -1
  412. package/dist/plugins/typescript/analyzers/duplication-detector.js +0 -695
  413. package/dist/plugins/typescript/analyzers/duplication-detector.js.map +0 -1
  414. package/dist/plugins/typescript/analyzers/error-handling-checker.d.ts +0 -26
  415. package/dist/plugins/typescript/analyzers/error-handling-checker.d.ts.map +0 -1
  416. package/dist/plugins/typescript/analyzers/error-handling-checker.js +0 -84
  417. package/dist/plugins/typescript/analyzers/error-handling-checker.js.map +0 -1
  418. package/dist/plugins/typescript/analyzers/naming-checker.d.ts +0 -30
  419. package/dist/plugins/typescript/analyzers/naming-checker.d.ts.map +0 -1
  420. package/dist/plugins/typescript/analyzers/naming-checker.js +0 -116
  421. package/dist/plugins/typescript/analyzers/naming-checker.js.map +0 -1
  422. package/dist/plugins/typescript/analyzers/pattern-detector.d.ts +0 -80
  423. package/dist/plugins/typescript/analyzers/pattern-detector.d.ts.map +0 -1
  424. package/dist/plugins/typescript/analyzers/pattern-detector.js +0 -267
  425. package/dist/plugins/typescript/analyzers/pattern-detector.js.map +0 -1
  426. package/dist/plugins/typescript/analyzers/security-checker.d.ts +0 -34
  427. package/dist/plugins/typescript/analyzers/security-checker.d.ts.map +0 -1
  428. package/dist/plugins/typescript/analyzers/security-checker.js +0 -126
  429. package/dist/plugins/typescript/analyzers/security-checker.js.map +0 -1
  430. package/dist/plugins/typescript/analyzers/type-safety-checker.d.ts +0 -32
  431. package/dist/plugins/typescript/analyzers/type-safety-checker.d.ts.map +0 -1
  432. package/dist/plugins/typescript/analyzers/type-safety-checker.js +0 -86
  433. package/dist/plugins/typescript/analyzers/type-safety-checker.js.map +0 -1
  434. package/dist/plugins/typescript/analyzers/unused-symbol-detector.d.ts +0 -47
  435. package/dist/plugins/typescript/analyzers/unused-symbol-detector.d.ts.map +0 -1
  436. package/dist/plugins/typescript/analyzers/unused-symbol-detector.js +0 -152
  437. package/dist/plugins/typescript/analyzers/unused-symbol-detector.js.map +0 -1
  438. /package/dist/core/{transform/symbol/change-signature → change-signature}/index.d.ts +0 -0
  439. /package/dist/core/{transform/symbol/change-signature → change-signature}/index.js +0 -0
  440. /package/dist/core/{transform/symbol/change-signature → change-signature}/signature-parser.js +0 -0
  441. /package/dist/core/{transform/symbol/change-signature → change-signature}/types.js +0 -0
  442. /package/dist/core/{transform/location/move-file → move-file}/index.d.ts +0 -0
  443. /package/dist/core/{transform/location/move-file → move-file}/index.js +0 -0
  444. /package/dist/core/{transform/location/move-file → move-file}/types.js +0 -0
  445. /package/dist/core/{transform/location/move-member → move-member}/index.d.ts +0 -0
  446. /package/dist/core/{transform/location/move-member → move-member}/index.js +0 -0
  447. /package/dist/core/{transform/location/move-member → move-member}/member-extractor.js +0 -0
  448. /package/dist/core/{transform/location/move-member → move-member}/types.js +0 -0
  449. /package/dist/core/{transform/symbol/rename → rename}/index.d.ts +0 -0
  450. /package/dist/core/{transform/symbol/rename → rename}/index.js +0 -0
  451. /package/dist/core/{transform/symbol/rename → rename}/types.js +0 -0
  452. /package/dist/core/{transform/shared → shared}/symbol-finder.js +0 -0
@@ -1,656 +0,0 @@
1
- /**
2
- * 設計模式重構器
3
- * 提供常見設計模式的自動重構功能
4
- */
5
- /**
6
- * 設計模式分析器
7
- * 分析程式碼並建議適用的設計模式
8
- */
9
- export class DesignPatternAnalyzer {
10
- /**
11
- * 分析程式碼並建議設計模式
12
- */
13
- analyzeSuggestions(code) {
14
- const suggestions = [];
15
- const classes = this.parseClasses(code);
16
- // 分析各種設計模式的適用性
17
- suggestions.push(...this.analyzeSingleton(classes, code));
18
- suggestions.push(...this.analyzeFactory(classes, code));
19
- suggestions.push(...this.analyzeObserver(classes, code));
20
- suggestions.push(...this.analyzeStrategy(classes, code));
21
- suggestions.push(...this.analyzeDecorator(classes, code));
22
- // 按置信度排序
23
- return suggestions.sort((a, b) => b.confidence - a.confidence);
24
- }
25
- /**
26
- * 分析 Singleton 模式適用性
27
- */
28
- analyzeSingleton(classes, code) {
29
- const suggestions = [];
30
- for (const cls of classes) {
31
- let confidence = 0;
32
- const reasons = [];
33
- // 檢查是否有靜態實例屬性
34
- const hasStaticInstance = cls.properties.some(p => p.isStatic && p.name.includes('instance'));
35
- if (hasStaticInstance) {
36
- confidence += 0.4;
37
- }
38
- // 檢查是否有 getInstance 方法
39
- const hasGetInstance = cls.methods.some(m => m.name === 'getInstance' && m.isStatic);
40
- if (hasGetInstance) {
41
- confidence += 0.5;
42
- reasons.push('已有 getInstance 方法,建議完善 Singleton 實作');
43
- }
44
- // 檢查建構子是否私有
45
- const hasPrivateConstructor = cls.constructor?.isPrivate;
46
- if (hasPrivateConstructor) {
47
- confidence += 0.3;
48
- }
49
- // 檢查是否全域使用
50
- const globalUsageCount = (code.match(new RegExp(cls.name, 'g')) || []).length;
51
- if (globalUsageCount > 5) {
52
- confidence += 0.2;
53
- reasons.push('類別被廣泛使用,適合 Singleton 模式');
54
- }
55
- // 檢查是否有 static config 或類似管理狀態的屬性
56
- if (cls.properties.some(p => p.isStatic && (p.name.includes('config') || p.name.includes('Config')))) {
57
- confidence += 0.3;
58
- reasons.push('有靜態配置管理,適合 Singleton 模式');
59
- }
60
- // 檢查 loadConfig 或類似方法
61
- if (cls.methods.some(m => m.isStatic && m.name.toLowerCase().includes('load'))) {
62
- confidence += 0.3;
63
- reasons.push('有靜態載入方法,適合 Singleton 模式');
64
- }
65
- if (confidence >= 0.5) {
66
- suggestions.push({
67
- pattern: 'singleton',
68
- confidence,
69
- reason: reasons.join(', ') || '類別結構適合 Singleton 模式',
70
- location: cls.location,
71
- benefits: [
72
- '確保全域只有一個實例',
73
- '提供全域存取點',
74
- '懶載入實例化'
75
- ],
76
- effort: 'low'
77
- });
78
- }
79
- }
80
- return suggestions;
81
- }
82
- /**
83
- * 分析 Factory 模式適用性
84
- */
85
- analyzeFactory(classes, code) {
86
- const suggestions = [];
87
- // 查找創建對象的函式
88
- const createMethods = code.match(/function\s+create\w*|\.create\w*/g) || [];
89
- const switchCreation = code.match(/switch\s*\([^)]*\)\s*{[^}]*new\s+\w+/g) || [];
90
- if (createMethods.length > 2 || switchCreation.length > 0) {
91
- suggestions.push({
92
- pattern: 'factory',
93
- confidence: 0.7,
94
- reason: '發現多個創建函式或條件式物件創建',
95
- location: { start: { line: 1, column: 0 }, end: { line: 1, column: 0 } },
96
- benefits: [
97
- '封裝物件創建邏輯',
98
- '減少程式碼重複',
99
- '易於擴展新類型'
100
- ],
101
- effort: 'medium'
102
- });
103
- }
104
- return suggestions;
105
- }
106
- /**
107
- * 分析 Observer 模式適用性
108
- */
109
- analyzeObserver(classes, code) {
110
- const suggestions = [];
111
- // 查找事件相關代碼
112
- const eventPatterns = [
113
- /addEventListener|on\w+|emit|trigger/g,
114
- /callback|listener|observer/g,
115
- /notify|update|subscribe/g
116
- ];
117
- let eventScore = 0;
118
- for (const pattern of eventPatterns) {
119
- const matches = code.match(pattern) || [];
120
- eventScore += matches.length;
121
- }
122
- if (eventScore >= 5) {
123
- suggestions.push({
124
- pattern: 'observer',
125
- confidence: Math.min(0.8, eventScore / 10),
126
- reason: '發現大量事件相關程式碼',
127
- location: { start: { line: 1, column: 0 }, end: { line: 1, column: 0 } },
128
- benefits: [
129
- '鬆耦合的事件處理',
130
- '動態新增/移除監聽器',
131
- '更好的可測試性'
132
- ],
133
- effort: 'medium'
134
- });
135
- }
136
- return suggestions;
137
- }
138
- /**
139
- * 分析 Strategy 模式適用性
140
- */
141
- analyzeStrategy(classes, code) {
142
- const suggestions = [];
143
- // 查找策略相關模式
144
- const strategyIndicators = [
145
- /if\s*\([^)]*type[^)]*\)|switch\s*\([^)]*type[^)]*\)/g,
146
- /algorithm|strategy|method/gi,
147
- /calculate|process|handle/gi
148
- ];
149
- let strategyScore = 0;
150
- for (const pattern of strategyIndicators) {
151
- const matches = code.match(pattern) || [];
152
- strategyScore += matches.length;
153
- }
154
- // 查找大型 if-else 鏈或 switch 語句
155
- const largeConditionals = code.match(/if\s*\([^{]*\)\s*{[^}]{50,}}\s*else/g) || [];
156
- const largeSwitches = code.match(/switch\s*\([^{]*\)\s*{[^}]{100,}}/g) || [];
157
- if (strategyScore >= 3 || largeConditionals.length > 0 || largeSwitches.length > 0) {
158
- suggestions.push({
159
- pattern: 'strategy',
160
- confidence: 0.6,
161
- reason: '發現複雜的條件邏輯或演算法選擇',
162
- location: { start: { line: 1, column: 0 }, end: { line: 1, column: 0 } },
163
- benefits: [
164
- '將演算法封裝成獨立類別',
165
- '運行時切換演算法',
166
- '符合開放封閉原則'
167
- ],
168
- effort: 'high'
169
- });
170
- }
171
- return suggestions;
172
- }
173
- /**
174
- * 分析 Decorator 模式適用性
175
- */
176
- analyzeDecorator(classes, code) {
177
- const suggestions = [];
178
- // 查找裝飾器相關模式
179
- const decoratorPatterns = [
180
- /@\w+/g, // 註解/裝飾器語法
181
- /wrap|decorator|enhance/gi,
182
- /before|after|around/gi
183
- ];
184
- let decoratorScore = 0;
185
- for (const pattern of decoratorPatterns) {
186
- const matches = code.match(pattern) || [];
187
- decoratorScore += matches.length;
188
- }
189
- if (decoratorScore >= 3) {
190
- suggestions.push({
191
- pattern: 'decorator',
192
- confidence: 0.5,
193
- reason: '發現裝飾器或包裝器模式的使用',
194
- location: { start: { line: 1, column: 0 }, end: { line: 1, column: 0 } },
195
- benefits: [
196
- '動態新增物件功能',
197
- '避免繼承爆炸',
198
- '遵循單一職責原則'
199
- ],
200
- effort: 'medium'
201
- });
202
- }
203
- return suggestions;
204
- }
205
- /**
206
- * 簡化的類別解析
207
- */
208
- parseClasses(code) {
209
- const classes = [];
210
- const classMatches = code.matchAll(/class\s+(\w+)[^{]*{([^}]*)}/g);
211
- for (const match of classMatches) {
212
- const className = match[1];
213
- const classBody = match[2];
214
- const methods = this.parseMethods(classBody);
215
- const properties = this.parseProperties(classBody);
216
- classes.push({
217
- name: className,
218
- location: this.getMatchLocation(code, match),
219
- methods,
220
- properties,
221
- constructor: methods.find(m => m.name === 'constructor')
222
- });
223
- }
224
- return classes;
225
- }
226
- /**
227
- * 解析方法
228
- */
229
- parseMethods(classBody) {
230
- const methods = [];
231
- const methodMatches = classBody.matchAll(/(static\s+)?(private\s+)?(\w+)\s*\(([^)]*)\)/g);
232
- for (const match of methodMatches) {
233
- const isStatic = !!match[1];
234
- const isPrivate = !!match[2];
235
- const name = match[3];
236
- const params = match[4] ? match[4].split(',').map(p => p.trim()) : [];
237
- methods.push({
238
- name,
239
- location: { start: { line: 1, column: 0 }, end: { line: 1, column: 0 } },
240
- parameters: params,
241
- isStatic,
242
- isPrivate
243
- });
244
- }
245
- return methods;
246
- }
247
- /**
248
- * 解析屬性
249
- */
250
- parseProperties(classBody) {
251
- const properties = [];
252
- const propMatches = classBody.matchAll(/(static\s+)?(private\s+)?(\w+)\s*[=:]/g);
253
- for (const match of propMatches) {
254
- const isStatic = !!match[1];
255
- const isPrivate = !!match[2];
256
- const name = match[3];
257
- properties.push({
258
- name,
259
- location: { start: { line: 1, column: 0 }, end: { line: 1, column: 0 } },
260
- isPrivate,
261
- isStatic
262
- });
263
- }
264
- return properties;
265
- }
266
- /**
267
- * 獲取匹配位置
268
- */
269
- getMatchLocation(code, match) {
270
- const start = match.index || 0;
271
- const end = start + match[0].length;
272
- return {
273
- start: this.offsetToPosition(code, start),
274
- end: this.offsetToPosition(code, end)
275
- };
276
- }
277
- /**
278
- * 偏移量轉位置
279
- */
280
- offsetToPosition(code, offset) {
281
- const lines = code.substring(0, offset).split('\n');
282
- return {
283
- line: lines.length,
284
- column: lines[lines.length - 1].length
285
- };
286
- }
287
- }
288
- /**
289
- * 設計模式重構器主類
290
- */
291
- export class DesignPatternRefactorer {
292
- analyzer = new DesignPatternAnalyzer();
293
- /**
294
- * 應用設計模式重構
295
- */
296
- async applyPattern(code, pattern, className, config = {
297
- generateTests: false,
298
- addDocumentation: true,
299
- useTypeScript: true,
300
- preserveComments: true
301
- }) {
302
- // 輸入驗證
303
- if (!code || !pattern || !className) {
304
- return {
305
- success: false,
306
- pattern: pattern || 'unknown',
307
- edits: [],
308
- modifiedClasses: [],
309
- errors: ['輸入參數無效'],
310
- warnings: []
311
- };
312
- }
313
- try {
314
- switch (pattern) {
315
- case 'singleton':
316
- return await this.applySingletonPattern(code, className, config);
317
- case 'factory':
318
- return await this.applyFactoryPattern(code, className, config);
319
- case 'observer':
320
- return await this.applyObserverPattern(code, className, config);
321
- case 'strategy':
322
- return await this.applyStrategyPattern(code, className, config);
323
- case 'decorator':
324
- return await this.applyDecoratorPattern(code, className, config);
325
- default:
326
- throw new Error(`不支援的設計模式: ${pattern}`);
327
- }
328
- }
329
- catch (error) {
330
- return {
331
- success: false,
332
- pattern,
333
- edits: [],
334
- modifiedClasses: [],
335
- errors: [error instanceof Error ? error.message : '未知錯誤'],
336
- warnings: []
337
- };
338
- }
339
- }
340
- /**
341
- * 應用 Singleton 模式
342
- */
343
- async applySingletonPattern(code, className, config) {
344
- const edits = [];
345
- // 找到類別定義 - 使用更準確的正則表達式
346
- // 使用遞迴匹配來處理嵌套的大括號
347
- const classPattern = `class\\s+${className}[^{]*{`;
348
- const classStartMatch = code.match(new RegExp(classPattern));
349
- if (!classStartMatch) {
350
- throw new Error(`找不到類別: ${className}`);
351
- }
352
- // 找到類別的完整內容(包含嵌套的大括號)
353
- const classStartIndex = code.indexOf(classStartMatch[0]);
354
- let braceCount = 1;
355
- let classEndIndex = classStartIndex + classStartMatch[0].length;
356
- while (braceCount > 0 && classEndIndex < code.length) {
357
- if (code[classEndIndex] === '{') {
358
- braceCount++;
359
- }
360
- if (code[classEndIndex] === '}') {
361
- braceCount--;
362
- }
363
- classEndIndex++;
364
- }
365
- const classBody = code.substring(classStartIndex + classStartMatch[0].length, classEndIndex - 1);
366
- const singletonCode = this.generateSingletonCode(className, classBody, config);
367
- // 替換整個類別
368
- const classStart = classStartIndex;
369
- const classEnd = classEndIndex;
370
- edits.push({
371
- range: {
372
- start: this.offsetToPosition(code, classStart),
373
- end: this.offsetToPosition(code, classEnd)
374
- },
375
- newText: singletonCode,
376
- type: 'replace'
377
- });
378
- return {
379
- success: true,
380
- pattern: 'singleton',
381
- edits,
382
- modifiedClasses: [className],
383
- errors: [],
384
- warnings: [],
385
- documentation: config.addDocumentation ? this.generateSingletonDocumentation(className) : undefined
386
- };
387
- }
388
- /**
389
- * 生成 Singleton 程式碼
390
- */
391
- generateSingletonCode(className, originalBody, config) {
392
- const typescript = config.useTypeScript;
393
- const instanceType = typescript ? `: ${className} | null` : '';
394
- // 修正:static 關鍵字應該在屬性前,而不是型別前
395
- return `${config.addDocumentation ? `/**\n * ${className} - Singleton 模式實作\n * 確保全域只有一個實例\n */\n` : ''}class ${className} {
396
- private static instance${instanceType} = null;
397
-
398
- private constructor() {
399
- ${this.extractConstructorBody(originalBody)}
400
- }
401
-
402
- public static getInstance()${typescript ? `: ${className}` : ''} {
403
- if (!${className}.instance) {
404
- ${className}.instance = new ${className}();
405
- }
406
- return ${className}.instance;
407
- }
408
-
409
- ${this.extractMethodsAndProperties(originalBody)}
410
- }`;
411
- }
412
- /**
413
- * 應用 Factory 模式
414
- */
415
- async applyFactoryPattern(code, className, config) {
416
- const factoryCode = this.generateFactoryCode(className, config);
417
- const createdFiles = [{
418
- path: `${className}Factory.${config.useTypeScript ? 'ts' : 'js'}`,
419
- content: factoryCode
420
- }];
421
- return {
422
- success: true,
423
- pattern: 'factory',
424
- edits: [],
425
- createdFiles,
426
- modifiedClasses: [],
427
- errors: [],
428
- warnings: ['建議重構現有的物件創建邏輯使用 Factory'],
429
- documentation: config.addDocumentation ? this.generateFactoryDocumentation(className) : undefined
430
- };
431
- }
432
- /**
433
- * 生成 Factory 程式碼
434
- */
435
- generateFactoryCode(className, config) {
436
- return `${config.addDocumentation ? `/**\n * ${className} Factory - 工廠模式實作\n * 封裝物件創建邏輯\n */\n` : ''}class ${className}Factory {
437
- static create(type${config.useTypeScript ? ': string' : ''})${config.useTypeScript ? `: ${className}` : ''} {
438
- switch (type) {
439
- case 'default':
440
- return new ${className}();
441
- // 新增更多類型...
442
- default:
443
- throw new Error(\`不支援的類型: \${type}\`);
444
- }
445
- }
446
- }`;
447
- }
448
- /**
449
- * 應用 Observer 模式
450
- */
451
- async applyObserverPattern(code, className, config) {
452
- const observerCode = this.generateObserverCode(className, config);
453
- const createdFiles = [
454
- {
455
- path: `Observer.${config.useTypeScript ? 'ts' : 'js'}`,
456
- content: observerCode.observerInterface
457
- },
458
- {
459
- path: `Observable.${config.useTypeScript ? 'ts' : 'js'}`,
460
- content: observerCode.observableClass
461
- }
462
- ];
463
- return {
464
- success: true,
465
- pattern: 'observer',
466
- edits: [],
467
- createdFiles,
468
- modifiedClasses: [],
469
- errors: [],
470
- warnings: ['需要手動實作 Observer 介面和修改現有事件處理'],
471
- documentation: config.addDocumentation ? this.generateObserverDocumentation() : undefined
472
- };
473
- }
474
- /**
475
- * 生成 Observer 模式程式碼
476
- */
477
- generateObserverCode(className, config) {
478
- const typescript = config.useTypeScript;
479
- const observerInterface = typescript ?
480
- 'interface Observer {\n update(data: any): void;\n}' :
481
- '// Observer interface\n// Implement update(data) method';
482
- const observableClass = `${config.addDocumentation ? '/**\n * Observable - 觀察者模式主題\n * 管理觀察者列表並通知變更\n */\n' : ''}class Observable {
483
- private observers${typescript ? ': Observer[]' : ''} = [];
484
-
485
- addObserver(observer${typescript ? ': Observer' : ''})${typescript ? ': void' : ''} {
486
- this.observers.push(observer);
487
- }
488
-
489
- removeObserver(observer${typescript ? ': Observer' : ''})${typescript ? ': void' : ''} {
490
- const index = this.observers.indexOf(observer);
491
- if (index > -1) {
492
- this.observers.splice(index, 1);
493
- }
494
- }
495
-
496
- notifyObservers(data${typescript ? ': any' : ''})${typescript ? ': void' : ''} {
497
- this.observers.forEach(observer => observer.update(data));
498
- }
499
- }`;
500
- return { observerInterface, observableClass };
501
- }
502
- /**
503
- * 應用 Strategy 模式
504
- */
505
- async applyStrategyPattern(code, className, config) {
506
- const strategyCode = this.generateStrategyCode(className, config);
507
- const createdFiles = [
508
- {
509
- path: `Strategy.${config.useTypeScript ? 'ts' : 'js'}`,
510
- content: strategyCode.strategyInterface
511
- },
512
- {
513
- path: `${className}Context.${config.useTypeScript ? 'ts' : 'js'}`,
514
- content: strategyCode.contextClass
515
- }
516
- ];
517
- return {
518
- success: true,
519
- pattern: 'strategy',
520
- edits: [],
521
- createdFiles,
522
- modifiedClasses: [],
523
- errors: [],
524
- warnings: ['需要將現有的演算法邏輯重構為獨立的策略類別'],
525
- documentation: config.addDocumentation ? this.generateStrategyDocumentation() : undefined
526
- };
527
- }
528
- /**
529
- * 生成 Strategy 模式程式碼
530
- */
531
- generateStrategyCode(className, config) {
532
- const typescript = config.useTypeScript;
533
- const strategyInterface = typescript ?
534
- 'interface Strategy {\n execute(data: any): any;\n}' :
535
- '// Strategy interface\n// Implement execute(data) method';
536
- const contextClass = `${config.addDocumentation ? `/**\n * ${className}Context - 策略模式上下文\n * 使用策略物件執行演算法\n */\n` : ''}class ${className}Context {
537
- private strategy${typescript ? ': Strategy' : ''};
538
-
539
- constructor(strategy${typescript ? ': Strategy' : ''}) {
540
- this.strategy = strategy;
541
- }
542
-
543
- setStrategy(strategy${typescript ? ': Strategy' : ''})${typescript ? ': void' : ''} {
544
- this.strategy = strategy;
545
- }
546
-
547
- executeStrategy(data${typescript ? ': any' : ''})${typescript ? ': any' : ''} {
548
- return this.strategy.execute(data);
549
- }
550
- }`;
551
- return { strategyInterface, contextClass };
552
- }
553
- /**
554
- * 應用 Decorator 模式
555
- */
556
- async applyDecoratorPattern(code, className, config) {
557
- // Decorator 模式實作相對複雜,這裡提供基本架構
558
- return {
559
- success: false,
560
- pattern: 'decorator',
561
- edits: [],
562
- modifiedClasses: [],
563
- errors: ['Decorator 模式需要更詳細的需求分析'],
564
- warnings: ['建議先分析具體的裝飾需求再實作']
565
- };
566
- }
567
- /**
568
- * 取得設計模式建議
569
- */
570
- async getSuggestions(code) {
571
- return this.analyzer.analyzeSuggestions(code);
572
- }
573
- // 輔助方法
574
- extractConstructorBody(classBody) {
575
- // 找到 constructor 並提取其內容
576
- const constructorStart = classBody.indexOf('constructor');
577
- if (constructorStart === -1) {
578
- return '// 建構子邏輯';
579
- }
580
- // 找到 constructor 的開始大括號
581
- const braceStart = classBody.indexOf('{', constructorStart);
582
- if (braceStart === -1) {
583
- return '// 建構子邏輯';
584
- }
585
- // 找到對應的結束大括號
586
- let braceCount = 1;
587
- let braceEnd = braceStart + 1;
588
- while (braceCount > 0 && braceEnd < classBody.length) {
589
- if (classBody[braceEnd] === '{') {
590
- braceCount++;
591
- }
592
- if (classBody[braceEnd] === '}') {
593
- braceCount--;
594
- }
595
- braceEnd++;
596
- }
597
- const constructorBody = classBody.substring(braceStart + 1, braceEnd - 1).trim();
598
- return constructorBody || '// 建構子邏輯';
599
- }
600
- extractMethodsAndProperties(classBody) {
601
- // 找到並移除 constructor
602
- const constructorStart = classBody.indexOf('constructor');
603
- if (constructorStart === -1) {
604
- // 沒有 constructor,返回整個類別體
605
- return classBody.trim();
606
- }
607
- // 找到 constructor 的結束位置
608
- const braceStart = classBody.indexOf('{', constructorStart);
609
- if (braceStart === -1) {
610
- return classBody.trim();
611
- }
612
- let braceCount = 1;
613
- let braceEnd = braceStart + 1;
614
- while (braceCount > 0 && braceEnd < classBody.length) {
615
- if (classBody[braceEnd] === '{') {
616
- braceCount++;
617
- }
618
- if (classBody[braceEnd] === '}') {
619
- braceCount--;
620
- }
621
- braceEnd++;
622
- }
623
- // 移除 constructor 並保留其餘部分
624
- const beforeConstructor = classBody.substring(0, constructorStart).trim();
625
- const afterConstructor = classBody.substring(braceEnd).trim();
626
- let result = '';
627
- if (beforeConstructor) {
628
- result += beforeConstructor + '\n\n ';
629
- }
630
- if (afterConstructor) {
631
- result += afterConstructor;
632
- }
633
- return result.trim();
634
- }
635
- offsetToPosition(code, offset) {
636
- const lines = code.substring(0, offset).split('\n');
637
- return {
638
- line: lines.length,
639
- column: lines[lines.length - 1].length
640
- };
641
- }
642
- // 文件生成方法
643
- generateSingletonDocumentation(className) {
644
- return `# ${className} Singleton 模式\n\n## 使用方式\n\`\`\`javascript\nconst instance = ${className}.getInstance();\n\`\`\`\n\n## 特點\n- 全域唯一實例\n- 懶載入初始化\n- 執行緒安全(在單執行緒環境)`;
645
- }
646
- generateFactoryDocumentation(className) {
647
- return `# ${className} Factory 模式\n\n## 使用方式\n\`\`\`javascript\nconst obj = ${className}Factory.create('default');\n\`\`\`\n\n## 特點\n- 封裝物件創建\n- 易於擴展類型\n- 降低耦合度`;
648
- }
649
- generateObserverDocumentation() {
650
- return '# Observer 模式\n\n## 使用方式\n```javascript\nconst observable = new Observable();\nobservable.addObserver(myObserver);\nobservable.notifyObservers(data);\n```\n\n## 特點\n- 鬆耦合設計\n- 動態訂閱\n- 一對多通知';
651
- }
652
- generateStrategyDocumentation() {
653
- return '# Strategy 模式\n\n## 使用方式\n```javascript\nconst context = new Context(new ConcreteStrategy());\nconst result = context.executeStrategy(data);\n```\n\n## 特點\n- 演算法封裝\n- 運行時切換\n- 開放封閉原則';
654
- }
655
- }
656
- //# sourceMappingURL=design-patterns.js.map