SuperAPI AI 工具集

sem-semantic-diff

通用与其它

查看项目

更新于 10-15 23:45

技能介绍

用途:sem 是一款语义版本控制工具,关注函数、类与类型而非纯文本行,用于本地代码库导航、结构化差异与历史查看,以及仓库内部影响分析。

主要能力:sem 为本地仓库中定义的类、函数、方法、属性构建精确的语义依赖图;在提交之间展示实体新增、修改、重命名或删除,不受格式与空白干扰;支持追踪本地实体的传递影响(sem impact)与调用者/被调用者(sem graph);并可列出实体、查看语义 blame、语义 log,以及为 LLM 上下文输出按 token 预算的实体上下文。

常用方式:sem diff 查看工作区或提交间的语义变化,支持 --staged、--commit、--from/--to、-v、--format json;sem impact <entity_name> 执行影响分析,支持 --entity-id、--file、--deps、--dependents、--tests、--depth;sem graph 查看依赖图;sem blame <file_path>;sem log <entity_name>;sem context <entity_name> --budget 8000;sem entities [PATH] 列出实体。实体名称可通过 sem entities、sem diff 输出或 JSON 中的 entity_id 获取;名称歧义时用 --file 或 --entity-id 消歧,如 sem impact --entity-id "src/utils.ts::function::setup"。程序化解析时统一使用 --format json,并用 --file-exts 过滤大型代码库。

限制:sem 只索引本地仓库源码中定义的实体,不解析或跟踪外部包及传递库依赖(如 pubspec.yaml、node_modules、Cargo.toml 等);对外部类型(如外部包的 DartType 或 ClassElement)运行 sem impact 会报 Entity '...' not found。涉及外部包时,应先用 grep 或 ripgrep 找到 import 与本地包装类或辅助函数,再对本地实体使用 sem impact。在超大代码库上,首次生成依赖图可能耗时较长,可将命令异步执行并轮询任务状态,或重定向输出到文件后台运行。官方未提供收费、价格与平台支持等资料。