agent-ide 0.5.0 → 0.6.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/change-signature/change-signature-service.d.ts.map +1 -1
- package/dist/core/change-signature/change-signature-service.js +5 -9
- package/dist/core/change-signature/change-signature-service.js.map +1 -1
- package/dist/core/change-signature/signature-parser.d.ts +0 -16
- package/dist/core/change-signature/signature-parser.d.ts.map +1 -1
- package/dist/core/change-signature/signature-parser.js +0 -109
- package/dist/core/change-signature/signature-parser.js.map +1 -1
- package/dist/core/dead-code/dead-code-detector.d.ts +63 -0
- package/dist/core/dead-code/dead-code-detector.d.ts.map +1 -0
- package/dist/core/dead-code/dead-code-detector.js +256 -0
- package/dist/core/dead-code/dead-code-detector.js.map +1 -0
- package/dist/core/dead-code/index.d.ts +8 -0
- package/dist/core/dead-code/index.d.ts.map +1 -0
- package/dist/core/dead-code/index.js +7 -0
- package/dist/core/dead-code/index.js.map +1 -0
- package/dist/core/dead-code/types.d.ts +68 -0
- package/dist/core/dead-code/types.d.ts.map +1 -0
- package/dist/core/dead-code/types.js +20 -0
- package/dist/core/dead-code/types.js.map +1 -0
- package/dist/core/dependency/dependency-analyzer.d.ts.map +1 -1
- package/dist/core/dependency/dependency-analyzer.js +2 -15
- package/dist/core/dependency/dependency-analyzer.js.map +1 -1
- package/dist/core/indexing/index-engine.d.ts.map +1 -1
- package/dist/core/indexing/index-engine.js +0 -12
- package/dist/core/indexing/index-engine.js.map +1 -1
- package/dist/core/indexing/types.d.ts +1 -1
- package/dist/core/indexing/types.js +1 -1
- package/dist/core/indexing/types.js.map +1 -1
- package/dist/core/move-file/import-resolver.d.ts +1 -1
- package/dist/core/move-file/import-resolver.d.ts.map +1 -1
- package/dist/core/move-file/import-resolver.js +1 -9
- package/dist/core/move-file/import-resolver.js.map +1 -1
- package/dist/core/move-file/move-service.d.ts +8 -0
- package/dist/core/move-file/move-service.d.ts.map +1 -1
- package/dist/core/move-file/move-service.js +102 -21
- package/dist/core/move-file/move-service.js.map +1 -1
- package/dist/core/move-member/member-extractor.d.ts +0 -8
- package/dist/core/move-member/member-extractor.d.ts.map +1 -1
- package/dist/core/move-member/member-extractor.js +0 -49
- package/dist/core/move-member/member-extractor.js.map +1 -1
- package/dist/core/move-member/move-member-service.js +1 -1
- package/dist/core/move-member/move-member-service.js.map +1 -1
- package/dist/core/rename/reference-updater.d.ts +4 -0
- package/dist/core/rename/reference-updater.d.ts.map +1 -1
- package/dist/core/rename/reference-updater.js +30 -0
- package/dist/core/rename/reference-updater.js.map +1 -1
- package/dist/core/snapshot/index.d.ts +2 -0
- package/dist/core/snapshot/index.d.ts.map +1 -1
- package/dist/core/snapshot/index.js +1 -0
- package/dist/core/snapshot/index.js.map +1 -1
- package/dist/core/snapshot/snapshot-cache.d.ts +103 -0
- package/dist/core/snapshot/snapshot-cache.d.ts.map +1 -0
- package/dist/core/snapshot/snapshot-cache.js +249 -0
- package/dist/core/snapshot/snapshot-cache.js.map +1 -0
- package/dist/core/snapshot/snapshot-generator.d.ts +12 -0
- package/dist/core/snapshot/snapshot-generator.d.ts.map +1 -1
- package/dist/core/snapshot/snapshot-generator.js +61 -3
- package/dist/core/snapshot/snapshot-generator.js.map +1 -1
- package/dist/infrastructure/formatters/index.d.ts +1 -1
- package/dist/infrastructure/formatters/index.d.ts.map +1 -1
- package/dist/infrastructure/formatters/index.js.map +1 -1
- package/dist/infrastructure/formatters/query-formatter.d.ts +16 -0
- package/dist/infrastructure/formatters/query-formatter.d.ts.map +1 -1
- package/dist/infrastructure/formatters/query-formatter.js +155 -3
- package/dist/infrastructure/formatters/query-formatter.js.map +1 -1
- package/dist/infrastructure/formatters/query-types.d.ts +73 -2
- package/dist/infrastructure/formatters/query-types.d.ts.map +1 -1
- package/dist/interfaces/cli/cli.d.ts.map +1 -1
- package/dist/interfaces/cli/cli.js +2 -29
- package/dist/interfaces/cli/cli.js.map +1 -1
- package/dist/interfaces/cli/commands/deadcode.command.d.ts +11 -0
- package/dist/interfaces/cli/commands/deadcode.command.d.ts.map +1 -0
- package/dist/interfaces/cli/commands/deadcode.command.js +103 -0
- package/dist/interfaces/cli/commands/deadcode.command.js.map +1 -0
- package/dist/interfaces/cli/commands/index.d.ts +1 -0
- package/dist/interfaces/cli/commands/index.d.ts.map +1 -1
- package/dist/interfaces/cli/commands/index.js +1 -0
- package/dist/interfaces/cli/commands/index.js.map +1 -1
- package/dist/interfaces/cli/commands/move.command.js +1 -1
- package/dist/interfaces/cli/commands/move.command.js.map +1 -1
- package/dist/interfaces/cli/commands/rename.command.js +2 -3
- package/dist/interfaces/cli/commands/rename.command.js.map +1 -1
- package/dist/interfaces/cli/commands/snapshot.command.d.ts.map +1 -1
- package/dist/interfaces/cli/commands/snapshot.command.js +20 -0
- package/dist/interfaces/cli/commands/snapshot.command.js.map +1 -1
- package/package.json +10 -12
- package/dist/plugins/python/dependency-analyzer.d.ts +0 -86
- package/dist/plugins/python/dependency-analyzer.d.ts.map +0 -1
- package/dist/plugins/python/dependency-analyzer.js +0 -252
- package/dist/plugins/python/dependency-analyzer.js.map +0 -1
- package/dist/plugins/python/index.d.ts +0 -9
- package/dist/plugins/python/index.d.ts.map +0 -1
- package/dist/plugins/python/index.js +0 -14
- package/dist/plugins/python/index.js.map +0 -1
- package/dist/plugins/python/parser.d.ts +0 -117
- package/dist/plugins/python/parser.d.ts.map +0 -1
- package/dist/plugins/python/parser.js +0 -414
- package/dist/plugins/python/parser.js.map +0 -1
- package/dist/plugins/python/symbol-extractor.d.ts +0 -108
- package/dist/plugins/python/symbol-extractor.d.ts.map +0 -1
- package/dist/plugins/python/symbol-extractor.js +0 -389
- package/dist/plugins/python/symbol-extractor.js.map +0 -1
- package/dist/plugins/python/tree-sitter-bridge.d.ts +0 -57
- package/dist/plugins/python/tree-sitter-bridge.d.ts.map +0 -1
- package/dist/plugins/python/tree-sitter-bridge.js +0 -269
- package/dist/plugins/python/tree-sitter-bridge.js.map +0 -1
- package/dist/plugins/python/types.d.ts +0 -191
- package/dist/plugins/python/types.d.ts.map +0 -1
- package/dist/plugins/python/types.js +0 -279
- package/dist/plugins/python/types.js.map +0 -1
- package/dist/plugins/swift/dependency-analyzer.d.ts +0 -33
- package/dist/plugins/swift/dependency-analyzer.d.ts.map +0 -1
- package/dist/plugins/swift/dependency-analyzer.js +0 -95
- package/dist/plugins/swift/dependency-analyzer.js.map +0 -1
- package/dist/plugins/swift/index.d.ts +0 -14
- package/dist/plugins/swift/index.d.ts.map +0 -1
- package/dist/plugins/swift/index.js +0 -19
- package/dist/plugins/swift/index.js.map +0 -1
- package/dist/plugins/swift/parser.d.ts +0 -164
- package/dist/plugins/swift/parser.d.ts.map +0 -1
- package/dist/plugins/swift/parser.js +0 -688
- package/dist/plugins/swift/parser.js.map +0 -1
- package/dist/plugins/swift/swift-bridge/swift-parser +0 -0
- package/dist/plugins/swift/symbol-extractor.d.ts +0 -46
- package/dist/plugins/swift/symbol-extractor.d.ts.map +0 -1
- package/dist/plugins/swift/symbol-extractor.js +0 -187
- package/dist/plugins/swift/symbol-extractor.js.map +0 -1
- package/dist/plugins/swift/types.d.ts +0 -149
- package/dist/plugins/swift/types.d.ts.map +0 -1
- package/dist/plugins/swift/types.js +0 -251
- package/dist/plugins/swift/types.js.map +0 -1
|
@@ -1,269 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* tree-sitter 橋接層
|
|
3
|
-
* 負責 Parser 初始化和節點轉換
|
|
4
|
-
*/
|
|
5
|
-
import { Parser as TreeSitterParser, Language as TreeSitterLanguage } from 'web-tree-sitter';
|
|
6
|
-
import { createRequire } from 'module';
|
|
7
|
-
import path from 'path';
|
|
8
|
-
import { PythonNodeKind, nodeTypeToKind, tsNodeToRange } from './types.js';
|
|
9
|
-
const require = createRequire(import.meta.url);
|
|
10
|
-
/** 單例 Parser 實例 */
|
|
11
|
-
let parserInstance = null;
|
|
12
|
-
/** Python 語言實例 */
|
|
13
|
-
let pythonLanguage = null;
|
|
14
|
-
/** 初始化狀態 */
|
|
15
|
-
let isInitialized = false;
|
|
16
|
-
let initializationPromise = null;
|
|
17
|
-
/**
|
|
18
|
-
* 初始化 tree-sitter Parser
|
|
19
|
-
* 使用單例模式,確保只初始化一次
|
|
20
|
-
*/
|
|
21
|
-
export async function initializeParser() {
|
|
22
|
-
if (parserInstance && isInitialized) {
|
|
23
|
-
return parserInstance;
|
|
24
|
-
}
|
|
25
|
-
// 避免重複初始化
|
|
26
|
-
if (initializationPromise) {
|
|
27
|
-
await initializationPromise;
|
|
28
|
-
return parserInstance;
|
|
29
|
-
}
|
|
30
|
-
initializationPromise = (async () => {
|
|
31
|
-
await TreeSitterParser.init();
|
|
32
|
-
parserInstance = new TreeSitterParser();
|
|
33
|
-
// 載入 Python 語言 WASM
|
|
34
|
-
const wasmPath = resolveWasmPath();
|
|
35
|
-
pythonLanguage = await TreeSitterLanguage.load(wasmPath);
|
|
36
|
-
parserInstance.setLanguage(pythonLanguage);
|
|
37
|
-
isInitialized = true;
|
|
38
|
-
})();
|
|
39
|
-
await initializationPromise;
|
|
40
|
-
return parserInstance;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* 解析 WASM 檔案路徑
|
|
44
|
-
*/
|
|
45
|
-
function resolveWasmPath() {
|
|
46
|
-
// 嘗試從 node_modules 解析
|
|
47
|
-
try {
|
|
48
|
-
const treeSitterPythonPath = require.resolve('tree-sitter-python');
|
|
49
|
-
// require.resolve 返回 bindings/node/index.js,需要往上找到套件根目錄
|
|
50
|
-
const bindingsDir = path.dirname(treeSitterPythonPath); // bindings/node
|
|
51
|
-
const packageDir = path.dirname(path.dirname(bindingsDir)); // 套件根目錄
|
|
52
|
-
return path.join(packageDir, 'tree-sitter-python.wasm');
|
|
53
|
-
}
|
|
54
|
-
catch {
|
|
55
|
-
// 備用路徑
|
|
56
|
-
return path.join(process.cwd(), 'node_modules', 'tree-sitter-python', 'tree-sitter-python.wasm');
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* 獲取 Parser 實例
|
|
61
|
-
* @throws 如果 Parser 未初始化
|
|
62
|
-
*/
|
|
63
|
-
export function getParser() {
|
|
64
|
-
if (!parserInstance || !isInitialized) {
|
|
65
|
-
throw new Error('Parser 尚未初始化,請先調用 initializeParser()');
|
|
66
|
-
}
|
|
67
|
-
return parserInstance;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* 檢查 Parser 是否已初始化
|
|
71
|
-
*/
|
|
72
|
-
export function isParserInitialized() {
|
|
73
|
-
return isInitialized && parserInstance !== null;
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* 解析 Python 程式碼
|
|
77
|
-
*/
|
|
78
|
-
export async function parseCode(code) {
|
|
79
|
-
const parser = await initializeParser();
|
|
80
|
-
const tree = parser.parse(code);
|
|
81
|
-
if (!tree) {
|
|
82
|
-
throw new Error('解析失敗:無法解析程式碼');
|
|
83
|
-
}
|
|
84
|
-
return tree;
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* 轉換 tree-sitter Node 為 PythonASTNode
|
|
88
|
-
*/
|
|
89
|
-
export function convertNode(node, sourceFile) {
|
|
90
|
-
const type = node.type;
|
|
91
|
-
const range = tsNodeToRange(node);
|
|
92
|
-
const pythonKind = nodeTypeToKind(type);
|
|
93
|
-
// 提取節點屬性
|
|
94
|
-
const properties = {
|
|
95
|
-
nodeType: type,
|
|
96
|
-
isNamed: node.isNamed,
|
|
97
|
-
childCount: node.childCount,
|
|
98
|
-
namedChildCount: node.namedChildCount
|
|
99
|
-
};
|
|
100
|
-
// 提取名稱(如果存在)
|
|
101
|
-
const nameNode = node.childForFieldName('name');
|
|
102
|
-
if (nameNode) {
|
|
103
|
-
properties.name = nameNode.text;
|
|
104
|
-
}
|
|
105
|
-
// 提取型別註解(如果存在)
|
|
106
|
-
let typeAnnotation;
|
|
107
|
-
const typeNode = node.childForFieldName('type')
|
|
108
|
-
|| node.childForFieldName('return_type');
|
|
109
|
-
if (typeNode) {
|
|
110
|
-
typeAnnotation = typeNode.text;
|
|
111
|
-
properties.typeAnnotation = typeAnnotation;
|
|
112
|
-
}
|
|
113
|
-
// 提取裝飾器(如果是 decorated_definition)
|
|
114
|
-
let decorators;
|
|
115
|
-
if (type === PythonNodeKind.DecoratedDefinition) {
|
|
116
|
-
decorators = extractDecorators(node);
|
|
117
|
-
if (decorators.length > 0) {
|
|
118
|
-
properties.decorators = decorators;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
// 遞歸轉換子節點
|
|
122
|
-
const children = [];
|
|
123
|
-
for (let i = 0; i < node.namedChildCount; i++) {
|
|
124
|
-
const childNode = node.namedChild(i);
|
|
125
|
-
if (childNode) {
|
|
126
|
-
children.push(convertNode(childNode, sourceFile));
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
const astNode = {
|
|
130
|
-
type,
|
|
131
|
-
range,
|
|
132
|
-
properties,
|
|
133
|
-
children,
|
|
134
|
-
treeSitterNode: node,
|
|
135
|
-
pythonKind,
|
|
136
|
-
...(decorators ? { decorators } : {}),
|
|
137
|
-
...(typeAnnotation ? { typeAnnotation } : {})
|
|
138
|
-
};
|
|
139
|
-
// 設定父子關係
|
|
140
|
-
for (const child of children) {
|
|
141
|
-
child.parent = astNode;
|
|
142
|
-
}
|
|
143
|
-
return astNode;
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* 從 decorated_definition 節點提取裝飾器
|
|
147
|
-
*/
|
|
148
|
-
function extractDecorators(node) {
|
|
149
|
-
const decorators = [];
|
|
150
|
-
for (let i = 0; i < node.childCount; i++) {
|
|
151
|
-
const child = node.child(i);
|
|
152
|
-
if (child?.type === 'decorator') {
|
|
153
|
-
// 提取裝飾器名稱(去掉 @)
|
|
154
|
-
const decoratorText = child.text.replace(/^@/, '').trim();
|
|
155
|
-
// 只取函數名稱部分(不含參數)
|
|
156
|
-
const nameMatch = decoratorText.match(/^[\w.]+/);
|
|
157
|
-
if (nameMatch) {
|
|
158
|
-
decorators.push(nameMatch[0]);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
return decorators;
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* 創建 PythonAST
|
|
166
|
-
*/
|
|
167
|
-
export function createPythonAST(tree, sourceFile, parseTime) {
|
|
168
|
-
const root = convertNode(tree.rootNode, sourceFile);
|
|
169
|
-
const nodeCount = countNodes(root);
|
|
170
|
-
const metadata = {
|
|
171
|
-
language: 'python',
|
|
172
|
-
version: '3.8+',
|
|
173
|
-
parserOptions: {},
|
|
174
|
-
parseTime,
|
|
175
|
-
nodeCount
|
|
176
|
-
};
|
|
177
|
-
return {
|
|
178
|
-
sourceFile,
|
|
179
|
-
root,
|
|
180
|
-
metadata,
|
|
181
|
-
tree
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* 計算節點總數
|
|
186
|
-
*/
|
|
187
|
-
function countNodes(node) {
|
|
188
|
-
let count = 1;
|
|
189
|
-
for (const child of node.children) {
|
|
190
|
-
count += countNodes(child);
|
|
191
|
-
}
|
|
192
|
-
return count;
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* 遍歷 AST 節點
|
|
196
|
-
*/
|
|
197
|
-
export function traverseAST(node, callback) {
|
|
198
|
-
const shouldContinue = callback(node);
|
|
199
|
-
if (shouldContinue === false) {
|
|
200
|
-
return;
|
|
201
|
-
}
|
|
202
|
-
for (const child of node.children) {
|
|
203
|
-
traverseAST(child, callback);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* 查找特定類型的節點
|
|
208
|
-
*/
|
|
209
|
-
export function findNodesByKind(root, kind) {
|
|
210
|
-
const result = [];
|
|
211
|
-
traverseAST(root, (node) => {
|
|
212
|
-
if (node.pythonKind === kind) {
|
|
213
|
-
result.push(node);
|
|
214
|
-
}
|
|
215
|
-
});
|
|
216
|
-
return result;
|
|
217
|
-
}
|
|
218
|
-
/**
|
|
219
|
-
* 查找包含指定位置的節點
|
|
220
|
-
*/
|
|
221
|
-
export function findNodeAtPosition(root, line, column) {
|
|
222
|
-
let result = null;
|
|
223
|
-
traverseAST(root, (node) => {
|
|
224
|
-
const { start, end } = node.range;
|
|
225
|
-
const isInRange = ((line > start.line || (line === start.line && column >= start.column))
|
|
226
|
-
&& (line < end.line || (line === end.line && column <= end.column)));
|
|
227
|
-
if (isInRange) {
|
|
228
|
-
result = node;
|
|
229
|
-
}
|
|
230
|
-
});
|
|
231
|
-
return result;
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* 獲取節點的文字內容
|
|
235
|
-
*/
|
|
236
|
-
export function getNodeText(node) {
|
|
237
|
-
return node.treeSitterNode.text;
|
|
238
|
-
}
|
|
239
|
-
/**
|
|
240
|
-
* 獲取節點的指定欄位
|
|
241
|
-
*/
|
|
242
|
-
export function getFieldNode(node, fieldName) {
|
|
243
|
-
const fieldNode = node.treeSitterNode.childForFieldName(fieldName);
|
|
244
|
-
if (!fieldNode) {
|
|
245
|
-
return null;
|
|
246
|
-
}
|
|
247
|
-
// 在 children 中找到對應的 PythonASTNode
|
|
248
|
-
for (const child of node.children) {
|
|
249
|
-
const pythonChild = child;
|
|
250
|
-
if (pythonChild.treeSitterNode === fieldNode) {
|
|
251
|
-
return pythonChild;
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
// 如果在 children 中找不到,可能是匿名節點,需要重新轉換
|
|
255
|
-
return convertNode(fieldNode, '');
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* 釋放 Parser 資源
|
|
259
|
-
*/
|
|
260
|
-
export async function disposeParser() {
|
|
261
|
-
if (parserInstance) {
|
|
262
|
-
parserInstance.delete();
|
|
263
|
-
parserInstance = null;
|
|
264
|
-
}
|
|
265
|
-
pythonLanguage = null;
|
|
266
|
-
isInitialized = false;
|
|
267
|
-
initializationPromise = null;
|
|
268
|
-
}
|
|
269
|
-
//# sourceMappingURL=tree-sitter-bridge.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tree-sitter-bridge.js","sourceRoot":"","sources":["../../../src/plugins/python/tree-sitter-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Python Parser 特定型別定義
|
|
3
|
-
*/
|
|
4
|
-
import type { AST, ASTNode, Position, Range } from '../../shared/types/index.js';
|
|
5
|
-
import { SymbolType } from '../../shared/types/index.js';
|
|
6
|
-
import type { Node as TreeSitterNode, Tree as TreeSitterTree, Point as TreeSitterPoint } from 'web-tree-sitter';
|
|
7
|
-
/**
|
|
8
|
-
* Python AST 節點類型(對應 tree-sitter-python)
|
|
9
|
-
*/
|
|
10
|
-
export declare enum PythonNodeKind {
|
|
11
|
-
Module = "module",
|
|
12
|
-
ClassDefinition = "class_definition",
|
|
13
|
-
FunctionDefinition = "function_definition",
|
|
14
|
-
AsyncFunctionDefinition = "async_function_definition",
|
|
15
|
-
DecoratedDefinition = "decorated_definition",
|
|
16
|
-
Decorator = "decorator",
|
|
17
|
-
ImportStatement = "import_statement",
|
|
18
|
-
ImportFromStatement = "import_from_statement",
|
|
19
|
-
Assignment = "assignment",
|
|
20
|
-
AugmentedAssignment = "augmented_assignment",
|
|
21
|
-
AnnotatedAssignment = "annotated_assignment",
|
|
22
|
-
GlobalStatement = "global_statement",
|
|
23
|
-
NonlocalStatement = "nonlocal_statement",
|
|
24
|
-
ExpressionStatement = "expression_statement",
|
|
25
|
-
ReturnStatement = "return_statement",
|
|
26
|
-
PassStatement = "pass_statement",
|
|
27
|
-
BreakStatement = "break_statement",
|
|
28
|
-
ContinueStatement = "continue_statement",
|
|
29
|
-
RaiseStatement = "raise_statement",
|
|
30
|
-
AssertStatement = "assert_statement",
|
|
31
|
-
DeleteStatement = "delete_statement",
|
|
32
|
-
PrintStatement = "print_statement",
|
|
33
|
-
IfStatement = "if_statement",
|
|
34
|
-
ElifClause = "elif_clause",
|
|
35
|
-
ElseClause = "else_clause",
|
|
36
|
-
ForStatement = "for_statement",
|
|
37
|
-
WhileStatement = "while_statement",
|
|
38
|
-
TryStatement = "try_statement",
|
|
39
|
-
ExceptClause = "except_clause",
|
|
40
|
-
FinallyClause = "finally_clause",
|
|
41
|
-
WithStatement = "with_statement",
|
|
42
|
-
AsyncForStatement = "async_for_statement",
|
|
43
|
-
AsyncWithStatement = "async_with_statement",
|
|
44
|
-
MatchStatement = "match_statement",
|
|
45
|
-
CaseClause = "case_clause",
|
|
46
|
-
CasePattern = "case_pattern",
|
|
47
|
-
BinaryOperator = "binary_operator",
|
|
48
|
-
UnaryOperator = "unary_operator",
|
|
49
|
-
BooleanOperator = "boolean_operator",
|
|
50
|
-
ComparisonOperator = "comparison_operator",
|
|
51
|
-
ConditionalExpression = "conditional_expression",
|
|
52
|
-
LambdaExpression = "lambda",
|
|
53
|
-
Call = "call",
|
|
54
|
-
Attribute = "attribute",
|
|
55
|
-
Subscript = "subscript",
|
|
56
|
-
Slice = "slice",
|
|
57
|
-
List = "list",
|
|
58
|
-
Dictionary = "dictionary",
|
|
59
|
-
Set = "set",
|
|
60
|
-
Tuple = "tuple",
|
|
61
|
-
ListComprehension = "list_comprehension",
|
|
62
|
-
DictionaryComprehension = "dictionary_comprehension",
|
|
63
|
-
SetComprehension = "set_comprehension",
|
|
64
|
-
GeneratorExpression = "generator_expression",
|
|
65
|
-
Identifier = "identifier",
|
|
66
|
-
Integer = "integer",
|
|
67
|
-
Float = "float",
|
|
68
|
-
String = "string",
|
|
69
|
-
ConcatenatedString = "concatenated_string",
|
|
70
|
-
True = "true",
|
|
71
|
-
False = "false",
|
|
72
|
-
None = "none",
|
|
73
|
-
Comment = "comment",
|
|
74
|
-
Parameters = "parameters",
|
|
75
|
-
Parameter = "parameter",
|
|
76
|
-
DefaultParameter = "default_parameter",
|
|
77
|
-
TypedParameter = "typed_parameter",
|
|
78
|
-
TypedDefaultParameter = "typed_default_parameter",
|
|
79
|
-
ListSplatPattern = "list_splat_pattern",
|
|
80
|
-
DictionarySplatPattern = "dictionary_splat_pattern",
|
|
81
|
-
KeywordArgument = "keyword_argument",
|
|
82
|
-
Type = "type",
|
|
83
|
-
Block = "block",
|
|
84
|
-
ArgumentList = "argument_list",
|
|
85
|
-
DottedName = "dotted_name",
|
|
86
|
-
AliasedImport = "aliased_import",
|
|
87
|
-
WildcardImport = "wildcard_import",
|
|
88
|
-
RelativeImport = "relative_import",
|
|
89
|
-
ImportPrefix = "import_prefix"
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Python AST 節點包裝器
|
|
93
|
-
*/
|
|
94
|
-
export interface PythonASTNode extends ASTNode {
|
|
95
|
-
/** tree-sitter 原始節點 */
|
|
96
|
-
readonly treeSitterNode: TreeSitterNode;
|
|
97
|
-
/** Python 節點類型 */
|
|
98
|
-
readonly pythonKind: PythonNodeKind;
|
|
99
|
-
/** 裝飾器列表(如果有) */
|
|
100
|
-
readonly decorators?: readonly string[];
|
|
101
|
-
/** 型別註解(如果有) */
|
|
102
|
-
readonly typeAnnotation?: string;
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Python AST 包裝器
|
|
106
|
-
*/
|
|
107
|
-
export interface PythonAST extends AST {
|
|
108
|
-
readonly root: PythonASTNode;
|
|
109
|
-
/** tree-sitter 解析樹 */
|
|
110
|
-
readonly tree: TreeSitterTree;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Python 符號類型映射
|
|
114
|
-
*/
|
|
115
|
-
export declare const PYTHON_SYMBOL_TYPE_MAP: Partial<Record<PythonNodeKind, SymbolType>>;
|
|
116
|
-
/**
|
|
117
|
-
* 控制流節點複雜度權重(用於複雜度分析)
|
|
118
|
-
*/
|
|
119
|
-
export declare const COMPLEXITY_WEIGHTS: Partial<Record<PythonNodeKind, number>>;
|
|
120
|
-
/**
|
|
121
|
-
* 位置轉換:tree-sitter Point → Position
|
|
122
|
-
*/
|
|
123
|
-
export declare function tsPointToPosition(point: TreeSitterPoint, offset: number): Position;
|
|
124
|
-
/**
|
|
125
|
-
* 範圍轉換:tree-sitter Node → Range
|
|
126
|
-
*/
|
|
127
|
-
export declare function tsNodeToRange(node: TreeSitterNode): Range;
|
|
128
|
-
/**
|
|
129
|
-
* 節點類型字串轉 PythonNodeKind
|
|
130
|
-
*/
|
|
131
|
-
export declare function nodeTypeToKind(type: string): PythonNodeKind;
|
|
132
|
-
/**
|
|
133
|
-
* 檢查路徑是否為相對導入
|
|
134
|
-
*/
|
|
135
|
-
export declare function isRelativePath(path: string): boolean;
|
|
136
|
-
/**
|
|
137
|
-
* 驗證 Python 識別符名稱
|
|
138
|
-
*
|
|
139
|
-
* Python 3 支援 Unicode 識別符(PEP 3131):
|
|
140
|
-
* - 第一個字元:Unicode 類別 ID_Start 或底線
|
|
141
|
-
* - 後續字元:Unicode 類別 ID_Continue
|
|
142
|
-
*
|
|
143
|
-
* 範例:
|
|
144
|
-
* - 用戶名稱 = "John" # 合法
|
|
145
|
-
* - データ = 123 # 合法(日文)
|
|
146
|
-
*/
|
|
147
|
-
export declare function isValidPythonIdentifier(name: string): boolean;
|
|
148
|
-
/**
|
|
149
|
-
* 檢查是否為 Python 保留字
|
|
150
|
-
*/
|
|
151
|
-
export declare function isPythonReservedWord(name: string): boolean;
|
|
152
|
-
/**
|
|
153
|
-
* Python 解析錯誤類別
|
|
154
|
-
*/
|
|
155
|
-
export declare class PythonParseError extends Error {
|
|
156
|
-
readonly filePath?: string | undefined;
|
|
157
|
-
readonly position?: Position | undefined;
|
|
158
|
-
constructor(message: string, filePath?: string | undefined, position?: Position | undefined);
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* 創建解析錯誤
|
|
162
|
-
*/
|
|
163
|
-
export declare function createParseError(message: string, filePath?: string, position?: Position): PythonParseError;
|
|
164
|
-
/**
|
|
165
|
-
* Python 常用內建函數(用於安全檢查)
|
|
166
|
-
*/
|
|
167
|
-
export declare const DANGEROUS_FUNCTIONS: Set<string>;
|
|
168
|
-
/**
|
|
169
|
-
* Python 安全性相關模組
|
|
170
|
-
*/
|
|
171
|
-
export declare const SECURITY_SENSITIVE_MODULES: Set<string>;
|
|
172
|
-
/**
|
|
173
|
-
* PEP8 命名規範模式
|
|
174
|
-
*/
|
|
175
|
-
export declare const NAMING_PATTERNS: {
|
|
176
|
-
/** snake_case:變數、函式、方法 */
|
|
177
|
-
snakeCase: RegExp;
|
|
178
|
-
/** UPPER_SNAKE_CASE:常量 */
|
|
179
|
-
upperSnakeCase: RegExp;
|
|
180
|
-
/** PascalCase:類別 */
|
|
181
|
-
pascalCase: RegExp;
|
|
182
|
-
/** _private:私有成員 */
|
|
183
|
-
privatePrefix: RegExp;
|
|
184
|
-
/** __dunder__:特殊方法 */
|
|
185
|
-
dunderPattern: RegExp;
|
|
186
|
-
};
|
|
187
|
-
/**
|
|
188
|
-
* 檢查是否為測試檔案
|
|
189
|
-
*/
|
|
190
|
-
export declare function isPythonTestFile(filePath: string): boolean;
|
|
191
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/plugins/python/types.ts"],"names":[],"mappings":"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"}
|