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,271 +0,0 @@
1
- /**
2
- * Swift 重複程式碼檢測器
3
- * 檢測重複的方法和閉包
4
- */
5
- import { createHash } from 'crypto';
6
- /**
7
- * Swift 重複程式碼檢測器
8
- */
9
- export class DuplicationDetector {
10
- /**
11
- * 檢測重複程式碼
12
- * @param filePath 檔案路徑
13
- * @param code Swift 程式碼
14
- * @returns 克隆列表
15
- */
16
- async detect(filePath, code) {
17
- const fragments = this.extractFragments(filePath, code);
18
- if (fragments.length < 2) {
19
- return [];
20
- }
21
- const clones = [];
22
- // Type-1: 完全相同的程式碼
23
- clones.push(...this.detectType1Clones(fragments));
24
- // Type-2: 結構相同但變數名不同
25
- clones.push(...this.detectType2Clones(fragments));
26
- // Type-3: 結構相似但有修改
27
- clones.push(...this.detectType3Clones(fragments));
28
- return clones;
29
- }
30
- /**
31
- * 提取程式碼片段(方法和閉包)
32
- */
33
- extractFragments(filePath, code) {
34
- const fragments = [];
35
- // 提取函式
36
- const funcRegex = /func\s+([a-zA-Z_][a-zA-Z0-9_]*)\s*\([^)]*\)\s*(?:throws\s+)?(?:->\s*[^{]+)?\s*\{/g;
37
- let match;
38
- while ((match = funcRegex.exec(code)) !== null) {
39
- const funcName = match[1];
40
- const startPos = match.index;
41
- const startLine = code.substring(0, startPos).split('\n').length;
42
- const bracePos = startPos + match[0].length - 1;
43
- const endPos = this.findMatchingBrace(code, bracePos);
44
- if (endPos !== -1) {
45
- const endLine = code.substring(0, endPos + 1).split('\n').length;
46
- const fragmentCode = code.substring(startPos, endPos + 1);
47
- const lineCount = endLine - startLine + 1;
48
- // 只處理 >= 3 行的方法
49
- if (lineCount >= 3) {
50
- fragments.push({
51
- id: `${filePath}:${startLine}:${funcName}`,
52
- code: fragmentCode,
53
- tokens: this.tokenize(fragmentCode),
54
- location: {
55
- file: filePath,
56
- startLine,
57
- endLine
58
- }
59
- });
60
- }
61
- }
62
- }
63
- // 提取閉包
64
- const closureRegex = /\{[^}]*in\s/g;
65
- while ((match = closureRegex.exec(code)) !== null) {
66
- const startPos = match.index;
67
- const startLine = code.substring(0, startPos).split('\n').length;
68
- const endPos = this.findMatchingBrace(code, startPos);
69
- if (endPos !== -1) {
70
- const endLine = code.substring(0, endPos + 1).split('\n').length;
71
- const fragmentCode = code.substring(startPos, endPos + 1);
72
- const lineCount = endLine - startLine + 1;
73
- if (lineCount >= 3) {
74
- fragments.push({
75
- id: `${filePath}:${startLine}:closure`,
76
- code: fragmentCode,
77
- tokens: this.tokenize(fragmentCode),
78
- location: {
79
- file: filePath,
80
- startLine,
81
- endLine
82
- }
83
- });
84
- }
85
- }
86
- }
87
- return fragments;
88
- }
89
- /**
90
- * 找到配對的右大括號
91
- */
92
- findMatchingBrace(content, startPos) {
93
- let braceCount = 1;
94
- let inString = false;
95
- let stringChar = '';
96
- for (let i = startPos + 1; i < content.length; i++) {
97
- const char = content[i];
98
- const prevChar = content[i - 1];
99
- if ((char === '"' || char === '\'') && prevChar !== '\\') {
100
- if (!inString) {
101
- inString = true;
102
- stringChar = char;
103
- }
104
- else if (char === stringChar) {
105
- inString = false;
106
- }
107
- continue;
108
- }
109
- if (!inString) {
110
- if (char === '{') {
111
- braceCount++;
112
- }
113
- else if (char === '}') {
114
- braceCount--;
115
- if (braceCount === 0) {
116
- return i;
117
- }
118
- }
119
- }
120
- }
121
- return -1;
122
- }
123
- /**
124
- * 程式碼分詞
125
- */
126
- tokenize(code) {
127
- return code
128
- .split(/(\s+|[(){}[\];,.]|\+|\-|\*|\/|=|!|<|>|&|\|)/)
129
- .filter(token => token.trim().length > 0)
130
- .filter(token => !token.startsWith('//') && !token.startsWith('/*'));
131
- }
132
- /**
133
- * 檢測 Type-1 克隆(完全相同)
134
- */
135
- detectType1Clones(fragments) {
136
- const clones = [];
137
- const hashGroups = new Map();
138
- for (const fragment of fragments) {
139
- const hash = this.computeHash(fragment.code);
140
- fragment.hash = hash;
141
- if (!hashGroups.has(hash)) {
142
- hashGroups.set(hash, []);
143
- }
144
- hashGroups.get(hash).push(fragment);
145
- }
146
- for (const group of Array.from(hashGroups.values())) {
147
- if (group.length > 1) {
148
- clones.push({
149
- type: 'type-1',
150
- instances: group,
151
- lines: this.calculateAverageLines(group),
152
- similarity: 1.0,
153
- severity: this.calculateSeverity(group.length, this.calculateAverageLines(group))
154
- });
155
- }
156
- }
157
- return clones;
158
- }
159
- /**
160
- * 檢測 Type-2 克隆(結構相同但變數名不同)
161
- */
162
- detectType2Clones(fragments) {
163
- const clones = [];
164
- const normalizedGroups = new Map();
165
- for (const fragment of fragments) {
166
- const normalized = this.normalizeCode(fragment.code);
167
- const hash = this.computeHash(normalized);
168
- if (!normalizedGroups.has(hash)) {
169
- normalizedGroups.set(hash, []);
170
- }
171
- normalizedGroups.get(hash).push(fragment);
172
- }
173
- for (const group of Array.from(normalizedGroups.values())) {
174
- if (group.length > 1) {
175
- // 過濾掉已經在 Type-1 中的
176
- const uniqueHashes = new Set(group.map(f => f.hash));
177
- if (uniqueHashes.size > 1) {
178
- clones.push({
179
- type: 'type-2',
180
- instances: group,
181
- lines: this.calculateAverageLines(group),
182
- similarity: 0.85,
183
- severity: this.calculateSeverity(group.length, this.calculateAverageLines(group))
184
- });
185
- }
186
- }
187
- }
188
- return clones;
189
- }
190
- /**
191
- * 檢測 Type-3 克隆(結構相似但有修改)
192
- */
193
- detectType3Clones(fragments) {
194
- const clones = [];
195
- for (let i = 0; i < fragments.length; i++) {
196
- for (let j = i + 1; j < fragments.length; j++) {
197
- const similarity = this.calculateSimilarity(fragments[i], fragments[j]);
198
- if (similarity >= 0.7 && similarity < 0.95) {
199
- clones.push({
200
- type: 'type-3',
201
- instances: [fragments[i], fragments[j]],
202
- lines: Math.max(fragments[i].location.endLine - fragments[i].location.startLine + 1, fragments[j].location.endLine - fragments[j].location.startLine + 1),
203
- similarity,
204
- severity: this.calculateSeverity(2, Math.max(fragments[i].location.endLine - fragments[i].location.startLine + 1, fragments[j].location.endLine - fragments[j].location.startLine + 1))
205
- });
206
- }
207
- }
208
- }
209
- return clones;
210
- }
211
- /**
212
- * 計算 hash
213
- */
214
- computeHash(code) {
215
- const normalized = code.replace(/\s+/g, ' ').trim();
216
- return createHash('md5').update(normalized).digest('hex');
217
- }
218
- /**
219
- * 正規化程式碼(移除變數名)
220
- */
221
- normalizeCode(code) {
222
- return code
223
- .replace(/\b[a-z][a-zA-Z0-9]*\b/g, '$VAR$')
224
- .replace(/\b\d+\b/g, '$NUM$')
225
- .replace(/"[^"]*"/g, '$STR$')
226
- .replace(/\s+/g, ' ')
227
- .trim();
228
- }
229
- /**
230
- * 計算相似度
231
- */
232
- calculateSimilarity(frag1, frag2) {
233
- const tokens1 = frag1.tokens;
234
- const tokens2 = frag2.tokens;
235
- if (tokens1.length === 0 || tokens2.length === 0) {
236
- return 0;
237
- }
238
- const set1 = new Set(tokens1);
239
- const set2 = new Set(tokens2);
240
- const intersection = new Set(Array.from(set1).filter(x => set2.has(x)));
241
- const union = new Set([...Array.from(set1), ...Array.from(set2)]);
242
- return intersection.size / union.size;
243
- }
244
- /**
245
- * 計算平均行數
246
- */
247
- calculateAverageLines(fragments) {
248
- const totalLines = fragments.reduce((sum, f) => sum + (f.location.endLine - f.location.startLine + 1), 0);
249
- return Math.round(totalLines / fragments.length);
250
- }
251
- /**
252
- * 計算嚴重性
253
- */
254
- calculateSeverity(instanceCount, lines) {
255
- if (instanceCount >= 5 || lines >= 50) {
256
- return 'high';
257
- }
258
- if (instanceCount >= 3 || lines >= 20) {
259
- return 'medium';
260
- }
261
- return 'low';
262
- }
263
- }
264
- /**
265
- * 預設導出檢測函式
266
- */
267
- export default async function detectDuplication(filePath, code) {
268
- const detector = new DuplicationDetector();
269
- return detector.detect(filePath, code);
270
- }
271
- //# sourceMappingURL=duplication-detector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"duplication-detector.js","sourceRoot":"","sources":["../../../../src/plugins/swift/analyzers/duplication-detector.ts"],"names":[],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- /**
2
- * Swift 錯誤處理檢查器
3
- * 檢測空 catch 區塊、try!、缺少錯誤處理的 async 函式
4
- */
5
- /**
6
- * Swift 錯誤處理檢查器
7
- */
8
- export declare class ErrorHandlingChecker {
9
- /**
10
- * 檢查檔案的錯誤處理問題
11
- */
12
- check(files: string[], fileContents: Map<string, string>): Promise<number>;
13
- /**
14
- * 檢測空 catch 區塊
15
- */
16
- private detectEmptyCatch;
17
- /**
18
- * 檢測缺少錯誤處理的 async 函式
19
- */
20
- private detectMissingErrorHandling;
21
- /**
22
- * 找到配對的右大括號
23
- */
24
- private findMatchingBrace;
25
- /**
26
- * 判斷是否為 Swift 檔案
27
- */
28
- private isSwiftFile;
29
- }
30
- /**
31
- * 預設導出檢查函式
32
- */
33
- export default function checkErrorHandling(files: string[], fileContents: Map<string, string>): Promise<number>;
34
- //# sourceMappingURL=error-handling-checker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"error-handling-checker.d.ts","sourceRoot":"","sources":["../../../../src/plugins/swift/analyzers/error-handling-checker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,qBAAa,oBAAoB;IAC/B;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IA+BhF;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA8BxB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA4BlC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkCzB;;OAEG;IACH,OAAO,CAAC,WAAW;CAGpB;AAED;;GAEG;AACH,wBAA8B,kBAAkB,CAC9C,KAAK,EAAE,MAAM,EAAE,EACf,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,OAAO,CAAC,MAAM,CAAC,CAGjB"}
@@ -1,135 +0,0 @@
1
- /**
2
- * Swift 錯誤處理檢查器
3
- * 檢測空 catch 區塊、try!、缺少錯誤處理的 async 函式
4
- */
5
- /**
6
- * Swift 錯誤處理檢查器
7
- */
8
- export class ErrorHandlingChecker {
9
- /**
10
- * 檢查檔案的錯誤處理問題
11
- */
12
- async check(files, fileContents) {
13
- let totalIssues = 0;
14
- for (const file of files) {
15
- if (!this.isSwiftFile(file)) {
16
- continue;
17
- }
18
- const content = fileContents.get(file);
19
- if (!content) {
20
- continue;
21
- }
22
- // 檢測空 catch 區塊
23
- const emptyCatchCount = this.detectEmptyCatch(content);
24
- totalIssues += emptyCatchCount * 3; // 權重 x3
25
- // 檢測 try! 強制執行
26
- const forceTryMatches = content.match(/\btry!\s+/g);
27
- if (forceTryMatches) {
28
- totalIssues += forceTryMatches.length * 5; // 權重 x5(高風險)
29
- }
30
- // 檢測缺少錯誤處理的 async 函式
31
- const missingErrorHandlingCount = this.detectMissingErrorHandling(content);
32
- totalIssues += missingErrorHandlingCount * 2; // 權重 x2
33
- }
34
- return totalIssues;
35
- }
36
- /**
37
- * 檢測空 catch 區塊
38
- */
39
- detectEmptyCatch(content) {
40
- let count = 0;
41
- // 匹配 catch { } 或 catch { 只有註解 }
42
- const emptyCatchRegex = /catch\s*\{[^}]*\}/g;
43
- let match;
44
- while ((match = emptyCatchRegex.exec(content)) !== null) {
45
- const catchBlock = match[0];
46
- // 提取 catch 區塊內容
47
- const bodyMatch = catchBlock.match(/\{([^}]*)\}/);
48
- if (bodyMatch) {
49
- const body = bodyMatch[1];
50
- // 移除註解
51
- const withoutComments = body
52
- .replace(/\/\/.*$/gm, '') // 單行註解
53
- .replace(/\/\*[\s\S]*?\*\//g, ''); // 多行註解
54
- // 檢查是否只有空白
55
- if (withoutComments.trim().length === 0) {
56
- count++;
57
- }
58
- }
59
- }
60
- return count;
61
- }
62
- /**
63
- * 檢測缺少錯誤處理的 async 函式
64
- */
65
- detectMissingErrorHandling(content) {
66
- let count = 0;
67
- // 匹配 async 函式但沒有 throws
68
- const asyncFuncRegex = /func\s+\w+\s*\([^)]*\)\s+async\s+(?!throws)/g;
69
- const matches = content.match(asyncFuncRegex);
70
- if (matches) {
71
- // 檢查函式內部是否有 try
72
- for (const match of matches) {
73
- const funcStart = content.indexOf(match);
74
- const braceStart = content.indexOf('{', funcStart);
75
- const braceEnd = this.findMatchingBrace(content, braceStart);
76
- if (braceEnd !== -1) {
77
- const funcBody = content.substring(braceStart, braceEnd + 1);
78
- // 如果函式內有 try 但函式簽章沒有 throws,可能是問題
79
- if (/\btry\s+/.test(funcBody) && !/\bdo\s*\{/.test(funcBody)) {
80
- count++;
81
- }
82
- }
83
- }
84
- }
85
- return count;
86
- }
87
- /**
88
- * 找到配對的右大括號
89
- */
90
- findMatchingBrace(content, startPos) {
91
- let braceCount = 1;
92
- let inString = false;
93
- let stringChar = '';
94
- for (let i = startPos + 1; i < content.length; i++) {
95
- const char = content[i];
96
- const prevChar = content[i - 1];
97
- if ((char === '"' || char === '\'') && prevChar !== '\\') {
98
- if (!inString) {
99
- inString = true;
100
- stringChar = char;
101
- }
102
- else if (char === stringChar) {
103
- inString = false;
104
- }
105
- continue;
106
- }
107
- if (!inString) {
108
- if (char === '{') {
109
- braceCount++;
110
- }
111
- else if (char === '}') {
112
- braceCount--;
113
- if (braceCount === 0) {
114
- return i;
115
- }
116
- }
117
- }
118
- }
119
- return -1;
120
- }
121
- /**
122
- * 判斷是否為 Swift 檔案
123
- */
124
- isSwiftFile(file) {
125
- return file.endsWith('.swift');
126
- }
127
- }
128
- /**
129
- * 預設導出檢查函式
130
- */
131
- export default async function checkErrorHandling(files, fileContents) {
132
- const checker = new ErrorHandlingChecker();
133
- return checker.check(files, fileContents);
134
- }
135
- //# sourceMappingURL=error-handling-checker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"error-handling-checker.js","sourceRoot":"","sources":["../../../../src/plugins/swift/analyzers/error-handling-checker.ts"],"names":[],"mappings":"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"}
@@ -1,47 +0,0 @@
1
- /**
2
- * Swift 命名規範檢查器
3
- * 檢測命名規範:Types 用 PascalCase、variables/functions 用 camelCase、Constants 用 camelCase 或 UPPER_CASE
4
- * 禁止底線開頭(除了 private)
5
- */
6
- /**
7
- * Swift 命名規範檢查器
8
- */
9
- export declare class NamingChecker {
10
- /**
11
- * 檢查檔案的命名規範問題
12
- */
13
- check(files: string[], fileContents: Map<string, string>): Promise<number>;
14
- /**
15
- * 檢查檔案命名(Swift 檔案應該是 PascalCase)
16
- */
17
- private checkFileName;
18
- /**
19
- * 檢查程式碼命名規範
20
- */
21
- private checkCodeNaming;
22
- /**
23
- * 檢查 Type 命名(應該是 PascalCase)
24
- */
25
- private checkTypeNaming;
26
- /**
27
- * 檢查變數和函式命名(應該是 camelCase)
28
- */
29
- private checkVariableAndFunctionNaming;
30
- /**
31
- * 檢查底線開頭(非 private 不應該底線開頭)
32
- */
33
- private checkUnderscorePrefix;
34
- /**
35
- * 判斷是否為特殊檔案
36
- */
37
- private isSpecialFile;
38
- /**
39
- * 判斷是否為 Swift 檔案
40
- */
41
- private isSwiftFile;
42
- }
43
- /**
44
- * 預設導出檢查函式
45
- */
46
- export default function checkNaming(files: string[], fileContents: Map<string, string>): Promise<number>;
47
- //# sourceMappingURL=naming-checker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"naming-checker.d.ts","sourceRoot":"","sources":["../../../../src/plugins/swift/analyzers/naming-checker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,qBAAa,aAAa;IACxB;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBhF;;OAEG;IACH,OAAO,CAAC,aAAa;IAkBrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAevB;;OAEG;IACH,OAAO,CAAC,eAAe;IAyBvB;;OAEG;IACH,OAAO,CAAC,8BAA8B;IAiCtC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA2B7B;;OAEG;IACH,OAAO,CAAC,aAAa;IAUrB;;OAEG;IACH,OAAO,CAAC,WAAW;CAGpB;AAED;;GAEG;AACH,wBAA8B,WAAW,CACvC,KAAK,EAAE,MAAM,EAAE,EACf,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,OAAO,CAAC,MAAM,CAAC,CAGjB"}
@@ -1,161 +0,0 @@
1
- /**
2
- * Swift 命名規範檢查器
3
- * 檢測命名規範:Types 用 PascalCase、variables/functions 用 camelCase、Constants 用 camelCase 或 UPPER_CASE
4
- * 禁止底線開頭(除了 private)
5
- */
6
- /**
7
- * Swift 命名規範檢查器
8
- */
9
- export class NamingChecker {
10
- /**
11
- * 檢查檔案的命名規範問題
12
- */
13
- async check(files, fileContents) {
14
- let totalIssues = 0;
15
- for (const file of files) {
16
- if (!this.isSwiftFile(file)) {
17
- continue;
18
- }
19
- // 檢查檔案命名
20
- totalIssues += this.checkFileName(file);
21
- const content = fileContents.get(file);
22
- if (!content) {
23
- continue;
24
- }
25
- // 檢查程式碼命名
26
- totalIssues += this.checkCodeNaming(content);
27
- }
28
- return totalIssues;
29
- }
30
- /**
31
- * 檢查檔案命名(Swift 檔案應該是 PascalCase)
32
- */
33
- checkFileName(file) {
34
- const basename = file.split('/').pop() || '';
35
- const nameWithoutExt = basename.replace('.swift', '');
36
- // 排除特殊檔案
37
- if (this.isSpecialFile(basename)) {
38
- return 0;
39
- }
40
- // Swift 檔案名應該是 PascalCase
41
- const isPascalCase = /^[A-Z][a-zA-Z0-9]*$/.test(nameWithoutExt);
42
- if (!isPascalCase) {
43
- return 1.5; // 權重 1.5
44
- }
45
- return 0;
46
- }
47
- /**
48
- * 檢查程式碼命名規範
49
- */
50
- checkCodeNaming(content) {
51
- let count = 0;
52
- // 檢查 Type 命名(class, struct, protocol, enum)
53
- count += this.checkTypeNaming(content);
54
- // 檢查變數和函式命名
55
- count += this.checkVariableAndFunctionNaming(content);
56
- // 檢查底線開頭(非 private)
57
- count += this.checkUnderscorePrefix(content);
58
- return count;
59
- }
60
- /**
61
- * 檢查 Type 命名(應該是 PascalCase)
62
- */
63
- checkTypeNaming(content) {
64
- let count = 0;
65
- const typePatterns = [
66
- /class\s+([a-zA-Z_][a-zA-Z0-9_]*)/g,
67
- /struct\s+([a-zA-Z_][a-zA-Z0-9_]*)/g,
68
- /protocol\s+([a-zA-Z_][a-zA-Z0-9_]*)/g,
69
- /enum\s+([a-zA-Z_][a-zA-Z0-9_]*)/g
70
- ];
71
- for (const pattern of typePatterns) {
72
- let match;
73
- while ((match = pattern.exec(content)) !== null) {
74
- const typeName = match[1];
75
- // 檢查是否為 PascalCase
76
- if (!/^[A-Z][a-zA-Z0-9]*$/.test(typeName)) {
77
- count++;
78
- }
79
- }
80
- }
81
- return count;
82
- }
83
- /**
84
- * 檢查變數和函式命名(應該是 camelCase)
85
- */
86
- checkVariableAndFunctionNaming(content) {
87
- let count = 0;
88
- // 函式命名
89
- const funcRegex = /func\s+([a-zA-Z_][a-zA-Z0-9_]*)/g;
90
- let match;
91
- while ((match = funcRegex.exec(content)) !== null) {
92
- const funcName = match[1];
93
- // 檢查是否為 camelCase(首字母小寫)
94
- if (!/^[a-z][a-zA-Z0-9]*$/.test(funcName)) {
95
- count++;
96
- }
97
- }
98
- // 變數命名(let、var)
99
- const varRegex = /(let|var)\s+([a-zA-Z_][a-zA-Z0-9_]*)/g;
100
- while ((match = varRegex.exec(content)) !== null) {
101
- const varName = match[2];
102
- // 允許 UPPER_CASE 常數
103
- const isUpperCase = /^[A-Z][A-Z0-9_]*$/.test(varName);
104
- const isCamelCase = /^[a-z][a-zA-Z0-9]*$/.test(varName);
105
- if (!isUpperCase && !isCamelCase) {
106
- count++;
107
- }
108
- }
109
- return count;
110
- }
111
- /**
112
- * 檢查底線開頭(非 private 不應該底線開頭)
113
- */
114
- checkUnderscorePrefix(content) {
115
- let count = 0;
116
- const lines = content.split('\n');
117
- for (const line of lines) {
118
- // 跳過 private 宣告(允許底線開頭)
119
- if (/\bprivate\b/.test(line)) {
120
- continue;
121
- }
122
- // 檢測底線開頭的變數或函式
123
- const underscorePatterns = [
124
- /(let|var)\s+_[a-zA-Z]/g,
125
- /func\s+_[a-zA-Z]/g
126
- ];
127
- for (const pattern of underscorePatterns) {
128
- const matches = line.match(pattern);
129
- if (matches) {
130
- count += matches.length * 2; // 權重 x2
131
- }
132
- }
133
- }
134
- return count;
135
- }
136
- /**
137
- * 判斷是否為特殊檔案
138
- */
139
- isSpecialFile(filename) {
140
- const specialFiles = [
141
- 'Package.swift',
142
- 'README.md',
143
- 'LICENSE'
144
- ];
145
- return specialFiles.includes(filename);
146
- }
147
- /**
148
- * 判斷是否為 Swift 檔案
149
- */
150
- isSwiftFile(file) {
151
- return file.endsWith('.swift');
152
- }
153
- }
154
- /**
155
- * 預設導出檢查函式
156
- */
157
- export default async function checkNaming(files, fileContents) {
158
- const checker = new NamingChecker();
159
- return checker.check(files, fileContents);
160
- }
161
- //# sourceMappingURL=naming-checker.js.map