sem:一种语义化版本控制工具,能够在实体层面(而非行)跟踪代码更改
sem:一种语义化版本控制工具,能够在实体层面(而非行)跟踪代码更改
它解决了什么问题
传统的版本控制系统(如 Git)是按文本行来跟踪更改的,这往往会掩盖实际的逻辑改动。sem 通过在实体层面(函数、类、方法)而不是行来跟踪更改,实现了语义化版本控制,使人们更容易理解代码到底发生了哪些实际变化。
工作原理
sem 作为 Git 之上的一层运行。它使用 tree-sitter 解析 32 种编程语言和结构化数据格式,将实体提取为独立的对象。它采用三阶段匹配流程——精确 ID 匹配、结构哈希(忽略空白和注释)以及模糊相似度——来检测逻辑的重命名和移动,而不仅仅是新增和删除。
适用人群
- 开发者:希望获得更有意义的 diff 和变更影响分析。
- AI 编码代理:需要精确、令牌高效的上下文(通过 Model Context Protocol)来理解依赖关系并在不读取整个文件的情况下重构代码。
- CI/CD 流水线:需要结构化的 JSON 输出以实现自动化代码分析。
亮点
- 实体级 Diff:精准查看哪些函数或类被修改、重命名或移动。
- 影响分析:跨文件依赖图,帮助识别如果修改特定实体会导致哪些地方出错。
- LLM 上下文优化:
context命令为 AI 代理提供令牌预算内的实体及其依赖片段。 - MCP 服务器:内置对 Model Context Protocol 的支持,使 AI 代理能够将
sem工具作为原生技能使用。 - 广泛语言支持:对 32 种语言提供完整的实体提取,包括 TypeScript、Python、Rust、Go 和 Java。
- Git 集成:可通过
sem setup将其配置为默认的git diff输出。
Sources
- undefinedAtaraxy-Labs/sem