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.
- package/README.md +11 -11
- package/dist/core/call-hierarchy/call-hierarchy-analyzer.d.ts +1 -8
- package/dist/core/call-hierarchy/call-hierarchy-analyzer.d.ts.map +1 -1
- package/dist/core/call-hierarchy/call-hierarchy-analyzer.js +9 -25
- package/dist/core/call-hierarchy/call-hierarchy-analyzer.js.map +1 -1
- package/dist/core/change-signature/call-site-updater.d.ts +5 -7
- package/dist/core/change-signature/call-site-updater.d.ts.map +1 -1
- package/dist/core/change-signature/call-site-updater.js +7 -16
- package/dist/core/change-signature/call-site-updater.js.map +1 -1
- package/dist/core/change-signature/change-signature-service.d.ts +1 -8
- package/dist/core/change-signature/change-signature-service.d.ts.map +1 -1
- package/dist/core/change-signature/change-signature-service.js +11 -29
- package/dist/core/change-signature/change-signature-service.js.map +1 -1
- package/dist/core/change-signature/signature-parser.d.ts +1 -8
- package/dist/core/change-signature/signature-parser.d.ts.map +1 -1
- package/dist/core/change-signature/signature-parser.js +7 -23
- package/dist/core/change-signature/signature-parser.js.map +1 -1
- package/dist/core/cycles/cycle-detector.d.ts +1 -1
- package/dist/core/cycles/cycle-detector.d.ts.map +1 -1
- package/dist/core/deadcode/dead-code-detector.d.ts +2 -13
- package/dist/core/deadcode/dead-code-detector.d.ts.map +1 -1
- package/dist/core/deadcode/dead-code-detector.js +6 -29
- package/dist/core/deadcode/dead-code-detector.js.map +1 -1
- package/dist/core/deadcode/import-cleaner.js +1 -1
- package/dist/core/deadcode/import-cleaner.js.map +1 -1
- package/dist/core/deadcode/import-parser.d.ts +0 -4
- package/dist/core/deadcode/import-parser.d.ts.map +1 -1
- package/dist/core/deadcode/import-parser.js +4 -10
- package/dist/core/deadcode/import-parser.js.map +1 -1
- package/dist/core/deadcode/range-expander.d.ts +0 -4
- package/dist/core/deadcode/range-expander.d.ts.map +1 -1
- package/dist/core/deadcode/range-expander.js +14 -10
- package/dist/core/deadcode/range-expander.js.map +1 -1
- package/dist/core/find-references/index.d.ts +3 -3
- package/dist/core/find-references/index.d.ts.map +1 -1
- package/dist/core/find-references/index.js +2 -2
- package/dist/core/find-references/index.js.map +1 -1
- package/dist/core/foundations/dependency-graph/dependency-graph.d.ts.map +1 -0
- package/dist/core/foundations/dependency-graph/dependency-graph.js.map +1 -0
- package/dist/core/foundations/dependency-graph/index.d.ts.map +1 -0
- package/dist/core/foundations/dependency-graph/index.js.map +1 -0
- package/dist/core/foundations/dependency-graph/types.d.ts.map +1 -0
- package/dist/core/foundations/dependency-graph/types.js.map +1 -0
- package/dist/core/foundations/file-utils.d.ts +50 -0
- package/dist/core/foundations/file-utils.d.ts.map +1 -0
- package/dist/core/foundations/file-utils.js +75 -0
- package/dist/core/foundations/file-utils.js.map +1 -0
- package/dist/core/foundations/index.d.ts +13 -0
- package/dist/core/foundations/index.d.ts.map +1 -0
- package/dist/core/foundations/index.js +17 -0
- package/dist/core/foundations/index.js.map +1 -0
- package/dist/core/foundations/indexing/file-index.d.ts.map +1 -0
- package/dist/core/foundations/indexing/file-index.js.map +1 -0
- package/dist/core/foundations/indexing/index-engine.d.ts.map +1 -0
- package/dist/core/foundations/indexing/index-engine.js.map +1 -0
- package/dist/core/foundations/indexing/index.d.ts.map +1 -0
- package/dist/core/foundations/indexing/index.js.map +1 -0
- package/dist/core/foundations/indexing/symbol-index.d.ts.map +1 -0
- package/dist/core/foundations/indexing/symbol-index.js.map +1 -0
- package/dist/core/{shared → foundations}/indexing/types.d.ts +1 -1
- package/dist/core/foundations/indexing/types.d.ts.map +1 -0
- package/dist/core/{shared → foundations}/indexing/types.js +11 -1
- package/dist/core/foundations/indexing/types.js.map +1 -0
- package/dist/core/foundations/symbol-finder/call-site-parser.d.ts.map +1 -0
- package/dist/core/foundations/symbol-finder/call-site-parser.js.map +1 -0
- package/dist/core/foundations/symbol-finder/index.d.ts.map +1 -0
- package/dist/core/foundations/symbol-finder/index.js.map +1 -0
- package/dist/core/{shared → foundations}/symbol-finder/symbol-finder.d.ts +24 -10
- package/dist/core/foundations/symbol-finder/symbol-finder.d.ts.map +1 -0
- package/dist/core/{shared → foundations}/symbol-finder/symbol-finder.js +118 -148
- package/dist/core/foundations/symbol-finder/symbol-finder.js.map +1 -0
- package/dist/core/foundations/symbol-finder/text-matcher.d.ts.map +1 -0
- package/dist/core/foundations/symbol-finder/text-matcher.js.map +1 -0
- package/dist/core/foundations/symbol-finder/types.d.ts.map +1 -0
- package/dist/core/foundations/symbol-finder/types.js.map +1 -0
- package/dist/core/impact/impact-analyzer.d.ts +1 -1
- package/dist/core/impact/impact-analyzer.d.ts.map +1 -1
- package/dist/core/impact/impact-analyzer.js +1 -1
- package/dist/core/impact/impact-analyzer.js.map +1 -1
- package/dist/core/move-member/extractors/index.d.ts +7 -0
- package/dist/core/move-member/extractors/index.d.ts.map +1 -0
- package/dist/core/move-member/extractors/index.js +9 -0
- package/dist/core/move-member/extractors/index.js.map +1 -0
- package/dist/core/move-member/extractors/javascript-extractor.d.ts +29 -0
- package/dist/core/move-member/extractors/javascript-extractor.d.ts.map +1 -0
- package/dist/core/move-member/extractors/javascript-extractor.js +33 -0
- package/dist/core/move-member/extractors/javascript-extractor.js.map +1 -0
- package/dist/core/move-member/extractors/typescript-extractor.d.ts +40 -0
- package/dist/core/move-member/extractors/typescript-extractor.d.ts.map +1 -0
- package/dist/core/move-member/extractors/typescript-extractor.js +286 -0
- package/dist/core/move-member/extractors/typescript-extractor.js.map +1 -0
- package/dist/core/move-member/member-extractor.d.ts +12 -62
- package/dist/core/move-member/member-extractor.d.ts.map +1 -1
- package/dist/core/move-member/member-extractor.js +23 -391
- package/dist/core/move-member/member-extractor.js.map +1 -1
- package/dist/core/move-member/reference-updater.d.ts.map +1 -1
- package/dist/core/move-member/reference-updater.js +3 -1
- package/dist/core/move-member/reference-updater.js.map +1 -1
- package/dist/core/move-member/utils/range-finder.d.ts +40 -0
- package/dist/core/move-member/utils/range-finder.d.ts.map +1 -0
- package/dist/core/move-member/utils/range-finder.js +101 -0
- package/dist/core/move-member/utils/range-finder.js.map +1 -0
- package/dist/core/rename/reference-updater.d.ts +5 -0
- package/dist/core/rename/reference-updater.d.ts.map +1 -1
- package/dist/core/rename/reference-updater.js +17 -4
- package/dist/core/rename/reference-updater.js.map +1 -1
- package/dist/core/rename/types.d.ts.map +1 -1
- package/dist/core/snapshot/snapshot-generator.d.ts +0 -29
- package/dist/core/snapshot/snapshot-generator.d.ts.map +1 -1
- package/dist/core/snapshot/snapshot-generator.js +6 -183
- package/dist/core/snapshot/snapshot-generator.js.map +1 -1
- package/dist/core/snapshot/utils/bracket-balancer.d.ts +27 -0
- package/dist/core/snapshot/utils/bracket-balancer.d.ts.map +1 -0
- package/dist/core/snapshot/utils/bracket-balancer.js +70 -0
- package/dist/core/snapshot/utils/bracket-balancer.js.map +1 -0
- package/dist/core/snapshot/utils/factory-pattern-detector.d.ts +22 -0
- package/dist/core/snapshot/utils/factory-pattern-detector.d.ts.map +1 -0
- package/dist/core/snapshot/utils/factory-pattern-detector.js +70 -0
- package/dist/core/snapshot/utils/factory-pattern-detector.js.map +1 -0
- package/dist/core/snapshot/utils/index.d.ts +7 -0
- package/dist/core/snapshot/utils/index.d.ts.map +1 -0
- package/dist/core/snapshot/utils/index.js +7 -0
- package/dist/core/snapshot/utils/index.js.map +1 -0
- package/dist/core/snapshot/utils/symbol-formatter.d.ts +37 -0
- package/dist/core/snapshot/utils/symbol-formatter.d.ts.map +1 -0
- package/dist/core/snapshot/utils/symbol-formatter.js +89 -0
- package/dist/core/snapshot/utils/symbol-formatter.js.map +1 -0
- package/dist/infrastructure/formatters/query-formatter.d.ts +8 -62
- package/dist/infrastructure/formatters/query-formatter.d.ts.map +1 -1
- package/dist/infrastructure/formatters/query-formatter.js +29 -438
- package/dist/infrastructure/formatters/query-formatter.js.map +1 -1
- package/dist/infrastructure/formatters/strategies/analyze-formatter.d.ts +24 -0
- package/dist/infrastructure/formatters/strategies/analyze-formatter.d.ts.map +1 -0
- package/dist/infrastructure/formatters/strategies/analyze-formatter.js +107 -0
- package/dist/infrastructure/formatters/strategies/analyze-formatter.js.map +1 -0
- package/dist/infrastructure/formatters/strategies/base-formatter.d.ts +67 -0
- package/dist/infrastructure/formatters/strategies/base-formatter.d.ts.map +1 -0
- package/dist/infrastructure/formatters/strategies/base-formatter.js +75 -0
- package/dist/infrastructure/formatters/strategies/base-formatter.js.map +1 -0
- package/dist/infrastructure/formatters/strategies/call-hierarchy-formatter.d.ts +19 -0
- package/dist/infrastructure/formatters/strategies/call-hierarchy-formatter.d.ts.map +1 -0
- package/dist/infrastructure/formatters/strategies/call-hierarchy-formatter.js +77 -0
- package/dist/infrastructure/formatters/strategies/call-hierarchy-formatter.js.map +1 -0
- package/dist/infrastructure/formatters/strategies/deps-formatter.d.ts +15 -0
- package/dist/infrastructure/formatters/strategies/deps-formatter.d.ts.map +1 -0
- package/dist/infrastructure/formatters/strategies/deps-formatter.js +47 -0
- package/dist/infrastructure/formatters/strategies/deps-formatter.js.map +1 -0
- package/dist/infrastructure/formatters/strategies/find-references-formatter.d.ts +23 -0
- package/dist/infrastructure/formatters/strategies/find-references-formatter.d.ts.map +1 -0
- package/dist/infrastructure/formatters/strategies/find-references-formatter.js +71 -0
- package/dist/infrastructure/formatters/strategies/find-references-formatter.js.map +1 -0
- package/dist/infrastructure/formatters/strategies/index.d.ts +11 -0
- package/dist/infrastructure/formatters/strategies/index.d.ts.map +1 -0
- package/dist/infrastructure/formatters/strategies/index.js +11 -0
- package/dist/infrastructure/formatters/strategies/index.js.map +1 -0
- package/dist/infrastructure/formatters/strategies/search-formatter.d.ts +15 -0
- package/dist/infrastructure/formatters/strategies/search-formatter.d.ts.map +1 -0
- package/dist/infrastructure/formatters/strategies/search-formatter.js +32 -0
- package/dist/infrastructure/formatters/strategies/search-formatter.js.map +1 -0
- package/dist/infrastructure/formatters/strategies/snapshot-formatter.d.ts +20 -0
- package/dist/infrastructure/formatters/strategies/snapshot-formatter.d.ts.map +1 -0
- package/dist/infrastructure/formatters/strategies/snapshot-formatter.js +101 -0
- package/dist/infrastructure/formatters/strategies/snapshot-formatter.js.map +1 -0
- package/dist/infrastructure/parser/registry.js.map +1 -1
- package/dist/interfaces/cli/commands/call-hierarchy.command.js +1 -1
- package/dist/interfaces/cli/commands/call-hierarchy.command.js.map +1 -1
- package/dist/interfaces/cli/commands/change-signature.command.js +3 -2
- package/dist/interfaces/cli/commands/change-signature.command.js.map +1 -1
- package/dist/interfaces/cli/commands/deadcode.command.js +1 -1
- package/dist/interfaces/cli/commands/deadcode.command.js.map +1 -1
- package/dist/interfaces/cli/commands/find-references.command.js +2 -2
- package/dist/interfaces/cli/commands/find-references.command.js.map +1 -1
- package/dist/interfaces/cli/commands/rename.command.js +2 -2
- package/dist/interfaces/cli/commands/rename.command.js.map +1 -1
- package/dist/interfaces/cli/preview-output-handler.d.ts.map +1 -1
- package/dist/interfaces/cli/preview-output-handler.js.map +1 -1
- package/dist/interfaces/cli/unified-output-handler.d.ts.map +1 -1
- package/dist/interfaces/cli/unified-output-handler.js.map +1 -1
- package/dist/plugins/javascript/parser.d.ts +0 -2
- package/dist/plugins/javascript/parser.d.ts.map +1 -1
- package/dist/plugins/javascript/parser.js +3 -19
- package/dist/plugins/javascript/parser.js.map +1 -1
- package/dist/plugins/javascript/types.d.ts.map +1 -1
- package/dist/plugins/javascript/types.js.map +1 -1
- package/dist/plugins/shared/index.d.ts +1 -0
- package/dist/plugins/shared/index.d.ts.map +1 -1
- package/dist/plugins/shared/index.js +2 -0
- package/dist/plugins/shared/index.js.map +1 -1
- package/dist/plugins/shared/utils/async.d.ts.map +1 -1
- package/dist/plugins/shared/utils/async.js.map +1 -1
- package/dist/plugins/shared/utils/object.js +5 -5
- package/dist/plugins/shared/utils/object.js.map +1 -1
- package/dist/plugins/shared/validators.d.ts +15 -0
- package/dist/plugins/shared/validators.d.ts.map +1 -0
- package/dist/plugins/shared/validators.js +29 -0
- package/dist/plugins/shared/validators.js.map +1 -0
- package/dist/plugins/typescript/dependency-analyzer.d.ts.map +1 -1
- package/dist/plugins/typescript/dependency-analyzer.js.map +1 -1
- package/dist/plugins/typescript/parser.d.ts +0 -2
- package/dist/plugins/typescript/parser.d.ts.map +1 -1
- package/dist/plugins/typescript/parser.js +3 -19
- package/dist/plugins/typescript/parser.js.map +1 -1
- package/dist/plugins/typescript/symbol-extractor.d.ts.map +1 -1
- package/dist/plugins/typescript/symbol-extractor.js.map +1 -1
- package/dist/plugins/typescript/types.d.ts.map +1 -1
- package/dist/plugins/typescript/types.js.map +1 -1
- package/package.json +1 -1
- package/dist/core/shared/dependency-graph/dependency-graph.d.ts.map +0 -1
- package/dist/core/shared/dependency-graph/dependency-graph.js.map +0 -1
- package/dist/core/shared/dependency-graph/index.d.ts.map +0 -1
- package/dist/core/shared/dependency-graph/index.js.map +0 -1
- package/dist/core/shared/dependency-graph/types.d.ts.map +0 -1
- package/dist/core/shared/dependency-graph/types.js.map +0 -1
- package/dist/core/shared/index.d.ts +0 -8
- package/dist/core/shared/index.d.ts.map +0 -1
- package/dist/core/shared/index.js +0 -11
- package/dist/core/shared/index.js.map +0 -1
- package/dist/core/shared/indexing/file-index.d.ts.map +0 -1
- package/dist/core/shared/indexing/file-index.js.map +0 -1
- package/dist/core/shared/indexing/index-engine.d.ts.map +0 -1
- package/dist/core/shared/indexing/index-engine.js.map +0 -1
- package/dist/core/shared/indexing/index.d.ts.map +0 -1
- package/dist/core/shared/indexing/index.js.map +0 -1
- package/dist/core/shared/indexing/symbol-index.d.ts.map +0 -1
- package/dist/core/shared/indexing/symbol-index.js.map +0 -1
- package/dist/core/shared/indexing/types.d.ts.map +0 -1
- package/dist/core/shared/indexing/types.js.map +0 -1
- package/dist/core/shared/symbol-finder/call-site-parser.d.ts.map +0 -1
- package/dist/core/shared/symbol-finder/call-site-parser.js.map +0 -1
- package/dist/core/shared/symbol-finder/index.d.ts.map +0 -1
- package/dist/core/shared/symbol-finder/index.js.map +0 -1
- package/dist/core/shared/symbol-finder/symbol-finder.d.ts.map +0 -1
- package/dist/core/shared/symbol-finder/symbol-finder.js.map +0 -1
- package/dist/core/shared/symbol-finder/text-matcher.d.ts.map +0 -1
- package/dist/core/shared/symbol-finder/text-matcher.js.map +0 -1
- package/dist/core/shared/symbol-finder/types.d.ts.map +0 -1
- package/dist/core/shared/symbol-finder/types.js.map +0 -1
- /package/dist/core/{shared → foundations}/dependency-graph/dependency-graph.d.ts +0 -0
- /package/dist/core/{shared → foundations}/dependency-graph/dependency-graph.js +0 -0
- /package/dist/core/{shared → foundations}/dependency-graph/index.d.ts +0 -0
- /package/dist/core/{shared → foundations}/dependency-graph/index.js +0 -0
- /package/dist/core/{shared → foundations}/dependency-graph/types.d.ts +0 -0
- /package/dist/core/{shared → foundations}/dependency-graph/types.js +0 -0
- /package/dist/core/{shared → foundations}/indexing/file-index.d.ts +0 -0
- /package/dist/core/{shared → foundations}/indexing/file-index.js +0 -0
- /package/dist/core/{shared → foundations}/indexing/index-engine.d.ts +0 -0
- /package/dist/core/{shared → foundations}/indexing/index-engine.js +0 -0
- /package/dist/core/{shared → foundations}/indexing/index.d.ts +0 -0
- /package/dist/core/{shared → foundations}/indexing/index.js +0 -0
- /package/dist/core/{shared → foundations}/indexing/symbol-index.d.ts +0 -0
- /package/dist/core/{shared → foundations}/indexing/symbol-index.js +0 -0
- /package/dist/core/{shared → foundations}/symbol-finder/call-site-parser.d.ts +0 -0
- /package/dist/core/{shared → foundations}/symbol-finder/call-site-parser.js +0 -0
- /package/dist/core/{shared → foundations}/symbol-finder/index.d.ts +0 -0
- /package/dist/core/{shared → foundations}/symbol-finder/index.js +0 -0
- /package/dist/core/{shared → foundations}/symbol-finder/text-matcher.d.ts +0 -0
- /package/dist/core/{shared → foundations}/symbol-finder/text-matcher.js +0 -0
- /package/dist/core/{shared → foundations}/symbol-finder/types.d.ts +0 -0
- /package/dist/core/{shared → foundations}/symbol-finder/types.js +0 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analyze 命令格式化策略
|
|
3
|
+
* 包含 DeadCode 子類型處理
|
|
4
|
+
*/
|
|
5
|
+
import { AnalyzeType } from '../query-types.js';
|
|
6
|
+
import { BaseFormatter, Colors, SeverityStyle } from './base-formatter.js';
|
|
7
|
+
/**
|
|
8
|
+
* Analyze 結果格式化器
|
|
9
|
+
*/
|
|
10
|
+
export class AnalyzeFormatter extends BaseFormatter {
|
|
11
|
+
/**
|
|
12
|
+
* 格式化 Analyze 摘要
|
|
13
|
+
*/
|
|
14
|
+
formatSummary(result) {
|
|
15
|
+
// 特殊處理 DeadCode 類型
|
|
16
|
+
if (result.analyzeType === AnalyzeType.DeadCode) {
|
|
17
|
+
return this.formatDeadCodeSummary(result);
|
|
18
|
+
}
|
|
19
|
+
const lines = [];
|
|
20
|
+
lines.push(`分析類型: ${result.analyzeType}`);
|
|
21
|
+
lines.push(`成功: ${result.success ? '是' : '否'}`);
|
|
22
|
+
if (result.issues && result.issues.length > 0) {
|
|
23
|
+
lines.push(`發現 ${result.issues.length} 個問題`);
|
|
24
|
+
lines.push('');
|
|
25
|
+
result.issues.slice(0, 10).forEach(issue => {
|
|
26
|
+
const severity = issue.severity
|
|
27
|
+
? SeverityStyle[issue.severity].emoji
|
|
28
|
+
: '•';
|
|
29
|
+
lines.push(`${severity} ${issue.message}`);
|
|
30
|
+
if (issue.filePath) {
|
|
31
|
+
lines.push(` ${this.colorize(issue.filePath, Colors.dim)}${issue.line ? `:${issue.line}` : ''}`);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
if (result.issues.length > 10) {
|
|
35
|
+
lines.push(`... 還有 ${result.issues.length - 10} 個問題`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return lines.join('\n');
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 格式化 DeadCode 摘要
|
|
42
|
+
*/
|
|
43
|
+
formatDeadCodeSummary(result) {
|
|
44
|
+
const lines = [];
|
|
45
|
+
// 標題
|
|
46
|
+
lines.push('🔍 Dead Code 檢測結果');
|
|
47
|
+
lines.push('');
|
|
48
|
+
// 統計
|
|
49
|
+
lines.push(`📊 掃描符號: ${result.summary.totalScanned || 0}`);
|
|
50
|
+
lines.push(`💀 Dead Code: ${result.items.length} 個`);
|
|
51
|
+
lines.push(`📁 影響檔案: ${result.filesAffected} 個`);
|
|
52
|
+
lines.push(`⏱️ 耗時: ${result.scanTime}ms`);
|
|
53
|
+
if (result.skippedFiles > 0) {
|
|
54
|
+
lines.push(this.colorize(`⚠️ 跳過檔案: ${result.skippedFiles} 個(解析失敗)`, Colors.yellow));
|
|
55
|
+
}
|
|
56
|
+
lines.push('');
|
|
57
|
+
// 按類型統計
|
|
58
|
+
if (Object.keys(result.byType).length > 0) {
|
|
59
|
+
lines.push('按類型統計:');
|
|
60
|
+
for (const [type, count] of Object.entries(result.byType)) {
|
|
61
|
+
const label = this.getTypeLabel(type);
|
|
62
|
+
lines.push(` ${label}: ${count}`);
|
|
63
|
+
}
|
|
64
|
+
lines.push('');
|
|
65
|
+
}
|
|
66
|
+
// Dead code 列表
|
|
67
|
+
if (result.items.length > 0) {
|
|
68
|
+
lines.push('Dead Code 列表:');
|
|
69
|
+
// 按檔案分組
|
|
70
|
+
const byFile = new Map();
|
|
71
|
+
result.items.forEach(item => {
|
|
72
|
+
const list = byFile.get(item.file) || [];
|
|
73
|
+
list.push(item);
|
|
74
|
+
byFile.set(item.file, list);
|
|
75
|
+
});
|
|
76
|
+
for (const [file, items] of byFile) {
|
|
77
|
+
lines.push(` ${this.colorize(file, Colors.cyan)}`);
|
|
78
|
+
items.slice(0, 10).forEach(item => {
|
|
79
|
+
const icon = this.getDeadCodeIcon(item.type);
|
|
80
|
+
lines.push(` ${icon} L${item.line}: ${item.name} (${item.type})`);
|
|
81
|
+
lines.push(` ${this.colorize(item.reason, Colors.dim)}`);
|
|
82
|
+
});
|
|
83
|
+
if (items.length > 10) {
|
|
84
|
+
lines.push(` ... 還有 ${items.length - 10} 個`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
lines.push(this.colorize('✅ 未發現 Dead Code', Colors.green));
|
|
90
|
+
}
|
|
91
|
+
return lines.join('\n');
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* 取得 Dead Code 圖示
|
|
95
|
+
*/
|
|
96
|
+
getDeadCodeIcon(type) {
|
|
97
|
+
switch (type) {
|
|
98
|
+
case 'function': return '⚡';
|
|
99
|
+
case 'class': return '📦';
|
|
100
|
+
case 'variable': return '📌';
|
|
101
|
+
case 'interface': return '📋';
|
|
102
|
+
case 'type': return '🏷️';
|
|
103
|
+
default: return '💀';
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=analyze-formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-formatter.js","sourceRoot":"","sources":["../../../../src/infrastructure/formatters/strategies/analyze-formatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 策略模式基底類別
|
|
3
|
+
* 提供共用常數、方法和介面定義
|
|
4
|
+
*/
|
|
5
|
+
import { type QueryResult } from '../query-types.js';
|
|
6
|
+
/** ANSI 顏色碼 */
|
|
7
|
+
export declare const Colors: {
|
|
8
|
+
readonly reset: "\u001B[0m";
|
|
9
|
+
readonly red: "\u001B[31m";
|
|
10
|
+
readonly green: "\u001B[32m";
|
|
11
|
+
readonly yellow: "\u001B[33m";
|
|
12
|
+
readonly cyan: "\u001B[36m";
|
|
13
|
+
readonly dim: "\u001B[2m";
|
|
14
|
+
readonly bold: "\u001B[1m";
|
|
15
|
+
};
|
|
16
|
+
/** 嚴重度對應的顏色和 emoji */
|
|
17
|
+
export declare const SeverityStyle: {
|
|
18
|
+
readonly critical: {
|
|
19
|
+
readonly color: "\u001B[31m";
|
|
20
|
+
readonly emoji: "🔴";
|
|
21
|
+
};
|
|
22
|
+
readonly high: {
|
|
23
|
+
readonly color: "\u001B[31m";
|
|
24
|
+
readonly emoji: "🟠";
|
|
25
|
+
};
|
|
26
|
+
readonly medium: {
|
|
27
|
+
readonly color: "\u001B[33m";
|
|
28
|
+
readonly emoji: "🟡";
|
|
29
|
+
};
|
|
30
|
+
readonly low: {
|
|
31
|
+
readonly color: "\u001B[32m";
|
|
32
|
+
readonly emoji: "🟢";
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* 查詢格式化策略介面
|
|
37
|
+
*/
|
|
38
|
+
export interface IQueryStrategy<T extends QueryResult = QueryResult> {
|
|
39
|
+
/** 格式化為 summary 格式 */
|
|
40
|
+
formatSummary(result: T): string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 基底格式化器
|
|
44
|
+
* 提供共用的格式化方法
|
|
45
|
+
*/
|
|
46
|
+
export declare abstract class BaseFormatter<T extends QueryResult = QueryResult> implements IQueryStrategy<T> {
|
|
47
|
+
protected readonly colorEnabled: boolean;
|
|
48
|
+
constructor(colorEnabled: boolean);
|
|
49
|
+
/** 格式化為 summary 格式(子類實作) */
|
|
50
|
+
abstract formatSummary(result: T): string;
|
|
51
|
+
/**
|
|
52
|
+
* 套用顏色(如果啟用)
|
|
53
|
+
*/
|
|
54
|
+
protected colorize(text: string, color: string): string;
|
|
55
|
+
/**
|
|
56
|
+
* 將絕對路徑轉換為相對路徑
|
|
57
|
+
* @param filePath 檔案路徑
|
|
58
|
+
* @param basePath 專案根目錄
|
|
59
|
+
* @returns 相對路徑(若無 basePath 則返回原路徑)
|
|
60
|
+
*/
|
|
61
|
+
protected toRelativePath(filePath: string, basePath?: string): string;
|
|
62
|
+
/**
|
|
63
|
+
* 取得類型標籤
|
|
64
|
+
*/
|
|
65
|
+
protected getTypeLabel(type: string): string;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=base-formatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-formatter.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/formatters/strategies/base-formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEpE,eAAe;AACf,eAAO,MAAM,MAAM;;;;;;;;CAQT,CAAC;AAEX,sBAAsB;AACtB,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;CAKhB,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW;IACjE,sBAAsB;IACtB,aAAa,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC;CAClC;AAED;;;GAGG;AACH,8BAAsB,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,YAAW,cAAc,CAAC,CAAC,CAAC;IACvF,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO;gBAArB,YAAY,EAAE,OAAO;IAEpD,4BAA4B;IAC5B,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM;IAEzC;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAOvD;;;;;OAKG;IACH,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAUrE;;OAEG;IACH,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAc7C"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 策略模式基底類別
|
|
3
|
+
* 提供共用常數、方法和介面定義
|
|
4
|
+
*/
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import { IssueSeverity } from '../query-types.js';
|
|
7
|
+
/** ANSI 顏色碼 */
|
|
8
|
+
export const Colors = {
|
|
9
|
+
reset: '\x1b[0m',
|
|
10
|
+
red: '\x1b[31m',
|
|
11
|
+
green: '\x1b[32m',
|
|
12
|
+
yellow: '\x1b[33m',
|
|
13
|
+
cyan: '\x1b[36m',
|
|
14
|
+
dim: '\x1b[2m',
|
|
15
|
+
bold: '\x1b[1m'
|
|
16
|
+
};
|
|
17
|
+
/** 嚴重度對應的顏色和 emoji */
|
|
18
|
+
export const SeverityStyle = {
|
|
19
|
+
[IssueSeverity.Critical]: { color: Colors.red, emoji: '🔴' },
|
|
20
|
+
[IssueSeverity.High]: { color: Colors.red, emoji: '🟠' },
|
|
21
|
+
[IssueSeverity.Medium]: { color: Colors.yellow, emoji: '🟡' },
|
|
22
|
+
[IssueSeverity.Low]: { color: Colors.green, emoji: '🟢' }
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* 基底格式化器
|
|
26
|
+
* 提供共用的格式化方法
|
|
27
|
+
*/
|
|
28
|
+
export class BaseFormatter {
|
|
29
|
+
colorEnabled;
|
|
30
|
+
constructor(colorEnabled) {
|
|
31
|
+
this.colorEnabled = colorEnabled;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 套用顏色(如果啟用)
|
|
35
|
+
*/
|
|
36
|
+
colorize(text, color) {
|
|
37
|
+
if (!this.colorEnabled) {
|
|
38
|
+
return text;
|
|
39
|
+
}
|
|
40
|
+
return `${color}${text}${Colors.reset}`;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 將絕對路徑轉換為相對路徑
|
|
44
|
+
* @param filePath 檔案路徑
|
|
45
|
+
* @param basePath 專案根目錄
|
|
46
|
+
* @returns 相對路徑(若無 basePath 則返回原路徑)
|
|
47
|
+
*/
|
|
48
|
+
toRelativePath(filePath, basePath) {
|
|
49
|
+
if (!basePath) {
|
|
50
|
+
return filePath;
|
|
51
|
+
}
|
|
52
|
+
if (!path.isAbsolute(filePath)) {
|
|
53
|
+
return filePath;
|
|
54
|
+
}
|
|
55
|
+
return path.relative(basePath, filePath);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* 取得類型標籤
|
|
59
|
+
*/
|
|
60
|
+
getTypeLabel(type) {
|
|
61
|
+
const labels = {
|
|
62
|
+
function: '函式',
|
|
63
|
+
class: '類別',
|
|
64
|
+
variable: '變數',
|
|
65
|
+
interface: '介面',
|
|
66
|
+
type: '型別',
|
|
67
|
+
property: '屬性',
|
|
68
|
+
method: '方法',
|
|
69
|
+
enum: '列舉',
|
|
70
|
+
constant: '常數'
|
|
71
|
+
};
|
|
72
|
+
return labels[type] || type;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=base-formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-formatter.js","sourceRoot":"","sources":["../../../../src/infrastructure/formatters/strategies/base-formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAoB,MAAM,mBAAmB,CAAC;AAEpE,eAAe;AACf,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,SAAS;IAChB,GAAG,EAAE,UAAU;IACf,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,UAAU;IAClB,IAAI,EAAE,UAAU;IAChB,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,SAAS;CACP,CAAC;AAEX,sBAAsB;AACtB,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;IAC5D,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;IACxD,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;IAC7D,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;CACjD,CAAC;AAUX;;;GAGG;AACH,MAAM,OAAgB,aAAa;IACF;IAA/B,YAA+B,YAAqB;QAArB,iBAAY,GAAZ,YAAY,CAAS;IAAG,CAAC;IAKxD;;OAEG;IACO,QAAQ,CAAC,IAAY,EAAE,KAAa;QAC5C,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACO,cAAc,CAAC,QAAgB,EAAE,QAAiB;QAC1D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACO,YAAY,CAAC,IAAY;QACjC,MAAM,MAAM,GAA2B;YACrC,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IAC9B,CAAC;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CallHierarchy 命令格式化策略
|
|
3
|
+
*/
|
|
4
|
+
import { type CallHierarchyResult } from '../query-types.js';
|
|
5
|
+
import { BaseFormatter } from './base-formatter.js';
|
|
6
|
+
/**
|
|
7
|
+
* CallHierarchy 結果格式化器
|
|
8
|
+
*/
|
|
9
|
+
export declare class CallHierarchyFormatter extends BaseFormatter<CallHierarchyResult> {
|
|
10
|
+
/**
|
|
11
|
+
* 格式化 CallHierarchy 摘要
|
|
12
|
+
*/
|
|
13
|
+
formatSummary(result: CallHierarchyResult): string;
|
|
14
|
+
/**
|
|
15
|
+
* 按檔案分組呼叫項目
|
|
16
|
+
*/
|
|
17
|
+
private groupCallsByFile;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=call-hierarchy-formatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call-hierarchy-formatter.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/formatters/strategies/call-hierarchy-formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,KAAK,mBAAmB,EAGzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAU,MAAM,qBAAqB,CAAC;AAE5D;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,aAAa,CAAC,mBAAmB,CAAC;IAC5E;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM;IA0DlD;;OAEG;IACH,OAAO,CAAC,gBAAgB;CASzB"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CallHierarchy 命令格式化策略
|
|
3
|
+
*/
|
|
4
|
+
import { BaseFormatter, Colors } from './base-formatter.js';
|
|
5
|
+
/**
|
|
6
|
+
* CallHierarchy 結果格式化器
|
|
7
|
+
*/
|
|
8
|
+
export class CallHierarchyFormatter extends BaseFormatter {
|
|
9
|
+
/**
|
|
10
|
+
* 格式化 CallHierarchy 摘要
|
|
11
|
+
*/
|
|
12
|
+
formatSummary(result) {
|
|
13
|
+
const lines = [];
|
|
14
|
+
// 標題與定義位置
|
|
15
|
+
lines.push(`📞 函數呼叫層次: ${result.function}`);
|
|
16
|
+
const defLoc = result.definitionLine
|
|
17
|
+
? `${result.file}:${result.definitionLine}`
|
|
18
|
+
: result.file;
|
|
19
|
+
lines.push(`📍 定義位置: ${this.colorize(defLoc, Colors.cyan)}`);
|
|
20
|
+
lines.push(`🔍 分析方向: ${result.direction}, 深度: ${result.depth}`);
|
|
21
|
+
lines.push('');
|
|
22
|
+
// Incoming(誰呼叫我)
|
|
23
|
+
if (result.direction === 'incoming' || result.direction === 'both') {
|
|
24
|
+
lines.push(`📥 呼叫者 (Incoming): ${result.incoming.length} 個`);
|
|
25
|
+
if (result.incoming.length > 0) {
|
|
26
|
+
const grouped = this.groupCallsByFile(result.incoming);
|
|
27
|
+
for (const [file, items] of grouped) {
|
|
28
|
+
lines.push(` ${this.colorize(file, Colors.cyan)}`);
|
|
29
|
+
items.slice(0, 10).forEach(item => {
|
|
30
|
+
lines.push(` ⬅️ ${item.caller} (L${item.line})`);
|
|
31
|
+
});
|
|
32
|
+
if (items.length > 10) {
|
|
33
|
+
lines.push(` ... 還有 ${items.length - 10} 個呼叫者`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
lines.push('');
|
|
38
|
+
}
|
|
39
|
+
// Outgoing(我呼叫誰)
|
|
40
|
+
if (result.direction === 'outgoing' || result.direction === 'both') {
|
|
41
|
+
lines.push(`📤 被呼叫者 (Outgoing): ${result.outgoing.length} 個`);
|
|
42
|
+
if (result.outgoing.length > 0) {
|
|
43
|
+
const grouped = this.groupCallsByFile(result.outgoing);
|
|
44
|
+
for (const [file, items] of grouped) {
|
|
45
|
+
lines.push(` ${this.colorize(file, Colors.cyan)}`);
|
|
46
|
+
items.slice(0, 10).forEach(item => {
|
|
47
|
+
lines.push(` ➡️ ${item.callee} (L${item.line})`);
|
|
48
|
+
});
|
|
49
|
+
if (items.length > 10) {
|
|
50
|
+
lines.push(` ... 還有 ${items.length - 10} 個被呼叫者`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
lines.push('');
|
|
55
|
+
}
|
|
56
|
+
// 統計
|
|
57
|
+
const uniqueFiles = new Set([
|
|
58
|
+
...result.incoming.map(i => i.file),
|
|
59
|
+
...result.outgoing.map(o => o.file)
|
|
60
|
+
]).size;
|
|
61
|
+
lines.push(`📊 統計: ${result.incoming.length} incoming, ${result.outgoing.length} outgoing, ${uniqueFiles} 個檔案`);
|
|
62
|
+
return lines.join('\n');
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* 按檔案分組呼叫項目
|
|
66
|
+
*/
|
|
67
|
+
groupCallsByFile(items) {
|
|
68
|
+
const byFile = new Map();
|
|
69
|
+
items.forEach(item => {
|
|
70
|
+
const list = byFile.get(item.file) || [];
|
|
71
|
+
list.push(item);
|
|
72
|
+
byFile.set(item.file, list);
|
|
73
|
+
});
|
|
74
|
+
return byFile;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=call-hierarchy-formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call-hierarchy-formatter.js","sourceRoot":"","sources":["../../../../src/infrastructure/formatters/strategies/call-hierarchy-formatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deps 命令格式化策略
|
|
3
|
+
*/
|
|
4
|
+
import { type DepsResult } from '../query-types.js';
|
|
5
|
+
import { BaseFormatter } from './base-formatter.js';
|
|
6
|
+
/**
|
|
7
|
+
* Deps 結果格式化器
|
|
8
|
+
*/
|
|
9
|
+
export declare class DepsFormatter extends BaseFormatter<DepsResult> {
|
|
10
|
+
/**
|
|
11
|
+
* 格式化 Deps 摘要
|
|
12
|
+
*/
|
|
13
|
+
formatSummary(result: DepsResult): string;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=deps-formatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deps-formatter.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/formatters/strategies/deps-formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAU,MAAM,qBAAqB,CAAC;AAE5D;;GAEG;AACH,qBAAa,aAAc,SAAQ,aAAa,CAAC,UAAU,CAAC;IAC1D;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;CAoC1C"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deps 命令格式化策略
|
|
3
|
+
*/
|
|
4
|
+
import { BaseFormatter, Colors } from './base-formatter.js';
|
|
5
|
+
/**
|
|
6
|
+
* Deps 結果格式化器
|
|
7
|
+
*/
|
|
8
|
+
export class DepsFormatter extends BaseFormatter {
|
|
9
|
+
/**
|
|
10
|
+
* 格式化 Deps 摘要
|
|
11
|
+
*/
|
|
12
|
+
formatSummary(result) {
|
|
13
|
+
const lines = [];
|
|
14
|
+
const basePath = result.basePath;
|
|
15
|
+
// 循環依賴
|
|
16
|
+
if (result.cycles && result.cycles.length > 0) {
|
|
17
|
+
lines.push(this.colorize(`發現 ${result.cycles.length} 個循環依賴`, Colors.red));
|
|
18
|
+
lines.push('');
|
|
19
|
+
result.cycles.forEach((cycle, index) => {
|
|
20
|
+
const formattedCycle = cycle.cycle.map(p => this.toRelativePath(p, basePath));
|
|
21
|
+
lines.push(`${index + 1}. ${formattedCycle.join(' → ')} → ${formattedCycle[0]}`);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
else if (!result.impact) {
|
|
25
|
+
// 只有在沒有 impact 分析時才顯示「未發現循環依賴」
|
|
26
|
+
lines.push(this.colorize('未發現循環依賴', Colors.green));
|
|
27
|
+
}
|
|
28
|
+
// 影響分析
|
|
29
|
+
if (result.impact) {
|
|
30
|
+
const targetFile = this.toRelativePath(result.impact.targetFile, basePath);
|
|
31
|
+
lines.push(`📊 影響分析: ${targetFile}`);
|
|
32
|
+
lines.push(` 依賴此檔案: ${result.impact.dependents.length} 個`);
|
|
33
|
+
lines.push(` 被此檔案依賴: ${result.impact.dependencies.length} 個`);
|
|
34
|
+
if (result.impact.dependents.length > 0) {
|
|
35
|
+
lines.push(' 依賴者:');
|
|
36
|
+
result.impact.dependents.slice(0, 5).forEach(dep => {
|
|
37
|
+
lines.push(` - ${this.toRelativePath(dep, basePath)}`);
|
|
38
|
+
});
|
|
39
|
+
if (result.impact.dependents.length > 5) {
|
|
40
|
+
lines.push(` ... 還有 ${result.impact.dependents.length - 5} 個`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return lines.join('\n');
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=deps-formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deps-formatter.js","sourceRoot":"","sources":["../../../../src/infrastructure/formatters/strategies/deps-formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE5D;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,aAAyB;IAC1D;;OAEG;IACH,aAAa,CAAC,MAAkB;QAC9B,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAEjC,OAAO;QACP,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACrC,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAC9E,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACnF,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC1B,+BAA+B;YAC/B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrD,CAAC;QAED,OAAO;QACP,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAC3E,KAAK,CAAC,IAAI,CAAC,YAAY,UAAU,EAAE,CAAC,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC;YAC7D,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,CAAC;YAChE,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtB,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBACjD,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC7D,CAAC,CAAC,CAAC;gBACH,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxC,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FindReferences 命令格式化策略
|
|
3
|
+
*/
|
|
4
|
+
import { type FindReferencesResult } from '../query-types.js';
|
|
5
|
+
import { BaseFormatter } from './base-formatter.js';
|
|
6
|
+
/**
|
|
7
|
+
* FindReferences 結果格式化器
|
|
8
|
+
*/
|
|
9
|
+
export declare class FindReferencesFormatter extends BaseFormatter<FindReferencesResult> {
|
|
10
|
+
/**
|
|
11
|
+
* 格式化 FindReferences 摘要
|
|
12
|
+
*/
|
|
13
|
+
formatSummary(result: FindReferencesResult): string;
|
|
14
|
+
/**
|
|
15
|
+
* 按檔案分組引用
|
|
16
|
+
*/
|
|
17
|
+
private groupReferencesByFile;
|
|
18
|
+
/**
|
|
19
|
+
* 取得引用類型圖示
|
|
20
|
+
*/
|
|
21
|
+
private getReferenceTypeIcon;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=find-references-formatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-references-formatter.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/formatters/strategies/find-references-formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,oBAAoB,EAAsB,MAAM,mBAAmB,CAAC;AAClF,OAAO,EAAE,aAAa,EAAU,MAAM,qBAAqB,CAAC;AAE5D;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,aAAa,CAAC,oBAAoB,CAAC;IAC9E;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM;IAyCnD;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAU7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAS7B"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FindReferences 命令格式化策略
|
|
3
|
+
*/
|
|
4
|
+
import { BaseFormatter, Colors } from './base-formatter.js';
|
|
5
|
+
/**
|
|
6
|
+
* FindReferences 結果格式化器
|
|
7
|
+
*/
|
|
8
|
+
export class FindReferencesFormatter extends BaseFormatter {
|
|
9
|
+
/**
|
|
10
|
+
* 格式化 FindReferences 摘要
|
|
11
|
+
*/
|
|
12
|
+
formatSummary(result) {
|
|
13
|
+
const lines = [];
|
|
14
|
+
// 標題
|
|
15
|
+
lines.push(`🔍 符號: ${result.symbol} (${result.type})`);
|
|
16
|
+
// 定義位置
|
|
17
|
+
if (result.definition) {
|
|
18
|
+
const defLoc = `${result.definition.file}:${result.definition.line}:${result.definition.column}`;
|
|
19
|
+
lines.push(`📍 定義: ${this.colorize(defLoc, Colors.cyan)}`);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
lines.push(this.colorize('⚠️ 找不到定義位置', Colors.yellow));
|
|
23
|
+
}
|
|
24
|
+
// 統計
|
|
25
|
+
const filesAffected = new Set(result.references.map(r => r.file)).size;
|
|
26
|
+
lines.push('');
|
|
27
|
+
lines.push(`📊 找到 ${result.references.length} 個引用(${filesAffected} 個檔案)`);
|
|
28
|
+
// 引用列表(按檔案分組)
|
|
29
|
+
if (result.references.length > 0) {
|
|
30
|
+
lines.push('');
|
|
31
|
+
lines.push('引用列表:');
|
|
32
|
+
const byFile = this.groupReferencesByFile(result.references);
|
|
33
|
+
for (const [file, refs] of byFile) {
|
|
34
|
+
lines.push(` ${this.colorize(file, Colors.cyan)}`);
|
|
35
|
+
refs.slice(0, 10).forEach(ref => {
|
|
36
|
+
const typeIcon = this.getReferenceTypeIcon(ref.type);
|
|
37
|
+
lines.push(` ${typeIcon} L${ref.line}: ${ref.context.trim()}`);
|
|
38
|
+
});
|
|
39
|
+
if (refs.length > 10) {
|
|
40
|
+
lines.push(` ... 還有 ${refs.length - 10} 個引用`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return lines.join('\n');
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* 按檔案分組引用
|
|
48
|
+
*/
|
|
49
|
+
groupReferencesByFile(references) {
|
|
50
|
+
const byFile = new Map();
|
|
51
|
+
references.forEach(ref => {
|
|
52
|
+
const list = byFile.get(ref.file) || [];
|
|
53
|
+
list.push(ref);
|
|
54
|
+
byFile.set(ref.file, list);
|
|
55
|
+
});
|
|
56
|
+
return byFile;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* 取得引用類型圖示
|
|
60
|
+
*/
|
|
61
|
+
getReferenceTypeIcon(type) {
|
|
62
|
+
switch (type) {
|
|
63
|
+
case 'definition': return '📌';
|
|
64
|
+
case 'import': return '📥';
|
|
65
|
+
case 'export': return '📤';
|
|
66
|
+
case 'usage':
|
|
67
|
+
default: return '📞';
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=find-references-formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-references-formatter.js","sourceRoot":"","sources":["../../../../src/infrastructure/formatters/strategies/find-references-formatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query 格式化策略模組
|
|
3
|
+
*/
|
|
4
|
+
export { BaseFormatter, Colors, SeverityStyle, type IQueryStrategy } from './base-formatter.js';
|
|
5
|
+
export { SearchFormatter } from './search-formatter.js';
|
|
6
|
+
export { DepsFormatter } from './deps-formatter.js';
|
|
7
|
+
export { AnalyzeFormatter } from './analyze-formatter.js';
|
|
8
|
+
export { SnapshotFormatter } from './snapshot-formatter.js';
|
|
9
|
+
export { FindReferencesFormatter } from './find-references-formatter.js';
|
|
10
|
+
export { CallHierarchyFormatter } from './call-hierarchy-formatter.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/formatters/strategies/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAChG,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query 格式化策略模組
|
|
3
|
+
*/
|
|
4
|
+
export { BaseFormatter, Colors, SeverityStyle } from './base-formatter.js';
|
|
5
|
+
export { SearchFormatter } from './search-formatter.js';
|
|
6
|
+
export { DepsFormatter } from './deps-formatter.js';
|
|
7
|
+
export { AnalyzeFormatter } from './analyze-formatter.js';
|
|
8
|
+
export { SnapshotFormatter } from './snapshot-formatter.js';
|
|
9
|
+
export { FindReferencesFormatter } from './find-references-formatter.js';
|
|
10
|
+
export { CallHierarchyFormatter } from './call-hierarchy-formatter.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/infrastructure/formatters/strategies/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAuB,MAAM,qBAAqB,CAAC;AAChG,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Search 命令格式化策略
|
|
3
|
+
*/
|
|
4
|
+
import { type SearchResult } from '../query-types.js';
|
|
5
|
+
import { BaseFormatter } from './base-formatter.js';
|
|
6
|
+
/**
|
|
7
|
+
* Search 結果格式化器
|
|
8
|
+
*/
|
|
9
|
+
export declare class SearchFormatter extends BaseFormatter<SearchResult> {
|
|
10
|
+
/**
|
|
11
|
+
* 格式化 Search 摘要
|
|
12
|
+
*/
|
|
13
|
+
formatSummary(result: SearchResult): string;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=search-formatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-formatter.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/formatters/strategies/search-formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAU,MAAM,qBAAqB,CAAC;AAE5D;;GAEG;AACH,qBAAa,eAAgB,SAAQ,aAAa,CAAC,YAAY,CAAC;IAC9D;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;CAuB5C"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Search 命令格式化策略
|
|
3
|
+
*/
|
|
4
|
+
import { BaseFormatter, Colors } from './base-formatter.js';
|
|
5
|
+
/**
|
|
6
|
+
* Search 結果格式化器
|
|
7
|
+
*/
|
|
8
|
+
export class SearchFormatter extends BaseFormatter {
|
|
9
|
+
/**
|
|
10
|
+
* 格式化 Search 摘要
|
|
11
|
+
*/
|
|
12
|
+
formatSummary(result) {
|
|
13
|
+
const lines = [];
|
|
14
|
+
lines.push(`找到 ${result.results.length} 個結果`);
|
|
15
|
+
if (result.searchTime) {
|
|
16
|
+
lines.push(`搜尋耗時: ${result.searchTime}ms`);
|
|
17
|
+
}
|
|
18
|
+
if (result.truncated) {
|
|
19
|
+
lines.push(this.colorize('(結果已截斷)', Colors.yellow));
|
|
20
|
+
}
|
|
21
|
+
lines.push('');
|
|
22
|
+
result.results.forEach(match => {
|
|
23
|
+
const location = match.column
|
|
24
|
+
? `${match.filePath}:${match.line}:${match.column}`
|
|
25
|
+
: `${match.filePath}:${match.line}`;
|
|
26
|
+
lines.push(this.colorize(location, Colors.cyan));
|
|
27
|
+
lines.push(` ${match.content}`);
|
|
28
|
+
});
|
|
29
|
+
return lines.join('\n');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=search-formatter.js.map
|