代码关系图生成工具

一个静态分析CLI工具,用于生成代码库的关系图(类、函数、导入、调用图、类型依赖等),并通过MCP协议暴露给AI编码助手,使其无需每次会话重新扫描项目。

  • by EdmundHee
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 EdmundHee/codemap

使用说明

代码图

一个静态分析CLI,它生成代码库的关系图——类、函数、导入、调用图、类型依赖关系——并通过MCP公开它们,这样AI编码助手就可以理解你的项目,而无需在每个会话中都重新扫描。

为什么

每次AI助手处理你的代码时,它都会花费代币来探索代码库:为函数进行grepping、读取文件、跟踪导入、从头开始构建心智模型。在大型项目中,这意味着需要调用10到20次工具来了解一个功能是如何连接的。

codemap会预先执行一次。它解析您的整个代码库,构建所有关系的结构化JSON映射,并通过MCP按需提供服务。而不是:

grep "createOrder" → 8 files → read file 1 → see import → read file 2 → grep again...

助理会:

codemap_query("createOrder") → defined in orders/service.ts, calls [validatePayment, calculateTotal],
                                called by [OrderController.create, checkout.handler]

一个电话,而不是十个。

术语

术语 含义
代码映射 生成的JSON+Markdown输出描述了项目的结构和关系
调用图 哪些函数调用哪些其他函数的映射
反向调用图 反向-哪些函数由哪些调用者调用(对于死代码检测和影响分析很有用)
导入图形 文件级依赖关系树,显示哪些文件从哪些其他文件导入
模块 项目中的一个目录,在代码映射输出中被视为一个逻辑单元
主控程序 模型上下文协议——人工智能工具发现和使用外部功能的标准
框架检测 从配置文件和依赖关系中自动识别框架(Express、FastAPI等)

安装

# Install globally via npm
npm install -g @gingerdev/codemap-cli

# Or install as a project dependency (auto-creates Claude Code commands)
npm install @gingerdev/codemap-cli

需要Node.js>=18。

快速开始

# Generate a codemap for your project
cd /path/to/your/project
codemap init          # creates .codemaprc
codemap generate      # parses codebase, writes .codemap/

# Query from CLI
codemap query --search "createOrder"
codemap query --function "validatePayment"
codemap query --callers "UserService.create"
codemap query --class "OrderController"

# Connect to Claude Code via MCP
claude mcp add codemap -- codemap-mcp /path/to/your/project

命令

codemap init

创建一个 .codemaprc 具有自动检测的包含目录和默认排除的配置文件。

codemap init                  # create config in current directory
codemap init --path ./myapp   # create config in a specific directory
codemap init --force          # overwrite existing config

codemap generate

解析代码库并生成代码映射输出。

codemap generate              # generate in current directory
codemap generate --path ./app # generate for a specific project

输出被写入 .codemap/:

.codemap/
├── codemap.json       # Full structured data (classes, functions, call graphs, etc.)
├── codemap.md         # Compact root summary (~1500-2000 lines for large projects)
├── modules/           # Per-directory detailed markdown files
│   ├── src__core.md
│   ├── src__api.md
│   └── ...
└── .hashes            # Content hashes for change detection

codemap query

搜索并检查生成的代码图。

codemap query --function <name>     # Query a function by name
codemap query --class <name>        # Query a class
codemap query --file <path>         # Query a file (partial match supported)
codemap query --module <dir>        # Query a directory/module
codemap query --type <name>         # Query a type/interface
codemap query --search <term>       # Search across everything
codemap query --callers <name>      # Show what calls a function
codemap query --calls <name>        # Show what a function calls
codemap query --json                # Output as JSON

codemap analyze

对生成的代码图运行结构分析以查找问题。

codemap analyze --dead-code         # Detect unused functions and methods
codemap analyze --duplicates        # Detect redundant/duplicate functions
codemap analyze --circular          # Detect circular dependencies
codemap analyze --all               # Run all checks at once
codemap analyze --all --json        # Output raw JSON for scripting

codemap health

显示项目健康评分(0-100),包括指标、热点和耦合数据。

codemap health                      # Show full health report
codemap health --summary            # One-line score only
codemap health --json               # Output raw JSON
codemap health --gate               # Exit code 1 if below threshold (CI mode)
codemap health --gate --threshold 80  # Custom minimum score
codemap health --no-degrade         # Fail if score dropped from last run

健康评分因素包括复杂性、死代码、上帝类、嵌套深度和模块耦合。跑 codemap generate 至少两次查看趋势数据。

codemap diff

显示自上次代码映射生成以来代码库中发生了哪些更改。

codemap diff                        # Show changes since last generation
codemap diff --update               # Show changes, then regenerate

