SuperAPI AI 工具集

ts-morph-analyzer

编程与开发

查看项目

更新于 10-16 01:59

技能介绍

概述

ts-morph-analyzer 是一个基于 ts-morph 的轻量级代码库分析工具,用于提取签名、JSDoc 和调用链,避免用完整文件读取占满上下文。其核心原则是:以最少的 token 用量获得最大的架构洞察。

适用场景

  • 快速理解代码库的公开 API:使用 extract-signatures.ts
  • 通过函数调用追踪缺陷:使用 trace-calls.ts
  • 梳理某个模块导出了什么:使用 analyze-exports.ts
  • 在深入之前检测架构问题:使用 code-smells.ts
  • 理解 import/依赖结构:使用 analyze-exports.ts --deps

安装

在技能目录中执行:

cd ~/.claude/skills/ts-morph-analyzer
npm install

或运行安装脚本:

~/.claude/skills/ts-morph-analyzer/setup.sh

主要能力与使用方式

提取签名(最常用)

获取函数/方法签名与 JSDoc,无需读取完整文件:

# 文件中的所有签名
npx ts-node scripts/extract-signatures.ts src/api/users.ts

# 目录中的所有签名(递归)
npx ts-node scripts/extract-signatures.ts src/

# 仅筛选导出的内容
npx ts-node scripts/extract-signatures.ts src/ --exported

# 包含类型与接口
npx ts-node scripts/extract-signatures.ts src/ --types

# 以 JSON 输出以便后续处理
npx ts-node scripts/extract-signatures.ts src/ --json

输出示例:

// src/api/users.ts

/**
 * Fetches user by ID from the database
 * @param id - User's unique identifier
 * @returns User object or null if not found
 */
export async function getUser(id: string): Promise<User | null>

/**
 * Creates a new user account
 * @throws ValidationError if email is invalid
 */
export async function createUser(data: CreateUserInput): Promise<User>

追踪调用层级

向上追踪(谁调用了这个函数?)或向下追踪(这个函数调用了什么?):

# 谁调用了这个函数?
npx ts-node scripts/trace-calls.ts src/api/users.ts:getUser --up

# 这个函数调用了什么?
npx ts-node scripts/trace-calls.ts src/api/users.ts:getUser --down

# 完整调用链(双向,限制深度)
npx ts-node scripts/trace-calls.ts src/api/users.ts:getUser --depth 3

# 以树形输出
npx ts-node scripts/trace-calls.ts src/api/users.ts:getUser --tree

输出示例(--up):

getUser (src/api/users.ts:15)
├── called by: handleGetUser (src/routes/users.ts:23)
│   └── called by: router.get('/users/:id') (src/routes/users.ts:8)
├── called by: validateSession (src/middleware/auth.ts:45)
└── called by: getUserProfile (src/services/profile.ts:12)

分析导出

梳理模块的公开 API 表面:

# 这个模块导出了什么?
npx ts-node scripts/analyze-exports.ts src/api/

# 包含重新导出
npx ts-node scripts/analyze-exports.ts src/ --follow-reexports

# 显示依赖图
npx ts-node scripts/analyze-exports.ts src/ --deps

检测代码异味

快速进行架构评估:

# 完整分析
npx ts-node scripts/code-smells.ts src/

# 特定检查
npx ts-node scripts/code-smells.ts src/ --check circular-deps
npx ts-node scripts/code-smells.ts src/ --check large-functions
npx ts-node scripts/code-smells.ts src/ --check missing-jsdoc
npx ts-node scripts/code-smells.ts src/ --check many-params

架构评估模式

分析一个新代码库以发现潜在问题时:

1. 先看公开 API 表面

# 了解全貌:导出了什么?
npx ts-node scripts/extract-signatures.ts src/ --exported --json > api-surface.json

关注点:过度复杂的接口、命名不一致、公开 API 缺失 JSDoc。

2. 依赖结构

# 梳理 import——循环依赖是危险信号
npx ts-node scripts/code-smells.ts src/ --check circular-deps

关注点:循环依赖、过深的 import 链、模块边界不清晰。

3. 函数复杂度

# 找出可能需要重构的复杂函数
npx ts-node scripts/code-smells.ts src/ --check large-functions --check many-params

关注点:超过 50 行的函数、超过 5 个参数、过深的嵌套。

4. 文档覆盖率

# 公开 API 应当有文档
npx ts-node scripts/code-smells.ts src/ --check missing-jsdoc --exported

追踪数据流

调试时,无需读取完整文件即可追踪数据流:

模式:“这个值来自哪里?”

# 1. 找到调用该函数并传入错误值的地方
npx ts-node scripts/trace-calls.ts src/service.ts:processData --up --depth 5

# 2. 获取调用者的签名以理解参数流向
npx ts-node scripts/extract-signatures.ts src/caller.ts

模式:“这个返回值去了哪里?”

# 1. 找到谁使用了该函数的返回值
npx ts-node scripts/trace-calls.ts src/api.ts:fetchUser --down

# 2. 查看返回值如何被消费
npx ts-node scripts/trace-calls.ts src/api.ts:fetchUser --down --show-usage

模式:“某个缺陷的完整调用链”

# 获取从入口点到问题区域的完整路径
npx ts-node scripts/trace-calls.ts src/broken.ts:problematicFn --up --tree

脚本位置

所有脚本位于:~/.claude/skills/ts-morph-analyzer/scripts/

脚本 用途
extract-signatures.ts 提取函数/方法/类签名及 JSDoc
trace-calls.ts 向上/向下追踪调用层级
analyze-exports.ts 梳理模块导出与依赖
code-smells.ts 检测架构问题

常见问题

问题 解决方案
“Cannot find module 'ts-morph'” 在技能目录中运行 npm install
大型代码库上运行缓慢 添加 --include "src/**/*.ts" 限制范围
缺失类型信息 确保项目根目录存在 tsconfig.json
内存问题 使用 --exclude "node_modules"(默认)