agent-ide 0.9.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. package/README.md +11 -11
  2. package/dist/core/call-hierarchy/call-hierarchy-analyzer.d.ts +1 -8
  3. package/dist/core/call-hierarchy/call-hierarchy-analyzer.d.ts.map +1 -1
  4. package/dist/core/call-hierarchy/call-hierarchy-analyzer.js +9 -25
  5. package/dist/core/call-hierarchy/call-hierarchy-analyzer.js.map +1 -1
  6. package/dist/core/change-signature/call-site-updater.d.ts +5 -7
  7. package/dist/core/change-signature/call-site-updater.d.ts.map +1 -1
  8. package/dist/core/change-signature/call-site-updater.js +7 -16
  9. package/dist/core/change-signature/call-site-updater.js.map +1 -1
  10. package/dist/core/change-signature/change-signature-service.d.ts +1 -8
  11. package/dist/core/change-signature/change-signature-service.d.ts.map +1 -1
  12. package/dist/core/change-signature/change-signature-service.js +11 -29
  13. package/dist/core/change-signature/change-signature-service.js.map +1 -1
  14. package/dist/core/change-signature/signature-parser.d.ts +1 -8
  15. package/dist/core/change-signature/signature-parser.d.ts.map +1 -1
  16. package/dist/core/change-signature/signature-parser.js +7 -23
  17. package/dist/core/change-signature/signature-parser.js.map +1 -1
  18. package/dist/core/cycles/cycle-detector.d.ts +1 -1
  19. package/dist/core/cycles/cycle-detector.d.ts.map +1 -1
  20. package/dist/core/deadcode/dead-code-detector.d.ts +2 -13
  21. package/dist/core/deadcode/dead-code-detector.d.ts.map +1 -1
  22. package/dist/core/deadcode/dead-code-detector.js +6 -29
  23. package/dist/core/deadcode/dead-code-detector.js.map +1 -1
  24. package/dist/core/deadcode/import-cleaner.js +1 -1
  25. package/dist/core/deadcode/import-cleaner.js.map +1 -1
  26. package/dist/core/deadcode/import-parser.d.ts +0 -4
  27. package/dist/core/deadcode/import-parser.d.ts.map +1 -1
  28. package/dist/core/deadcode/import-parser.js +4 -10
  29. package/dist/core/deadcode/import-parser.js.map +1 -1
  30. package/dist/core/deadcode/range-expander.d.ts +0 -4
  31. package/dist/core/deadcode/range-expander.d.ts.map +1 -1
  32. package/dist/core/deadcode/range-expander.js +14 -10
  33. package/dist/core/deadcode/range-expander.js.map +1 -1
  34. package/dist/core/find-references/index.d.ts +3 -3
  35. package/dist/core/find-references/index.d.ts.map +1 -1
  36. package/dist/core/find-references/index.js +2 -2
  37. package/dist/core/find-references/index.js.map +1 -1
  38. package/dist/core/foundations/dependency-graph/dependency-graph.d.ts.map +1 -0
  39. package/dist/core/foundations/dependency-graph/dependency-graph.js.map +1 -0
  40. package/dist/core/foundations/dependency-graph/index.d.ts.map +1 -0
  41. package/dist/core/foundations/dependency-graph/index.js.map +1 -0
  42. package/dist/core/foundations/dependency-graph/types.d.ts.map +1 -0
  43. package/dist/core/foundations/dependency-graph/types.js.map +1 -0
  44. package/dist/core/foundations/file-utils.d.ts +50 -0
  45. package/dist/core/foundations/file-utils.d.ts.map +1 -0
  46. package/dist/core/foundations/file-utils.js +75 -0
  47. package/dist/core/foundations/file-utils.js.map +1 -0
  48. package/dist/core/foundations/index.d.ts +13 -0
  49. package/dist/core/foundations/index.d.ts.map +1 -0
  50. package/dist/core/foundations/index.js +17 -0
  51. package/dist/core/foundations/index.js.map +1 -0
  52. package/dist/core/foundations/indexing/file-index.d.ts.map +1 -0
  53. package/dist/core/foundations/indexing/file-index.js.map +1 -0
  54. package/dist/core/foundations/indexing/index-engine.d.ts.map +1 -0
  55. package/dist/core/foundations/indexing/index-engine.js.map +1 -0
  56. package/dist/core/foundations/indexing/index.d.ts.map +1 -0
  57. package/dist/core/foundations/indexing/index.js.map +1 -0
  58. package/dist/core/foundations/indexing/symbol-index.d.ts.map +1 -0
  59. package/dist/core/foundations/indexing/symbol-index.js.map +1 -0
  60. package/dist/core/{shared → foundations}/indexing/types.d.ts +1 -1
  61. package/dist/core/foundations/indexing/types.d.ts.map +1 -0
  62. package/dist/core/{shared → foundations}/indexing/types.js +11 -1
  63. package/dist/core/foundations/indexing/types.js.map +1 -0
  64. package/dist/core/foundations/symbol-finder/call-site-parser.d.ts.map +1 -0
  65. package/dist/core/foundations/symbol-finder/call-site-parser.js.map +1 -0
  66. package/dist/core/foundations/symbol-finder/index.d.ts.map +1 -0
  67. package/dist/core/foundations/symbol-finder/index.js.map +1 -0
  68. package/dist/core/{shared → foundations}/symbol-finder/symbol-finder.d.ts +24 -10
  69. package/dist/core/foundations/symbol-finder/symbol-finder.d.ts.map +1 -0
  70. package/dist/core/{shared → foundations}/symbol-finder/symbol-finder.js +118 -148
  71. package/dist/core/foundations/symbol-finder/symbol-finder.js.map +1 -0
  72. package/dist/core/foundations/symbol-finder/text-matcher.d.ts.map +1 -0
  73. package/dist/core/foundations/symbol-finder/text-matcher.js.map +1 -0
  74. package/dist/core/foundations/symbol-finder/types.d.ts.map +1 -0
  75. package/dist/core/foundations/symbol-finder/types.js.map +1 -0
  76. package/dist/core/impact/impact-analyzer.d.ts +1 -1
  77. package/dist/core/impact/impact-analyzer.d.ts.map +1 -1
  78. package/dist/core/impact/impact-analyzer.js +1 -1
  79. package/dist/core/impact/impact-analyzer.js.map +1 -1
  80. package/dist/core/move-member/extractors/index.d.ts +7 -0
  81. package/dist/core/move-member/extractors/index.d.ts.map +1 -0
  82. package/dist/core/move-member/extractors/index.js +9 -0
  83. package/dist/core/move-member/extractors/index.js.map +1 -0
  84. package/dist/core/move-member/extractors/javascript-extractor.d.ts +29 -0
  85. package/dist/core/move-member/extractors/javascript-extractor.d.ts.map +1 -0
  86. package/dist/core/move-member/extractors/javascript-extractor.js +33 -0
  87. package/dist/core/move-member/extractors/javascript-extractor.js.map +1 -0
  88. package/dist/core/move-member/extractors/typescript-extractor.d.ts +40 -0
  89. package/dist/core/move-member/extractors/typescript-extractor.d.ts.map +1 -0
  90. package/dist/core/move-member/extractors/typescript-extractor.js +286 -0
  91. package/dist/core/move-member/extractors/typescript-extractor.js.map +1 -0
  92. package/dist/core/move-member/member-extractor.d.ts +12 -62
  93. package/dist/core/move-member/member-extractor.d.ts.map +1 -1
  94. package/dist/core/move-member/member-extractor.js +23 -391
  95. package/dist/core/move-member/member-extractor.js.map +1 -1
  96. package/dist/core/move-member/reference-updater.d.ts.map +1 -1
  97. package/dist/core/move-member/reference-updater.js +3 -1
  98. package/dist/core/move-member/reference-updater.js.map +1 -1
  99. package/dist/core/move-member/utils/range-finder.d.ts +40 -0
  100. package/dist/core/move-member/utils/range-finder.d.ts.map +1 -0
  101. package/dist/core/move-member/utils/range-finder.js +101 -0
  102. package/dist/core/move-member/utils/range-finder.js.map +1 -0
  103. package/dist/core/rename/reference-updater.d.ts +5 -0
  104. package/dist/core/rename/reference-updater.d.ts.map +1 -1
  105. package/dist/core/rename/reference-updater.js +17 -4
  106. package/dist/core/rename/reference-updater.js.map +1 -1
  107. package/dist/core/rename/types.d.ts.map +1 -1
  108. package/dist/core/snapshot/snapshot-generator.d.ts +0 -29
  109. package/dist/core/snapshot/snapshot-generator.d.ts.map +1 -1
  110. package/dist/core/snapshot/snapshot-generator.js +6 -183
  111. package/dist/core/snapshot/snapshot-generator.js.map +1 -1
  112. package/dist/core/snapshot/utils/bracket-balancer.d.ts +27 -0
  113. package/dist/core/snapshot/utils/bracket-balancer.d.ts.map +1 -0
  114. package/dist/core/snapshot/utils/bracket-balancer.js +70 -0
  115. package/dist/core/snapshot/utils/bracket-balancer.js.map +1 -0
  116. package/dist/core/snapshot/utils/factory-pattern-detector.d.ts +22 -0
  117. package/dist/core/snapshot/utils/factory-pattern-detector.d.ts.map +1 -0
  118. package/dist/core/snapshot/utils/factory-pattern-detector.js +70 -0
  119. package/dist/core/snapshot/utils/factory-pattern-detector.js.map +1 -0
  120. package/dist/core/snapshot/utils/index.d.ts +7 -0
  121. package/dist/core/snapshot/utils/index.d.ts.map +1 -0
  122. package/dist/core/snapshot/utils/index.js +7 -0
  123. package/dist/core/snapshot/utils/index.js.map +1 -0
  124. package/dist/core/snapshot/utils/symbol-formatter.d.ts +37 -0
  125. package/dist/core/snapshot/utils/symbol-formatter.d.ts.map +1 -0
  126. package/dist/core/snapshot/utils/symbol-formatter.js +89 -0
  127. package/dist/core/snapshot/utils/symbol-formatter.js.map +1 -0
  128. package/dist/infrastructure/formatters/query-formatter.d.ts +8 -62
  129. package/dist/infrastructure/formatters/query-formatter.d.ts.map +1 -1
  130. package/dist/infrastructure/formatters/query-formatter.js +29 -438
  131. package/dist/infrastructure/formatters/query-formatter.js.map +1 -1
  132. package/dist/infrastructure/formatters/strategies/analyze-formatter.d.ts +24 -0
  133. package/dist/infrastructure/formatters/strategies/analyze-formatter.d.ts.map +1 -0
  134. package/dist/infrastructure/formatters/strategies/analyze-formatter.js +107 -0
  135. package/dist/infrastructure/formatters/strategies/analyze-formatter.js.map +1 -0
  136. package/dist/infrastructure/formatters/strategies/base-formatter.d.ts +67 -0
  137. package/dist/infrastructure/formatters/strategies/base-formatter.d.ts.map +1 -0
  138. package/dist/infrastructure/formatters/strategies/base-formatter.js +75 -0
  139. package/dist/infrastructure/formatters/strategies/base-formatter.js.map +1 -0
  140. package/dist/infrastructure/formatters/strategies/call-hierarchy-formatter.d.ts +19 -0
  141. package/dist/infrastructure/formatters/strategies/call-hierarchy-formatter.d.ts.map +1 -0
  142. package/dist/infrastructure/formatters/strategies/call-hierarchy-formatter.js +77 -0
  143. package/dist/infrastructure/formatters/strategies/call-hierarchy-formatter.js.map +1 -0
  144. package/dist/infrastructure/formatters/strategies/deps-formatter.d.ts +15 -0
  145. package/dist/infrastructure/formatters/strategies/deps-formatter.d.ts.map +1 -0
  146. package/dist/infrastructure/formatters/strategies/deps-formatter.js +47 -0
  147. package/dist/infrastructure/formatters/strategies/deps-formatter.js.map +1 -0
  148. package/dist/infrastructure/formatters/strategies/find-references-formatter.d.ts +23 -0
  149. package/dist/infrastructure/formatters/strategies/find-references-formatter.d.ts.map +1 -0
  150. package/dist/infrastructure/formatters/strategies/find-references-formatter.js +71 -0
  151. package/dist/infrastructure/formatters/strategies/find-references-formatter.js.map +1 -0
  152. package/dist/infrastructure/formatters/strategies/index.d.ts +11 -0
  153. package/dist/infrastructure/formatters/strategies/index.d.ts.map +1 -0
  154. package/dist/infrastructure/formatters/strategies/index.js +11 -0
  155. package/dist/infrastructure/formatters/strategies/index.js.map +1 -0
  156. package/dist/infrastructure/formatters/strategies/search-formatter.d.ts +15 -0
  157. package/dist/infrastructure/formatters/strategies/search-formatter.d.ts.map +1 -0
  158. package/dist/infrastructure/formatters/strategies/search-formatter.js +32 -0
  159. package/dist/infrastructure/formatters/strategies/search-formatter.js.map +1 -0
  160. package/dist/infrastructure/formatters/strategies/snapshot-formatter.d.ts +20 -0
  161. package/dist/infrastructure/formatters/strategies/snapshot-formatter.d.ts.map +1 -0
  162. package/dist/infrastructure/formatters/strategies/snapshot-formatter.js +101 -0
  163. package/dist/infrastructure/formatters/strategies/snapshot-formatter.js.map +1 -0
  164. package/dist/infrastructure/parser/registry.js.map +1 -1
  165. package/dist/interfaces/cli/commands/call-hierarchy.command.js +1 -1
  166. package/dist/interfaces/cli/commands/call-hierarchy.command.js.map +1 -1
  167. package/dist/interfaces/cli/commands/change-signature.command.js +3 -2
  168. package/dist/interfaces/cli/commands/change-signature.command.js.map +1 -1
  169. package/dist/interfaces/cli/commands/deadcode.command.js +1 -1
  170. package/dist/interfaces/cli/commands/deadcode.command.js.map +1 -1
  171. package/dist/interfaces/cli/commands/find-references.command.js +2 -2
  172. package/dist/interfaces/cli/commands/find-references.command.js.map +1 -1
  173. package/dist/interfaces/cli/commands/rename.command.js +2 -2
  174. package/dist/interfaces/cli/commands/rename.command.js.map +1 -1
  175. package/dist/interfaces/cli/preview-output-handler.d.ts.map +1 -1
  176. package/dist/interfaces/cli/preview-output-handler.js.map +1 -1
  177. package/dist/interfaces/cli/unified-output-handler.d.ts.map +1 -1
  178. package/dist/interfaces/cli/unified-output-handler.js.map +1 -1
  179. package/dist/plugins/javascript/parser.d.ts +0 -2
  180. package/dist/plugins/javascript/parser.d.ts.map +1 -1
  181. package/dist/plugins/javascript/parser.js +3 -19
  182. package/dist/plugins/javascript/parser.js.map +1 -1
  183. package/dist/plugins/javascript/types.d.ts.map +1 -1
  184. package/dist/plugins/javascript/types.js.map +1 -1
  185. package/dist/plugins/shared/index.d.ts +1 -0
  186. package/dist/plugins/shared/index.d.ts.map +1 -1
  187. package/dist/plugins/shared/index.js +2 -0
  188. package/dist/plugins/shared/index.js.map +1 -1
  189. package/dist/plugins/shared/utils/async.d.ts.map +1 -1
  190. package/dist/plugins/shared/utils/async.js.map +1 -1
  191. package/dist/plugins/shared/utils/object.js +5 -5
  192. package/dist/plugins/shared/utils/object.js.map +1 -1
  193. package/dist/plugins/shared/validators.d.ts +15 -0
  194. package/dist/plugins/shared/validators.d.ts.map +1 -0
  195. package/dist/plugins/shared/validators.js +29 -0
  196. package/dist/plugins/shared/validators.js.map +1 -0
  197. package/dist/plugins/typescript/dependency-analyzer.d.ts.map +1 -1
  198. package/dist/plugins/typescript/dependency-analyzer.js.map +1 -1
  199. package/dist/plugins/typescript/parser.d.ts +0 -2
  200. package/dist/plugins/typescript/parser.d.ts.map +1 -1
  201. package/dist/plugins/typescript/parser.js +3 -19
  202. package/dist/plugins/typescript/parser.js.map +1 -1
  203. package/dist/plugins/typescript/symbol-extractor.d.ts.map +1 -1
  204. package/dist/plugins/typescript/symbol-extractor.js.map +1 -1
  205. package/dist/plugins/typescript/types.d.ts.map +1 -1
  206. package/dist/plugins/typescript/types.js.map +1 -1
  207. package/package.json +1 -1
  208. package/dist/core/shared/dependency-graph/dependency-graph.d.ts.map +0 -1
  209. package/dist/core/shared/dependency-graph/dependency-graph.js.map +0 -1
  210. package/dist/core/shared/dependency-graph/index.d.ts.map +0 -1
  211. package/dist/core/shared/dependency-graph/index.js.map +0 -1
  212. package/dist/core/shared/dependency-graph/types.d.ts.map +0 -1
  213. package/dist/core/shared/dependency-graph/types.js.map +0 -1
  214. package/dist/core/shared/index.d.ts +0 -8
  215. package/dist/core/shared/index.d.ts.map +0 -1
  216. package/dist/core/shared/index.js +0 -11
  217. package/dist/core/shared/index.js.map +0 -1
  218. package/dist/core/shared/indexing/file-index.d.ts.map +0 -1
  219. package/dist/core/shared/indexing/file-index.js.map +0 -1
  220. package/dist/core/shared/indexing/index-engine.d.ts.map +0 -1
  221. package/dist/core/shared/indexing/index-engine.js.map +0 -1
  222. package/dist/core/shared/indexing/index.d.ts.map +0 -1
  223. package/dist/core/shared/indexing/index.js.map +0 -1
  224. package/dist/core/shared/indexing/symbol-index.d.ts.map +0 -1
  225. package/dist/core/shared/indexing/symbol-index.js.map +0 -1
  226. package/dist/core/shared/indexing/types.d.ts.map +0 -1
  227. package/dist/core/shared/indexing/types.js.map +0 -1
  228. package/dist/core/shared/symbol-finder/call-site-parser.d.ts.map +0 -1
  229. package/dist/core/shared/symbol-finder/call-site-parser.js.map +0 -1
  230. package/dist/core/shared/symbol-finder/index.d.ts.map +0 -1
  231. package/dist/core/shared/symbol-finder/index.js.map +0 -1
  232. package/dist/core/shared/symbol-finder/symbol-finder.d.ts.map +0 -1
  233. package/dist/core/shared/symbol-finder/symbol-finder.js.map +0 -1
  234. package/dist/core/shared/symbol-finder/text-matcher.d.ts.map +0 -1
  235. package/dist/core/shared/symbol-finder/text-matcher.js.map +0 -1
  236. package/dist/core/shared/symbol-finder/types.d.ts.map +0 -1
  237. package/dist/core/shared/symbol-finder/types.js.map +0 -1
  238. /package/dist/core/{shared → foundations}/dependency-graph/dependency-graph.d.ts +0 -0
  239. /package/dist/core/{shared → foundations}/dependency-graph/dependency-graph.js +0 -0
  240. /package/dist/core/{shared → foundations}/dependency-graph/index.d.ts +0 -0
  241. /package/dist/core/{shared → foundations}/dependency-graph/index.js +0 -0
  242. /package/dist/core/{shared → foundations}/dependency-graph/types.d.ts +0 -0
  243. /package/dist/core/{shared → foundations}/dependency-graph/types.js +0 -0
  244. /package/dist/core/{shared → foundations}/indexing/file-index.d.ts +0 -0
  245. /package/dist/core/{shared → foundations}/indexing/file-index.js +0 -0
  246. /package/dist/core/{shared → foundations}/indexing/index-engine.d.ts +0 -0
  247. /package/dist/core/{shared → foundations}/indexing/index-engine.js +0 -0
  248. /package/dist/core/{shared → foundations}/indexing/index.d.ts +0 -0
  249. /package/dist/core/{shared → foundations}/indexing/index.js +0 -0
  250. /package/dist/core/{shared → foundations}/indexing/symbol-index.d.ts +0 -0
  251. /package/dist/core/{shared → foundations}/indexing/symbol-index.js +0 -0
  252. /package/dist/core/{shared → foundations}/symbol-finder/call-site-parser.d.ts +0 -0
  253. /package/dist/core/{shared → foundations}/symbol-finder/call-site-parser.js +0 -0
  254. /package/dist/core/{shared → foundations}/symbol-finder/index.d.ts +0 -0
  255. /package/dist/core/{shared → foundations}/symbol-finder/index.js +0 -0
  256. /package/dist/core/{shared → foundations}/symbol-finder/text-matcher.d.ts +0 -0
  257. /package/dist/core/{shared → foundations}/symbol-finder/text-matcher.js +0 -0
  258. /package/dist/core/{shared → foundations}/symbol-finder/types.d.ts +0 -0
  259. /package/dist/core/{shared → foundations}/symbol-finder/types.js +0 -0
