agent-ide 0.7.6 → 0.8.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.
- package/dist/core/deadcode/dead-code-remover.d.ts +27 -9
- package/dist/core/deadcode/dead-code-remover.d.ts.map +1 -1
- package/dist/core/deadcode/dead-code-remover.js +100 -26
- package/dist/core/deadcode/dead-code-remover.js.map +1 -1
- package/dist/core/move/import-resolver.d.ts +0 -3
- package/dist/core/move/import-resolver.d.ts.map +1 -1
- package/dist/core/move/import-resolver.js +0 -10
- package/dist/core/move/import-resolver.js.map +1 -1
- package/dist/core/move-member/index.d.ts +1 -1
- package/dist/core/move-member/index.d.ts.map +1 -1
- package/dist/core/move-member/index.js.map +1 -1
- package/dist/core/move-member/move-member-service.d.ts +2 -0
- package/dist/core/move-member/move-member-service.d.ts.map +1 -1
- package/dist/core/move-member/move-member-service.js +24 -31
- package/dist/core/move-member/move-member-service.js.map +1 -1
- package/dist/core/move-member/types.d.ts +48 -23
- package/dist/core/move-member/types.d.ts.map +1 -1
- package/dist/core/move-member/types.js.map +1 -1
- package/dist/core/shared/symbol-finder.d.ts +39 -11
- package/dist/core/shared/symbol-finder.d.ts.map +1 -1
- package/dist/core/shared/symbol-finder.js +101 -71
- package/dist/core/shared/symbol-finder.js.map +1 -1
- package/dist/core/snapshot/snapshot-generator.d.ts +11 -0
- package/dist/core/snapshot/snapshot-generator.d.ts.map +1 -1
- package/dist/core/snapshot/snapshot-generator.js +117 -5
- package/dist/core/snapshot/snapshot-generator.js.map +1 -1
- package/dist/infrastructure/parser/base.d.ts +2 -6
- package/dist/infrastructure/parser/base.d.ts.map +1 -1
- package/dist/infrastructure/parser/base.js +1 -16
- package/dist/infrastructure/parser/base.js.map +1 -1
- package/dist/infrastructure/parser/index.d.ts +2 -0
- package/dist/infrastructure/parser/index.d.ts.map +1 -1
- package/dist/infrastructure/parser/index.js +1 -0
- package/dist/infrastructure/parser/index.js.map +1 -1
- package/dist/infrastructure/parser/interface.d.ts +197 -0
- package/dist/infrastructure/parser/interface.d.ts.map +1 -1
- package/dist/infrastructure/parser/interface.js +13 -0
- package/dist/infrastructure/parser/interface.js.map +1 -1
- package/dist/interfaces/cli/commands/deadcode.command.js +7 -1
- package/dist/interfaces/cli/commands/deadcode.command.js.map +1 -1
- package/dist/interfaces/cli/commands/move-member.command.d.ts.map +1 -1
- package/dist/interfaces/cli/commands/move-member.command.js +6 -11
- package/dist/interfaces/cli/commands/move-member.command.js.map +1 -1
- package/dist/plugins/javascript/code-analyzer.d.ts +68 -0
- package/dist/plugins/javascript/code-analyzer.d.ts.map +1 -0
- package/dist/plugins/javascript/code-analyzer.js +302 -0
- package/dist/plugins/javascript/code-analyzer.js.map +1 -0
- package/dist/plugins/javascript/declaration-analyzer.d.ts +58 -0
- package/dist/plugins/javascript/declaration-analyzer.d.ts.map +1 -0
- package/dist/plugins/javascript/declaration-analyzer.js +367 -0
- package/dist/plugins/javascript/declaration-analyzer.js.map +1 -0
- package/dist/plugins/javascript/parser.d.ts +21 -36
- package/dist/plugins/javascript/parser.d.ts.map +1 -1
- package/dist/plugins/javascript/parser.js +55 -321
- package/dist/plugins/javascript/parser.js.map +1 -1
- package/dist/plugins/javascript/pattern-analyzer.d.ts +33 -0
- package/dist/plugins/javascript/pattern-analyzer.d.ts.map +1 -0
- package/dist/plugins/javascript/pattern-analyzer.js +142 -0
- package/dist/plugins/javascript/pattern-analyzer.js.map +1 -0
- package/dist/plugins/javascript/reference-finder.d.ts +38 -0
- package/dist/plugins/javascript/reference-finder.d.ts.map +1 -0
- package/dist/plugins/javascript/reference-finder.js +210 -0
- package/dist/plugins/javascript/reference-finder.js.map +1 -0
- package/dist/plugins/javascript/types.d.ts +2 -4
- package/dist/plugins/javascript/types.d.ts.map +1 -1
- package/dist/plugins/javascript/types.js +4 -12
- package/dist/plugins/javascript/types.js.map +1 -1
- package/dist/plugins/shared/constants.d.ts +32 -0
- package/dist/plugins/shared/constants.d.ts.map +1 -0
- package/dist/plugins/shared/constants.js +78 -0
- package/dist/plugins/shared/constants.js.map +1 -0
- package/dist/plugins/shared/index.d.ts +7 -0
- package/dist/plugins/shared/index.d.ts.map +1 -0
- package/dist/plugins/shared/index.js +9 -0
- package/dist/plugins/shared/index.js.map +1 -0
- package/dist/plugins/shared/parser-helpers.d.ts +109 -0
- package/dist/plugins/shared/parser-helpers.d.ts.map +1 -0
- package/dist/plugins/shared/parser-helpers.js +223 -0
- package/dist/plugins/shared/parser-helpers.js.map +1 -0
- package/dist/plugins/typescript/declaration-analyzer.d.ts +123 -0
- package/dist/plugins/typescript/declaration-analyzer.d.ts.map +1 -0
- package/dist/plugins/typescript/declaration-analyzer.js +474 -0
- package/dist/plugins/typescript/declaration-analyzer.js.map +1 -0
- package/dist/plugins/typescript/dependency-analyzer.d.ts +0 -6
- package/dist/plugins/typescript/dependency-analyzer.d.ts.map +1 -1
- package/dist/plugins/typescript/dependency-analyzer.js +0 -34
- package/dist/plugins/typescript/dependency-analyzer.js.map +1 -1
- package/dist/plugins/typescript/index.d.ts +5 -0
- package/dist/plugins/typescript/index.d.ts.map +1 -1
- package/dist/plugins/typescript/index.js +5 -0
- package/dist/plugins/typescript/index.js.map +1 -1
- package/dist/plugins/typescript/language-service.d.ts +93 -0
- package/dist/plugins/typescript/language-service.d.ts.map +1 -0
- package/dist/plugins/typescript/language-service.js +159 -0
- package/dist/plugins/typescript/language-service.js.map +1 -0
- package/dist/plugins/typescript/parser.d.ts +27 -34
- package/dist/plugins/typescript/parser.d.ts.map +1 -1
- package/dist/plugins/typescript/parser.js +74 -429
- package/dist/plugins/typescript/parser.js.map +1 -1
- package/dist/plugins/typescript/pattern-analyzer.d.ts +59 -0
- package/dist/plugins/typescript/pattern-analyzer.d.ts.map +1 -0
- package/dist/plugins/typescript/pattern-analyzer.js +179 -0
- package/dist/plugins/typescript/pattern-analyzer.js.map +1 -0
- package/dist/plugins/typescript/reference-finder.d.ts +51 -0
- package/dist/plugins/typescript/reference-finder.d.ts.map +1 -0
- package/dist/plugins/typescript/reference-finder.js +214 -0
- package/dist/plugins/typescript/reference-finder.js.map +1 -0
- package/dist/plugins/typescript/scope-analyzer.d.ts +61 -0
- package/dist/plugins/typescript/scope-analyzer.d.ts.map +1 -0
- package/dist/plugins/typescript/scope-analyzer.js +300 -0
- package/dist/plugins/typescript/scope-analyzer.js.map +1 -0
- package/dist/plugins/typescript/types.d.ts +2 -4
- package/dist/plugins/typescript/types.d.ts.map +1 -1
- package/dist/plugins/typescript/types.js +4 -12
- package/dist/plugins/typescript/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JavaScript 設計模式分析器
|
|
3
|
+
* 負責識別程式碼中的設計模式(如 Factory Pattern)
|
|
4
|
+
*/
|
|
5
|
+
import { parse as babelParse } from '@babel/parser';
|
|
6
|
+
import * as babel from '@babel/types';
|
|
7
|
+
import babelTraverse from '@babel/traverse';
|
|
8
|
+
import { calculateFactoryConfidence, createFactoryPatternInfo } from '../shared/index.js';
|
|
9
|
+
// Handle both ESM and CJS module formats
|
|
10
|
+
const traverse = babelTraverse.default || babelTraverse;
|
|
11
|
+
/**
|
|
12
|
+
* JavaScript 設計模式分析器
|
|
13
|
+
* 識別程式碼中的設計模式,包括 Factory、Singleton 等
|
|
14
|
+
*/
|
|
15
|
+
export class PatternAnalyzer {
|
|
16
|
+
/**
|
|
17
|
+
* 識別程式碼中的設計模式
|
|
18
|
+
* JavaScript 沒有型別標註,因此主要依賴:
|
|
19
|
+
* 1. 函數體內的 new 表達式
|
|
20
|
+
* 2. 回傳物件字面量
|
|
21
|
+
* 3. 函數名稱(作為輔助信號)
|
|
22
|
+
*/
|
|
23
|
+
identifyPatterns(code) {
|
|
24
|
+
try {
|
|
25
|
+
const ast = babelParse(code, {
|
|
26
|
+
sourceType: 'unambiguous',
|
|
27
|
+
plugins: ['jsx']
|
|
28
|
+
});
|
|
29
|
+
const patterns = [];
|
|
30
|
+
traverse(ast, {
|
|
31
|
+
FunctionDeclaration: (path) => {
|
|
32
|
+
if (path.node.id) {
|
|
33
|
+
const factoryInfo = this.analyzeJSFactoryPattern(path.node.id.name, path.node.body);
|
|
34
|
+
if (factoryInfo) {
|
|
35
|
+
patterns.push(factoryInfo);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
VariableDeclarator: (path) => {
|
|
40
|
+
if (babel.isIdentifier(path.node.id) && path.node.init) {
|
|
41
|
+
const init = path.node.init;
|
|
42
|
+
if (babel.isArrowFunctionExpression(init) || babel.isFunctionExpression(init)) {
|
|
43
|
+
const body = init.body;
|
|
44
|
+
const factoryInfo = babel.isBlockStatement(body)
|
|
45
|
+
? this.analyzeJSFactoryPattern(path.node.id.name, body)
|
|
46
|
+
: this.analyzeJSFactoryExpression(path.node.id.name, body);
|
|
47
|
+
if (factoryInfo) {
|
|
48
|
+
patterns.push(factoryInfo);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
return patterns;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// 解析失敗,返回 null 讓呼叫端 fallback 到名稱比對
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 分析 JavaScript 函數是否為 factory 模式
|
|
63
|
+
* 判斷條件:函數體內有 new 表達式或回傳物件字面量
|
|
64
|
+
*/
|
|
65
|
+
analyzeJSFactoryPattern(functionName, body) {
|
|
66
|
+
let hasNewExpression = false;
|
|
67
|
+
let hasObjectReturn = false;
|
|
68
|
+
let producedType;
|
|
69
|
+
// 遍歷函數體
|
|
70
|
+
const checkNode = (node) => {
|
|
71
|
+
// 檢查 new 表達式
|
|
72
|
+
if (babel.isNewExpression(node)) {
|
|
73
|
+
hasNewExpression = true;
|
|
74
|
+
// 嘗試提取建構的類別名稱
|
|
75
|
+
if (babel.isIdentifier(node.callee)) {
|
|
76
|
+
producedType = node.callee.name;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// 檢查 return 語句
|
|
80
|
+
if (babel.isReturnStatement(node) && node.argument) {
|
|
81
|
+
if (babel.isObjectExpression(node.argument)) {
|
|
82
|
+
hasObjectReturn = true;
|
|
83
|
+
producedType = 'Object';
|
|
84
|
+
}
|
|
85
|
+
else if (babel.isNewExpression(node.argument)) {
|
|
86
|
+
hasNewExpression = true;
|
|
87
|
+
if (babel.isIdentifier(node.argument.callee)) {
|
|
88
|
+
producedType = node.argument.callee.name;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
// 遍歷所有語句
|
|
94
|
+
for (const statement of body.body) {
|
|
95
|
+
this.traverseNode(statement, checkNode);
|
|
96
|
+
}
|
|
97
|
+
// 只有當有 factory 行為時才返回(使用共用模組)
|
|
98
|
+
if (hasNewExpression || hasObjectReturn) {
|
|
99
|
+
const confidence = calculateFactoryConfidence(functionName, undefined, hasNewExpression, hasObjectReturn);
|
|
100
|
+
return createFactoryPatternInfo(functionName, confidence, producedType);
|
|
101
|
+
}
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* 分析箭頭函數簡寫的 factory 模式(使用共用模組)
|
|
106
|
+
*/
|
|
107
|
+
analyzeJSFactoryExpression(functionName, expr) {
|
|
108
|
+
if (babel.isNewExpression(expr)) {
|
|
109
|
+
const producedType = babel.isIdentifier(expr.callee) ? expr.callee.name : undefined;
|
|
110
|
+
const confidence = calculateFactoryConfidence(functionName, undefined, true, false);
|
|
111
|
+
return createFactoryPatternInfo(functionName, confidence, producedType);
|
|
112
|
+
}
|
|
113
|
+
if (babel.isObjectExpression(expr)) {
|
|
114
|
+
const confidence = calculateFactoryConfidence(functionName, undefined, false, true);
|
|
115
|
+
return createFactoryPatternInfo(functionName, confidence, 'Object');
|
|
116
|
+
}
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* 遞迴遍歷節點
|
|
121
|
+
*/
|
|
122
|
+
traverseNode(node, callback) {
|
|
123
|
+
callback(node);
|
|
124
|
+
// 遍歷所有子節點
|
|
125
|
+
for (const key of Object.keys(node)) {
|
|
126
|
+
const value = node[key];
|
|
127
|
+
if (value && typeof value === 'object') {
|
|
128
|
+
if (Array.isArray(value)) {
|
|
129
|
+
for (const item of value) {
|
|
130
|
+
if (item && typeof item === 'object' && 'type' in item) {
|
|
131
|
+
this.traverseNode(item, callback);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
else if ('type' in value) {
|
|
136
|
+
this.traverseNode(value, callback);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=pattern-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-analyzer.js","sourceRoot":"","sources":["../../../src/plugins/javascript/pattern-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JavaScript 引用查找器
|
|
3
|
+
* 負責作用域感知的符號引用查找和分析
|
|
4
|
+
*/
|
|
5
|
+
import { type ScopedFindReferencesOptions, type ScopedReference } from '../../infrastructure/parser/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* JavaScript 引用查找器
|
|
8
|
+
* 使用 Babel 語義分析來精確匹配符號引用
|
|
9
|
+
*/
|
|
10
|
+
export declare class ReferenceFinder {
|
|
11
|
+
/**
|
|
12
|
+
* 作用域感知的符號引用查找
|
|
13
|
+
* 使用 Babel 語義分析來精確匹配符號引用,區分不同類別的同名方法
|
|
14
|
+
*
|
|
15
|
+
* @param code 完整的檔案內容
|
|
16
|
+
* @param symbolName 要查找的符號名稱
|
|
17
|
+
* @param options 查找選項(可限定類別等)
|
|
18
|
+
* @returns 符號引用列表,如果無法解析則返回 null
|
|
19
|
+
*/
|
|
20
|
+
findScopedReferences(code: string, symbolName: string, options?: ScopedFindReferencesOptions): ScopedReference[] | null;
|
|
21
|
+
/**
|
|
22
|
+
* 分析 JavaScript 標識符引用的詳細資訊
|
|
23
|
+
*/
|
|
24
|
+
private analyzeIdentifierReference;
|
|
25
|
+
/**
|
|
26
|
+
* 推斷 JavaScript receiver 的類型名稱
|
|
27
|
+
*/
|
|
28
|
+
private inferReceiverType;
|
|
29
|
+
/**
|
|
30
|
+
* 查找 JavaScript 標識符所屬的容器名稱
|
|
31
|
+
*/
|
|
32
|
+
private findContainerName;
|
|
33
|
+
/**
|
|
34
|
+
* 將 Babel AST 節點轉換為 Range
|
|
35
|
+
*/
|
|
36
|
+
private getNodeRange;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=reference-finder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference-finder.d.ts","sourceRoot":"","sources":["../../../src/plugins/javascript/reference-finder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAEL,KAAK,2BAA2B,EAChC,KAAK,eAAe,EACrB,MAAM,iCAAiC,CAAC;AAqBzC;;;GAGG;AACH,qBAAa,eAAe;IAC1B;;;;;;;;OAQG;IACH,oBAAoB,CAClB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,2BAA2B,GACpC,eAAe,EAAE,GAAG,IAAI;IA6D3B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAiDlC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA+CzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAuCzB;;OAEG;IACH,OAAO,CAAC,YAAY;CAWrB"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JavaScript 引用查找器
|
|
3
|
+
* 負責作用域感知的符號引用查找和分析
|
|
4
|
+
*/
|
|
5
|
+
import { parse as babelParse } from '@babel/parser';
|
|
6
|
+
import * as babel from '@babel/types';
|
|
7
|
+
import babelTraverse from '@babel/traverse';
|
|
8
|
+
import { ScopedReferenceKind } from '../../infrastructure/parser/index.js';
|
|
9
|
+
import { babelLocationToPosition } from './types.js';
|
|
10
|
+
// Handle both ESM and CJS module formats
|
|
11
|
+
const traverse = babelTraverse.default || babelTraverse;
|
|
12
|
+
/**
|
|
13
|
+
* JavaScript 引用查找器
|
|
14
|
+
* 使用 Babel 語義分析來精確匹配符號引用
|
|
15
|
+
*/
|
|
16
|
+
export class ReferenceFinder {
|
|
17
|
+
/**
|
|
18
|
+
* 作用域感知的符號引用查找
|
|
19
|
+
* 使用 Babel 語義分析來精確匹配符號引用,區分不同類別的同名方法
|
|
20
|
+
*
|
|
21
|
+
* @param code 完整的檔案內容
|
|
22
|
+
* @param symbolName 要查找的符號名稱
|
|
23
|
+
* @param options 查找選項(可限定類別等)
|
|
24
|
+
* @returns 符號引用列表,如果無法解析則返回 null
|
|
25
|
+
*/
|
|
26
|
+
findScopedReferences(code, symbolName, options) {
|
|
27
|
+
try {
|
|
28
|
+
const ast = babelParse(code, {
|
|
29
|
+
sourceType: 'unambiguous',
|
|
30
|
+
plugins: ['jsx']
|
|
31
|
+
});
|
|
32
|
+
const references = [];
|
|
33
|
+
const targetClassName = options?.className;
|
|
34
|
+
const filePath = 'temp.js';
|
|
35
|
+
traverse(ast, {
|
|
36
|
+
Identifier: (path) => {
|
|
37
|
+
if (path.node.name !== symbolName) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
// 過濾:跳過物件屬性的 key(非計算屬性)
|
|
41
|
+
const parent = path.parent;
|
|
42
|
+
if (babel.isObjectProperty(parent) && parent.key === path.node && !parent.computed) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
// 過濾:跳過 import 的原始名稱
|
|
46
|
+
if (babel.isImportSpecifier(parent) && parent.imported === path.node) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
// 分析引用詳情
|
|
50
|
+
const refInfo = this.analyzeIdentifierReference(path, code, targetClassName);
|
|
51
|
+
if (refInfo) {
|
|
52
|
+
// 如果指定了 className,過濾不匹配的引用
|
|
53
|
+
if (targetClassName && refInfo.containerName !== targetClassName) {
|
|
54
|
+
if (refInfo.isMethodCall && refInfo.receiverType !== targetClassName) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const location = {
|
|
59
|
+
filePath,
|
|
60
|
+
range: this.getNodeRange(path.node)
|
|
61
|
+
};
|
|
62
|
+
references.push({
|
|
63
|
+
location,
|
|
64
|
+
kind: refInfo.kind,
|
|
65
|
+
isExactMatch: true,
|
|
66
|
+
containerName: refInfo.containerName
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
return references;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// 解析失敗,返回 null 讓呼叫端 fallback 到手動過濾
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 分析 JavaScript 標識符引用的詳細資訊
|
|
80
|
+
*/
|
|
81
|
+
analyzeIdentifierReference(path, code, _targetClassName) {
|
|
82
|
+
const parent = path.parent;
|
|
83
|
+
let kind = ScopedReferenceKind.Read;
|
|
84
|
+
let isMethodCall = false;
|
|
85
|
+
let receiverType;
|
|
86
|
+
// 檢查是否為函式呼叫
|
|
87
|
+
if (babel.isCallExpression(parent) && parent.callee === path.node) {
|
|
88
|
+
kind = ScopedReferenceKind.Call;
|
|
89
|
+
isMethodCall = false;
|
|
90
|
+
}
|
|
91
|
+
// 檢查是否為方法呼叫:obj.method()
|
|
92
|
+
if (babel.isMemberExpression(parent) && parent.property === path.node && !parent.computed) {
|
|
93
|
+
const grandParent = path.parentPath?.parent;
|
|
94
|
+
if (babel.isCallExpression(grandParent) && grandParent.callee === parent) {
|
|
95
|
+
kind = ScopedReferenceKind.Call;
|
|
96
|
+
isMethodCall = true;
|
|
97
|
+
// 嘗試取得 receiver 的類型名稱
|
|
98
|
+
receiverType = this.inferReceiverType(parent.object, code);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// 檢查是否為寫入(賦值左側)
|
|
102
|
+
if (babel.isAssignmentExpression(parent) && parent.left === path.node) {
|
|
103
|
+
kind = ScopedReferenceKind.Write;
|
|
104
|
+
}
|
|
105
|
+
// 檢查是否為宣告
|
|
106
|
+
if (babel.isVariableDeclarator(parent) && parent.id === path.node) {
|
|
107
|
+
kind = ScopedReferenceKind.Write;
|
|
108
|
+
}
|
|
109
|
+
// 取得所屬容器名稱
|
|
110
|
+
const containerName = this.findContainerName(path);
|
|
111
|
+
return {
|
|
112
|
+
kind,
|
|
113
|
+
containerName,
|
|
114
|
+
isMethodCall,
|
|
115
|
+
receiverType
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* 推斷 JavaScript receiver 的類型名稱
|
|
120
|
+
*/
|
|
121
|
+
inferReceiverType(expression, code) {
|
|
122
|
+
// 1. new 表達式:(new Dog()).bark()
|
|
123
|
+
if (babel.isNewExpression(expression)) {
|
|
124
|
+
if (babel.isIdentifier(expression.callee)) {
|
|
125
|
+
return expression.callee.name;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// 2. 標識符:需要查找其宣告
|
|
129
|
+
if (babel.isIdentifier(expression)) {
|
|
130
|
+
const varName = expression.name;
|
|
131
|
+
// 簡單解析:查找 const dog = new Dog()
|
|
132
|
+
try {
|
|
133
|
+
const ast = babelParse(code, {
|
|
134
|
+
sourceType: 'unambiguous',
|
|
135
|
+
plugins: ['jsx']
|
|
136
|
+
});
|
|
137
|
+
let result;
|
|
138
|
+
traverse(ast, {
|
|
139
|
+
VariableDeclarator: (path) => {
|
|
140
|
+
if (result) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
if (babel.isIdentifier(path.node.id) && path.node.id.name === varName) {
|
|
144
|
+
const init = path.node.init;
|
|
145
|
+
if (init && babel.isNewExpression(init)) {
|
|
146
|
+
if (babel.isIdentifier(init.callee)) {
|
|
147
|
+
result = init.callee.name;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
return result;
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return undefined;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* 查找 JavaScript 標識符所屬的容器名稱
|
|
163
|
+
*/
|
|
164
|
+
findContainerName(path) {
|
|
165
|
+
let current = path.parentPath;
|
|
166
|
+
while (current) {
|
|
167
|
+
const node = current.node;
|
|
168
|
+
// 類別方法
|
|
169
|
+
if (babel.isClassMethod(node)) {
|
|
170
|
+
const classPath = current.parentPath;
|
|
171
|
+
if (classPath && babel.isClassBody(classPath.node)) {
|
|
172
|
+
const classDecl = classPath.parentPath?.node;
|
|
173
|
+
if (classDecl && babel.isClassDeclaration(classDecl) && classDecl.id) {
|
|
174
|
+
return classDecl.id.name;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// 類別屬性
|
|
179
|
+
if (babel.isClassProperty(node)) {
|
|
180
|
+
const classPath = current.parentPath;
|
|
181
|
+
if (classPath && babel.isClassBody(classPath.node)) {
|
|
182
|
+
const classDecl = classPath.parentPath?.node;
|
|
183
|
+
if (classDecl && babel.isClassDeclaration(classDecl) && classDecl.id) {
|
|
184
|
+
return classDecl.id.name;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// 函式宣告
|
|
189
|
+
if (babel.isFunctionDeclaration(node) && node.id) {
|
|
190
|
+
return node.id.name;
|
|
191
|
+
}
|
|
192
|
+
current = current.parentPath;
|
|
193
|
+
}
|
|
194
|
+
return undefined;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* 將 Babel AST 節點轉換為 Range
|
|
198
|
+
*/
|
|
199
|
+
getNodeRange(node) {
|
|
200
|
+
if (node.loc) {
|
|
201
|
+
return babelLocationToPosition(node.loc);
|
|
202
|
+
}
|
|
203
|
+
// 如果沒有位置資訊,返回預設範圍
|
|
204
|
+
return {
|
|
205
|
+
start: { line: 0, column: 0, offset: 0 },
|
|
206
|
+
end: { line: 0, column: 0, offset: 0 }
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=reference-finder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference-finder.js","sourceRoot":"","sources":["../../../src/plugins/javascript/reference-finder.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,10 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import type { AST, ASTNode, Position, Range, Symbol } from '../../shared/types/index.js';
|
|
5
5
|
import { SymbolType } from '../../shared/types/index.js';
|
|
6
|
+
import { isRelativePath } from '../shared/index.js';
|
|
6
7
|
import * as babel from '@babel/types';
|
|
7
8
|
import type { ParseResult } from '@babel/parser';
|
|
9
|
+
export { isRelativePath };
|
|
8
10
|
/**
|
|
9
11
|
* JavaScript AST 節點包裝器
|
|
10
12
|
* 包裝 Babel AST 節點
|
|
@@ -88,10 +90,6 @@ export declare function isDependencyNode(node: babel.Node): boolean;
|
|
|
88
90
|
* 獲取依賴路徑
|
|
89
91
|
*/
|
|
90
92
|
export declare function getDependencyPath(node: babel.Node): string | undefined;
|
|
91
|
-
/**
|
|
92
|
-
* 檢查路徑是否為相對路徑
|
|
93
|
-
*/
|
|
94
|
-
export declare function isRelativePath(path: string): boolean;
|
|
95
93
|
/**
|
|
96
94
|
* 獲取導入的符號
|
|
97
95
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/plugins/javascript/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,GAAG,EACH,OAAO,EACP,QAAQ,EACR,KAAK,EACL,MAAM,EAGP,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,UAAU,EAAiC,MAAM,wBAAwB,CAAC;AAEnF,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/plugins/javascript/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
* JavaScript Parser 特定型別定義
|
|
3
3
|
*/
|
|
4
4
|
import { SymbolType } from '../../shared/types/index.js';
|
|
5
|
+
import { isRelativePath, isValidUnicodeIdentifier } from '../shared/index.js';
|
|
5
6
|
import * as babel from '@babel/types';
|
|
7
|
+
// Re-export 共用函數供外部使用
|
|
8
|
+
export { isRelativePath };
|
|
6
9
|
/**
|
|
7
10
|
* 預設的 JavaScript 解析選項
|
|
8
11
|
*/
|
|
@@ -193,12 +196,6 @@ export function getDependencyPath(node) {
|
|
|
193
196
|
}
|
|
194
197
|
return undefined;
|
|
195
198
|
}
|
|
196
|
-
/**
|
|
197
|
-
* 檢查路徑是否為相對路徑
|
|
198
|
-
*/
|
|
199
|
-
export function isRelativePath(path) {
|
|
200
|
-
return path.startsWith('./') || path.startsWith('../');
|
|
201
|
-
}
|
|
202
199
|
/**
|
|
203
200
|
* 獲取導入的符號
|
|
204
201
|
*/
|
|
@@ -293,8 +290,6 @@ const JAVASCRIPT_RESERVED_WORDS = new Set([
|
|
|
293
290
|
// Literals
|
|
294
291
|
'null', 'true', 'false'
|
|
295
292
|
]);
|
|
296
|
-
/** 預編譯的 Unicode 識別符正則表達式 */
|
|
297
|
-
const JAVASCRIPT_UNICODE_IDENTIFIER_PATTERN = /^[\p{ID_Start}_$][\p{ID_Continue}$]*$/u;
|
|
298
293
|
/**
|
|
299
294
|
* 驗證識別符名稱
|
|
300
295
|
*
|
|
@@ -307,10 +302,7 @@ const JAVASCRIPT_UNICODE_IDENTIFIER_PATTERN = /^[\p{ID_Start}_$][\p{ID_Continue}
|
|
|
307
302
|
* - let π = 3.14159 // 合法
|
|
308
303
|
*/
|
|
309
304
|
export function isValidIdentifier(name) {
|
|
310
|
-
|
|
311
|
-
return false;
|
|
312
|
-
}
|
|
313
|
-
return JAVASCRIPT_UNICODE_IDENTIFIER_PATTERN.test(name) && !isReservedWord(name);
|
|
305
|
+
return isValidUnicodeIdentifier(name) && !isReservedWord(name);
|
|
314
306
|
}
|
|
315
307
|
/**
|
|
316
308
|
* 檢查是否為保留字
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/plugins/javascript/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,OAAO,EAAE,UAAU,EAAiC,MAAM,wBAAwB,CAAC;AAEnF,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/plugins/javascript/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser 共用常數
|
|
3
|
+
* TypeScript 和 JavaScript Parser 共享的設定值
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* 行號匹配的容差值(允許 JSDoc 造成的偏移)
|
|
7
|
+
* JSDoc 可能跨越多行,因此需要容差來正確匹配目標宣告
|
|
8
|
+
*/
|
|
9
|
+
export declare const LINE_TOLERANCE = 10;
|
|
10
|
+
/**
|
|
11
|
+
* 通用排除模式(適用於所有語言)
|
|
12
|
+
*/
|
|
13
|
+
export declare const COMMON_EXCLUDE_PATTERNS: readonly ["node_modules/**", ".git/**", "dist/**", "build/**", "coverage/**", ".next/**", ".nuxt/**", "out/**", ".cache/**", ".turbo/**"];
|
|
14
|
+
/**
|
|
15
|
+
* TypeScript 特定排除模式
|
|
16
|
+
*/
|
|
17
|
+
export declare const TYPESCRIPT_EXCLUDE_PATTERNS: readonly ["node_modules/**", ".git/**", "dist/**", "build/**", "coverage/**", ".next/**", ".nuxt/**", "out/**", ".cache/**", ".turbo/**", "**/*.test.ts", "**/*.spec.ts", "**/*.test.tsx", "**/*.spec.tsx", "**/__tests__/**", "**/__mocks__/**", "**/*.d.ts"];
|
|
18
|
+
/**
|
|
19
|
+
* JavaScript 特定排除模式
|
|
20
|
+
*/
|
|
21
|
+
export declare const JAVASCRIPT_EXCLUDE_PATTERNS: readonly ["node_modules/**", ".git/**", "dist/**", "build/**", "coverage/**", ".next/**", ".nuxt/**", "out/**", ".cache/**", ".turbo/**", "**/*.test.js", "**/*.spec.js", "**/*.test.jsx", "**/*.spec.jsx", "**/*.test.mjs", "**/*.spec.mjs", "**/*.test.cjs", "**/*.spec.cjs", "**/__tests__/**", "**/__mocks__/**"];
|
|
22
|
+
/**
|
|
23
|
+
* Factory 模式識別的回傳型別排除清單
|
|
24
|
+
* 這些型別不視為 factory 模式的產物
|
|
25
|
+
*/
|
|
26
|
+
export declare const NON_FACTORY_RETURN_TYPES: readonly ["void", "never", "string", "number", "boolean", "null", "undefined", "symbol", "bigint"];
|
|
27
|
+
/**
|
|
28
|
+
* Factory 模式函數名稱前綴
|
|
29
|
+
* 符合這些前綴的函數更可能是 factory
|
|
30
|
+
*/
|
|
31
|
+
export declare const FACTORY_NAME_PREFIXES: readonly ["create", "make", "build"];
|
|
32
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/plugins/shared/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC;;GAEG;AACH,eAAO,MAAM,uBAAuB,2IAW1B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,2BAA2B,gQAS9B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,2BAA2B,uTAY9B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,wBAAwB,oGAU3B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,qBAAqB,sCAIxB,CAAC"}
|