配置

这 .codemaprc 文件控制扫描的内容和方式。由...创建 codemap init.

{
  "include": ["."],
  "exclude": [
    "node_modules",
    "__pycache__",
    "dist",
    "build",
    "lib",
    ".git",
    ".codemap",
    "*.test.*",
    "*.spec.*",
    "*.min.*",
    "coverage",
    "vendor",
    ".next",
    ".nuxt",
    "venv",
    ".venv",
    "env",
    ".env",
    ".tox",
    "eggs",
    "*.egg-info",
    ".mypy_cache",
    ".pytest_cache",
    ".ruff_cache",
    "site-packages",
    "migrations"
  ],
  "projects": [
    "/path/to/project-a",
    { "name": "my-api", "root": "/path/to/project-b" }
  ]
}
字段 描述
include 要扫描的目录。 ["."] 从根开始扫描所有内容。
exclude 要排除的模式。支持目录名和glob模式。
projects (仅限MCP)多项目MCP服务器的项目路径列表。
framework 覆盖框架检测(默认:自动检测)。
output 输出目录(默认: .codemap).
detail "full" 对于完整的签名, "names-only" 以实现紧凑的输出。
features 切换特定分析: call_graph, import_graph, routes, models, types, data_flow, config_deps, middleware.

MCP服务器(克劳德代码集成)

MCP服务器将代码映射数据作为Claude Code可以自动调用的工具公开。

设置

# Single project
claude mcp add codemap -- codemap-mcp /path/to/your/project

# Multiple projects via CLI args
claude mcp add codemap -- codemap-mcp ~/Work/project-a ~/Work/project-b

# Multiple projects via .codemaprc (reads "projects" field)
claude mcp add codemap -- codemap-mcp

对于基于配置的方法,添加 projects 阵列到 ~/.codemaprc 或者你的项目 .codemaprc.

可用的MCP工具

工具 说明 参数
codemap_projects 列出所有已注册的项目及其状态 无
codemap_overview 项目摘要:模块、框架、语言、文件计数、依赖关系 project?
codemap_module 特定目录的详细信息 directory, project?
codemap_query 按函数、类、类型或文件名搜索(精确+模糊) name, project?
codemap_callers 查找调用给定函数的内容 name, project?
codemap_calls 查找给定函数调用的内容 name, project?

这 project 当只注册了一个项目时,参数是可选的。对于多个项目,Claude Code将根据上下文选择合适的项目。

Claude代码命令

codemap附带了Claude Code的斜线命令,使用MCP工具编排多步骤工作流。这些是在中自动创建的 .claude/commands/ 当你跑步时 codemap init, codemap generate,或 npm install @gingerdev/codemap-cli.

命令 描述
/codemap-explore 了解项目结构和架构
/codemap-find-reusable 在编写新函数之前搜索要重用的现有代码
/codemap-impact 在重构或修改代码之前分析爆炸半径
/codemap-plan 创建基于实际代码结构的实施计划
/codemap-health-review 审查代码质量,确定下一步重构什么
/codemap-refresh 源文件更改时重新生成代码映射

命令接受名称后的参数。例如:

/codemap-find-reusable config parsing logic
/codemap-impact UserService.validate
/codemap-plan add WebSocket support

语言支持

语言 解析器 文件扩展名 功能
TypeScript的变体 .ts, .tsx 类、函数、导入、导出、类型、接口、枚举、装饰器、调用表达式、环境变量
JavaScript 变形 .js, .jsx, .mjs, .cjs 与TypeScript相同
Python 网络树保姆(WASM) .py 具有继承、函数和导入的类(import/from),装饰器,类型提示, __all__ 出口,环境变量(os.environ, os.getenv)
Vue Vue解析器+TS变形 .vue 提取物 <script setup> 或 <script> 用于全TS分析的块。捕获 <template> 调用图中的组件引用(PascalCase和kebab case)。

Python特定功能

  • 命名约定中的方法访问级别(_protected, __private, public)
  • __all__ 出口清单检测
  • 支持 import x, from x import y,以及 from . import z 模式
  • 异步函数检测

Vue特定功能

  • 较喜欢 <script setup> 结束 <script> 当两者都存在时
  • 模板组件引用(<UserCard>, <base-modal>)出现在调用图中
  • 共享TypeScript解析器实例以提高效率

框架检测

codemap从您的配置文件和依赖关系中自动检测框架:

框架 检测方法
快递 express 在package.json中(不含NestJS)
NestJS。 @nestjs/core 在package.json中
FastAPI fastapi 在requirements.txt/pyproject.toml中
Django django 在requirements.txt或 manage.py 存在
烧瓶 flask 在requirements.txt/pyproject.toml中
普里斯马 prisma/schema.prisma 存在
序列化 sequelize 在package.json中
猫鼬 mongoose 在package.json中
类型ORM typeorm 在package.json中
SQL炼金术 sqlalchemy 在requirements.txt/pyproject.toml中

降噪

codemap过滤掉会使输出膨胀和浪费令牌的噪声:

  • 内置通话已过滤:JS/TS内置(map, filter, push, JSON.stringify等)和Python内置(isinstance, len, str, range等)从调用图中删除
  • 已筛选测试断言: assertEqual, pytest.raises等等。
  • 链表达式已折叠: foo.bar().baz().qux() → foo.bar
  • 类型签名已截断:详细 Annotated[bool, Doc("200 lines...")] → bool (120个字符限制)
  • self./this. 剥离的:标准化以获得更清晰的调用图

依赖项跟踪

codemap从清单文件中提取依赖版本,而不扫描库源代码:

  • Node.js: package.json (依赖关系、devDependencies、对等依赖关系)
  • python: requirements.txt, requirements-dev.txt, pyproject.toml

输出结构

JSON(codemap.json)

完整的结构化输出包含:

project         → name, languages, frameworks, entry points
files           → per-file: language, hash, exports, imports
classes         → per-class: file, extends, implements, decorators, methods, properties
functions       → per-function: file, params, return type, calls, called_by
types           → per-type: file, kind, extends, properties
call_graph      → caller → [callees]
import_graph    → file → [imported files]
dependencies    → package versions from manifests
config_deps     → env var usage across files

Markdown(codemap.md)

为AI上下文窗口设计的紧凑的目录级根摘要。包括模块计数、按目录分组的类/函数列表、依赖关系和env-var使用情况。大型项目通常需要1500-2000条生产线。

模块文件(modules/*.md)

每个目录的详细文件,包含完整的函数签名、call/acalled_by关系和导入图。由MCP使用 codemap_module 用于按需深潜的工具。

使用Claude代码挂钩自动更新

使用克劳德代码 SessionStart 钩子用于在源文件发生更改时自动重新生成代码映射。这运行 codemap check 在每个会话开始时--如果任何源文件比 codemap.json在克劳德开始工作之前,它就会再生。

将此添加到您的项目 .claude/settings.json:

{
  "hooks": {
    "SessionStart": [
      {
        "matcher": "startup",
        "hooks": [
          {
            "type": "command",
            "command": "codemap check || codemap generate"
          }
        ]
      }
    ]
  }
}

这仅在会话启动时运行(不在恢复/压缩时运行)。 codemap check 如果新鲜,则返回代码0,如果过时,则返回1,如果缺失,则返回2——因此 || 触发器 codemap generate 只有在需要的时候。

新鲜度检查

您还可以手动检查陈旧性:

codemap check              # shows which files changed
codemap check --quiet      # exit code only (0=fresh, 1=stale, 2=missing)

建筑

src/
├── cli/                  # CLI entry point and commands
│   ├── index.ts          # Commander setup
│   └── commands/         # generate, init, query, check, analyze, diff, health
├── core/                 # Core logic
│   ├── config.ts         # .codemaprc loading and defaults
│   ├── scanner.ts        # File discovery (fast-glob)
│   ├── orchestrator.ts   # Main pipeline: scan → parse → analyze → output
│   └── query-engine.ts   # Shared query logic (CLI + MCP)
├── parsers/              # Language-specific AST parsers
│   ├── parser.interface.ts
│   ├── typescript/       # ts-morph based
│   ├── python/           # web-tree-sitter WASM based
│   └── vue/              # Script extraction + TS delegation
├── analyzers/            # Structural analysis
│   ├── call-graph.ts     # Forward + reverse call graph with method resolution
│   ├── import-graph.ts   # File → imports mapping
│   ├── coupling.ts       # Module coupling metrics (afferent/efferent/instability)
│   ├── dead-code.ts      # Dead code detection from reverse call graph
│   ├── duplicates.ts     # Duplicate function detection
│   └── circular-deps.ts  # Circular dependency detection
├── frameworks/           # Auto-detection
│   └── detector.ts
├── output/               # Generators
│   ├── json-generator.ts # Full JSON output
│   └── md-generator.ts   # Compact MD + per-directory modules
├── mcp/                  # MCP server
│   ├── server.ts         # Multi-project MCP with stdio transport
│   └── formatters.ts     # Markdown formatters for MCP tool output
└── utils/
    ├── call-filter.ts    # Noise reduction (built-in filtering, type truncation)
    ├── logger.ts
    └── file-utils.ts

许可证

麻省理工学院