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