使用说明
代码图
一个静态分析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
许可证
麻省理工学院