@@ -0,0 +1,286 @@
1
+ /**
2
+ * TypeScript Member Extractor
3
+ * 提取 TypeScript/TSX 檔案中的成員定義
4
+ */
5
+ import { MemberType } from '../types.js';
6
+ import { findBlockEnd, findBlockEndInClass, findTypeAliasEnd, findStatementEnd } from '../utils/range-finder.js';
7
+ /** 程式語言關鍵字集合 */
8
+ const KEYWORDS = new Set([
9
+ 'if', 'else', 'while', 'for', 'switch', 'case', 'break', 'continue',
10
+ 'function', 'async', 'await', 'return', 'new', 'typeof', 'instanceof',
11
+ 'const', 'let', 'var', 'class', 'interface', 'type', 'enum', 'export',
12
+ 'import', 'from', 'default', 'true', 'false', 'null', 'undefined',
13
+ 'this', 'super', 'extends', 'implements', 'static', 'readonly', 'private',
14
+ 'public', 'protected', 'abstract', 'get', 'set', 'in', 'of', 'as', 'is'
15
+ ]);
16
+ /** 基本型別集合 */
17
+ const BASIC_TYPES = new Set([
18
+ 'string', 'number', 'boolean', 'void', 'any', 'unknown', 'never',
19
+ 'null', 'undefined', 'object', 'symbol', 'bigint', 'Array', 'Object',
20
+ 'String', 'Number', 'Boolean', 'Function', 'Promise', 'Map', 'Set'
21
+ ]);
22
+ /**
23
+ * 提取 TypeScript 成員
24
+ *
25
+ * @param content 檔案內容
26
+ * @param filePath 檔案路徑
27
+ * @param memberName 成員名稱
28
+ * @param memberType 成員類型(可選)
29
+ * @param className 所屬類別(可選)
30
+ * @returns 找到的成員定義,或 null
31
+ */
32
+ export function extractTypeScriptMember(content, filePath, memberName, memberType, className) {
33
+ const members = listTypeScriptMembers(content, filePath, className);
34
+ return members.find(m => {
35
+ const nameMatch = m.name === memberName;
36
+ const typeMatch = !memberType || m.type === memberType;
37
+ const classMatch = !className || m.className === className;
38
+ return nameMatch && typeMatch && classMatch;
39
+ }) || null;
40
+ }
41
+ /**
42
+ * 列出 TypeScript 成員
43
+ *
44
+ * @param content 檔案內容
45
+ * @param filePath 檔案路徑
46
+ * @param filterClassName 篩選特定類別的成員(可選)
47
+ * @returns 成員定義陣列
48
+ */
49
+ export function listTypeScriptMembers(content, filePath, filterClassName) {
50
+ const members = [];
51
+ const lines = content.split('\n');
52
+ let match;
53
+ // 函式定義
54
+ const functionPattern = /^(\s*)(export\s+)?(async\s+)?function\s+(\w+)/gm;
55
+ while ((match = functionPattern.exec(content)) !== null) {
56
+ const lineNumber = content.substring(0, match.index).split('\n').length;
57
+ const endLine = findBlockEnd(lines, lineNumber - 1);
58
+ const sourceCode = lines.slice(lineNumber - 1, endLine + 1).join('\n');
59
+ members.push(createMember(match[4], MemberType.Function, filePath, lineNumber, endLine + 1, sourceCode, undefined, extractModifiers(match[0]), extractDocumentation(lines, lineNumber - 1), extractDependencies(sourceCode)));
60
+ }
61
+ // 類別定義
62
+ const classPattern = /^(\s*)(export\s+)?(abstract\s+)?class\s+(\w+)/gm;
63
+ while ((match = classPattern.exec(content)) !== null) {
64
+ const lineNumber = content.substring(0, match.index).split('\n').length;
65
+ const endLine = findBlockEnd(lines, lineNumber - 1);
66
+ const sourceCode = lines.slice(lineNumber - 1, endLine + 1).join('\n');
67
+ members.push(createMember(match[4], MemberType.Class, filePath, lineNumber, endLine + 1, sourceCode, undefined, extractModifiers(match[0]), extractDocumentation(lines, lineNumber - 1), extractDependencies(sourceCode)));
68
+ // 如果是特定類別,提取其成員
69
+ if (!filterClassName || match[4] === filterClassName) {
70
+ const classMembers = extractClassMembers(sourceCode, filePath, match[4], lineNumber);
71
+ members.push(...classMembers);
72
+ }
73
+ }
74
+ // 介面定義
75
+ const interfacePattern = /^(\s*)(export\s+)?interface\s+(\w+)/gm;
76
+ while ((match = interfacePattern.exec(content)) !== null) {
77
+ const lineNumber = content.substring(0, match.index).split('\n').length;
78
+ const endLine = findBlockEnd(lines, lineNumber - 1);
79
+ const sourceCode = lines.slice(lineNumber - 1, endLine + 1).join('\n');
80
+ members.push(createMember(match[3], MemberType.Interface, filePath, lineNumber, endLine + 1, sourceCode, undefined, extractModifiers(match[0]), extractDocumentation(lines, lineNumber - 1), extractDependencies(sourceCode)));
81
+ }
82
+ // 類型別名
83
+ const typePattern = /^(\s*)(export\s+)?type\s+(\w+)/gm;
84
+ while ((match = typePattern.exec(content)) !== null) {
85
+ const lineNumber = content.substring(0, match.index).split('\n').length;
86
+ const endLine = findTypeAliasEnd(lines, lineNumber - 1);
87
+ const sourceCode = lines.slice(lineNumber - 1, endLine + 1).join('\n');
88
+ members.push(createMember(match[3], MemberType.TypeAlias, filePath, lineNumber, endLine + 1, sourceCode, undefined, extractModifiers(match[0]), extractDocumentation(lines, lineNumber - 1), extractDependencies(sourceCode)));
89
+ }
90
+ // 常數
91
+ const constPattern = /^(\s*)(export\s+)?const\s+(\w+)/gm;
92
+ while ((match = constPattern.exec(content)) !== null) {
93
+ const lineNumber = content.substring(0, match.index).split('\n').length;
94
+ const endLine = findStatementEnd(lines, lineNumber - 1);
95
+ const sourceCode = lines.slice(lineNumber - 1, endLine + 1).join('\n');
96
+ members.push(createMember(match[3], MemberType.Constant, filePath, lineNumber, endLine + 1, sourceCode, undefined, extractModifiers(match[0]), extractDocumentation(lines, lineNumber - 1), extractDependencies(sourceCode)));
97
+ }
98
+ // 列舉
99
+ const enumPattern = /^(\s*)(export\s+)?enum\s+(\w+)/gm;
100
+ while ((match = enumPattern.exec(content)) !== null) {
101
+ const lineNumber = content.substring(0, match.index).split('\n').length;
102
+ const endLine = findBlockEnd(lines, lineNumber - 1);
103
+ const sourceCode = lines.slice(lineNumber - 1, endLine + 1).join('\n');
104
+ members.push(createMember(match[3], MemberType.Enum, filePath, lineNumber, endLine + 1, sourceCode, undefined, extractModifiers(match[0]), extractDocumentation(lines, lineNumber - 1), extractDependencies(sourceCode)));
105
+ }
106
+ // 若指定了類別篩選,只返回該類別的成員
107
+ if (filterClassName) {
108
+ return members.filter(m => m.className === filterClassName || m.name === filterClassName);
109
+ }
110
+ return members;
111
+ }
112
+ /**
113
+ * 提取類別成員
114
+ *
115
+ * @param classSource 類別原始碼
116
+ * @param filePath 檔案路徑
117
+ * @param className 類別名稱
118
+ * @param classStartLine 類別起始行號(1-based)
119
+ * @returns 類別成員定義陣列
120
+ */
121
+ export function extractClassMembers(classSource, filePath, className, classStartLine) {
122
+ const members = [];
123
+ // 跳過類別宣告行,只提取類別內部的成員
124
+ const firstBraceIndex = classSource.indexOf('{');
125
+ if (firstBraceIndex === -1) {
126
+ return members;
127
+ }
128
+ const classBody = classSource.substring(firstBraceIndex + 1);
129
+ const bodyStartLine = classSource.substring(0, firstBraceIndex).split('\n').length;
130
+ // 類別內部的 lines(從 { 之後開始)
131
+ const bodyLines = classBody.split('\n');
132
+ let match;
133
+ // 方法
134
+ const methodPattern = /^\s*(public|private|protected)?\s*(static)?\s*(async)?\s*(\w+)\s*\([^)]*\)/gm;
135
+ while ((match = methodPattern.exec(classBody)) !== null) {
136
+ // 跳過 constructor
137
+ if (match[4] === 'constructor') {
138
+ continue;
139
+ }
140
+ const relativeLineNumber = classBody.substring(0, match.index).split('\n').length;
141
+ const lineNumber = classStartLine + bodyStartLine - 1 + relativeLineNumber - 1;
142
+ const endLine = findBlockEndInClass(bodyLines, relativeLineNumber - 1);
143
+ const sourceCode = bodyLines.slice(relativeLineNumber - 1, endLine + 1).join('\n');
144
+ members.push(createMember(match[4], MemberType.Method, filePath, lineNumber, classStartLine + bodyStartLine - 1 + endLine, sourceCode, className, extractModifiers(match[0]), extractDocumentation(bodyLines, relativeLineNumber - 1), extractDependencies(sourceCode)));
145
+ }
146
+ // 屬性
147
+ const propertyPattern = /^\s*(public|private|protected)?\s*(static)?\s*(readonly)?\s*(\w+)\s*[?:]?\s*[^(]/gm;
148
+ while ((match = propertyPattern.exec(classBody)) !== null) {
149
+ // 跳過方法和 constructor
150
+ if (classBody.substring(match.index).match(/^\s*\w+\s*\(/)) {
151
+ continue;
152
+ }
153
+ const relativeLineNumber = classBody.substring(0, match.index).split('\n').length;
154
+ const lineNumber = classStartLine + bodyStartLine - 1 + relativeLineNumber - 1;
155
+ const endLine = findStatementEnd(bodyLines, relativeLineNumber - 1);
156
+ const sourceCode = bodyLines.slice(relativeLineNumber - 1, endLine + 1).join('\n');
157
+ members.push(createMember(match[4], MemberType.Property, filePath, lineNumber, classStartLine + bodyStartLine - 1 + endLine, sourceCode, className, extractModifiers(match[0]), extractDocumentation(bodyLines, relativeLineNumber - 1), extractDependencies(sourceCode)));
158
+ }
159
+ return members;
160
+ }
161
+ /**
162
+ * 建立成員定義
163
+ */
164
+ function createMember(name, type, filePath, startLine, endLine, sourceCode, className, modifiers, documentation, dependencies) {
165
+ return {
166
+ name,
167
+ type,
168
+ location: {
169
+ filePath,
170
+ range: {
171
+ start: { line: startLine, column: 1 },
172
+ end: { line: endLine, column: 1 }
173
+ }
174
+ },
175
+ sourceCode,
176
+ className,
177
+ modifiers,
178
+ documentation,
179
+ dependencies
180
+ };
181
+ }
182
+ /**
183
+ * 提取修飾符
184
+ */
185
+ function extractModifiers(declaration) {
186
+ const modifiers = [];
187
+ if (declaration.includes('export')) {
188
+ modifiers.push('export');
189
+ }
190
+ if (declaration.includes('async')) {
191
+ modifiers.push('async');
192
+ }
193
+ if (declaration.includes('static')) {
194
+ modifiers.push('static');
195
+ }
196
+ if (declaration.includes('public')) {
197
+ modifiers.push('public');
198
+ }
199
+ if (declaration.includes('private')) {
200
+ modifiers.push('private');
201
+ }
202
+ if (declaration.includes('protected')) {
203
+ modifiers.push('protected');
204
+ }
205
+ if (declaration.includes('readonly')) {
206
+ modifiers.push('readonly');
207
+ }
208
+ if (declaration.includes('abstract')) {
209
+ modifiers.push('abstract');
210
+ }
211
+ return modifiers;
212
+ }
213
+ /**
214
+ * 提取文件註解
215
+ */
216
+ export function extractDocumentation(lines, memberLine) {
217
+ const docLines = [];
218
+ let i = memberLine - 1;
219
+ while (i >= 0) {
220
+ const line = lines[i].trim();
221
+ if (line.endsWith('*/')) {
222
+ docLines.unshift(line);
223
+ i--;
224
+ while (i >= 0 && !lines[i].trim().startsWith('/**') && !lines[i].trim().startsWith('/*')) {
225
+ docLines.unshift(lines[i].trim());
226
+ i--;
227
+ }
228
+ if (i >= 0) {
229
+ docLines.unshift(lines[i].trim());
230
+ }
231
+ break;
232
+ }
233
+ else if (line.startsWith('//')) {
234
+ docLines.unshift(line.substring(2).trim());
235
+ i--;
236
+ }
237
+ else if (line === '') {
238
+ i--;
239
+ }
240
+ else {
241
+ break;
242
+ }
243
+ }
244
+ return docLines.length > 0 ? docLines.join('\n') : undefined;
245
+ }
246
+ /**
247
+ * 提取依賴
248
+ */
249
+ function extractDependencies(sourceCode) {
250
+ const dependencies = [];
251
+ let match;
252
+ // 提取型別引用
253
+ const typePattern = /:\s*(\w+)(?:<|;|\s|,|\))/g;
254
+ while ((match = typePattern.exec(sourceCode)) !== null) {
255
+ const typeName = match[1];
256
+ if (!BASIC_TYPES.has(typeName) && !KEYWORDS.has(typeName)) {
257
+ dependencies.push(typeName);
258
+ }
259
+ }
260
+ // 提取函式呼叫
261
+ const callPattern = /(\w+)\s*\(/g;
262
+ while ((match = callPattern.exec(sourceCode)) !== null) {
263
+ const funcName = match[1];
264
+ if (!KEYWORDS.has(funcName) && !BASIC_TYPES.has(funcName)) {
265
+ dependencies.push(funcName);
266
+ }
267
+ }
268
+ // 提取變數/常數引用(賦值右側、運算子右側、比較右側)
269
+ const varRefPattern = /[=><+\-*/%&|!]\s*([A-Z][A-Z0-9_]*)\b/g;
270
+ while ((match = varRefPattern.exec(sourceCode)) !== null) {
271
+ const varName = match[1];
272
+ if (!KEYWORDS.has(varName) && !BASIC_TYPES.has(varName)) {
273
+ dependencies.push(varName);
274
+ }
275
+ }
276
+ // 提取作為比較對象的識別符
277
+ const comparisonPattern = /\b([A-Z][A-Z0-9_]*)\s*[=!<>]/g;
278
+ while ((match = comparisonPattern.exec(sourceCode)) !== null) {
279
+ const varName = match[1];
280
+ if (!KEYWORDS.has(varName) && !BASIC_TYPES.has(varName)) {
281
+ dependencies.push(varName);
282
+ }
283
+ }
284
+ return [...new Set(dependencies)];
285
+ }
286
+ //# sourceMappingURL=typescript-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-extractor.js","sourceRoot":"","sources":["../../../../src/core/move-member/extractors/typescript-extractor.ts"],"names":[],"mappings":"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"}
@@ -11,9 +11,16 @@ import { MemberType, type MemberDefinition } from './types.js';
11
11
  export declare class MemberExtractor {
12
12
  private readonly parserRegistry;
13
13
  private readonly fileSystem;
14
+ private readonly fileUtils;
14
15
  constructor(parserRegistry: ParserRegistry, fileSystem: IFileSystem);
15
16
  /**
16
17
  * 提取指定成員
18
+ *
19
+ * @param filePath 檔案路徑
20
+ * @param memberName 成員名稱
21
+ * @param memberType 成員類型(可選)
22
+ * @param className 所屬類別(可選)
23
+ * @returns 找到的成員定義,或 null
17
24
  */
18
25
  extractMember(filePath: string, memberName: string, memberType?: MemberType, className?: string): Promise<MemberDefinition | null>;
19
26
  /**
@@ -23,74 +30,17 @@ export declare class MemberExtractor {
23
30
  * @param filePath 檔案路徑
24
31
  * @param line 行號(1-based)
25
32
  * @param column 欄位(1-based,可選)
33
+ * @returns 找到的成員定義,或 null
26
34
  */
27
35
  extractMemberAtPosition(filePath: string, line: number, column?: number): Promise<MemberDefinition | null>;
28
36
  /**
29
37
  * 列出檔案中的所有成員
30
- */
31
- listMembers(filePath: string, className?: string): Promise<MemberDefinition[]>;
32
- /**
33
- * 提取 TypeScript 成員
34
- */
35
- private extractTypeScriptMember;
36
- /**
37
- * 列出 TypeScript 成員
38
- */
39
- private listTypeScriptMembers;
40
- /**
41
- * 提取類別成員
42
- */
43
- private extractClassMembers;
44
- /**
45
- * 提取 JavaScript 成員(簡化版)
46
- */
47
- private extractJavaScriptMember;
48
- /**
49
- * 列出 JavaScript 成員
50
- */
51
- private listJavaScriptMembers;
52
- /**
53
- * 建立成員定義
54
- */
55
- private createMember;
56
- /**
57
- * 找到程式碼區塊結尾
58
- */
59
- private findBlockEnd;
60
- /**
61
- * 在類別內找到程式碼區塊結尾
62
- */
63
- private findBlockEndInClass;
64
- /**
65
- * 找到類型別名結尾
66
- */
67
- private findTypeAliasEnd;
68
- /**
69
- * 找到陳述句結尾
70
38
  *
71
- * 處理多行箭頭函式:追蹤括號深度,避免將參數預設值的 `=` 誤判為語句結束
72
- */
73
- private findStatementEnd;
74
- /**
75
- * 提取修飾符
76
- */
77
- private extractModifiers;
78
- /**
79
- * 提取文件註解
80
- */
81
- private extractDocumentation;
82
- /**
83
- * 提取依賴
84
- */
85
- private extractDependencies;
86
- /**
87
- * 讀取檔案內容
88
- */
89
- private readFile;
90
- /**
91
- * 取得檔案副檔名
39
+ * @param filePath 檔案路徑
40
+ * @param className 篩選特定類別的成員(可選)
41
+ * @returns 成員定義陣列
92
42
  */
93
- private getFileExtension;
43
+ listMembers(filePath: string, className?: string): Promise<MemberDefinition[]>;
94
44
  }
95
45
  /**
96
46
  * 建立 MemberExtractor 實例
@@ -1 +1 @@
1
- {"version":3,"file":"member-extractor.d.ts","sourceRoot":"","sources":["../../../src/core/move-member/member-extractor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kDAAkD,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE/D;;GAEG;AACH,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU;gBADV,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,WAAW;IAG1C;;OAEG;IACG,aAAa,CACjB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,UAAU,EACvB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAoBnC;;;;;;;OAOG;IACG,uBAAuB,CAC3B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAkCnC;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAoBpF;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAiB/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiJ7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA0E3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAW/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAI7B;;OAEG;IACH,OAAO,CAAC,YAAY;IA8BpB;;OAEG;IACH,OAAO,CAAC,YAAY;IAqBpB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqB3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IA+BxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA+B5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA0D3B;;OAEG;YACW,QAAQ;IAStB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAIzB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,WAAW,GACtB,eAAe,CAEjB"}
1
+ {"version":3,"file":"member-extractor.d.ts","sourceRoot":"","sources":["../../../src/core/move-member/member-extractor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kDAAkD,CAAC;AAEpF,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAQ/D;;GAEG;AACH,qBAAa,eAAe;IAIxB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAJ7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;gBAGnB,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,WAAW;IAK1C;;;;;;;;OAQG;IACG,aAAa,CACjB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,UAAU,EACvB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAoBnC;;;;;;;;OAQG;IACG,uBAAuB,CAC3B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAkCnC;;;;;;OAMG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;CAmBrF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,WAAW,GACtB,eAAe,CAEjB"}