sem支持32种编程语言完整清单:从TypeScript到SQL的代码diff利器
sem支持32种编程语言完整清单从TypeScript到SQL的代码diff利器【免费下载链接】semSemantic version control entity-level diffs, blame, and impact analysis on top of git. 28 languages via tree-sitter. Built for coding agents.项目地址: https://gitcode.com/gh_mirrors/sem7/semsem是一款构建在 Git 之上的语义化版本控制工具它通过 tree-sitter 解析代码把每个函数、类、方法提取为实体entity在实体级别做 diff而不是行级别。一句话概括——git 告诉你第 32 到 38 行被修改了sem 告诉你authenticateUser函数被修改了。 为什么需要实体级代码diff传统git diff的输出是行号变化存在两个痛点噪音多一次代码格式化或注释修改会产生几十个假变化信息量低你无法立刻知道哪个函数坏了、影响哪些调用方sem 用三阶段实体匹配精确 ID 匹配 → 结构哈希匹配 → 模糊相似度 80% 判定重命名解决这个问题能识别重命名和移动还能区分纯格式改动和真实逻辑改动。 32种编程语言支持清单核心功能一览sem 对以下 32 种编程语言提供完整的实体提取能力无需任何配置放进任意 Git 仓库即可用#语言文件扩展名可提取的实体1TypeScript.ts.tsx.mts.cts函数、类、接口、类型、枚举、导出2JavaScript.js.jsx.mjs.cjs.es6函数、类、变量、导出3Python.py.pyi函数、类、带装饰器定义4Go.go函数、方法、类型、变量、常量5Rust.rs函数、结构体、枚举、impl、trait、模块6Java.java类、方法、接口、枚举、字段、构造器7C.c.h函数、结构体、枚举、联合体、typedef8C.cpp.cc.cxx.hpp.hh.hxx函数、类、结构体、枚举、命名空间、模板9C#.cs类、方法、接口、枚举、结构体、属性10Ruby.rb方法、类、模块11PHP.php.inc.phtml.module函数、类、方法、接口、trait、枚举12Swift.swift函数、类、协议、结构体、枚举、属性13Elixir.ex.exs模块、函数、宏、guard、协议14Bash.sh函数15Fish.fish函数16Lua.lua函数全局/局部/表方法等17HCL/Terraform.hcl.tf.tfvars块、属性嵌套块限定名18Kotlin.kt.kts类、接口、对象、函数、属性、伴生对象19Fortran.f90.f95.f03.f08.f.for函数、子程序、模块、程序20Vue.vue模板/脚本/样式块 内部 TS/JS 实体21XML.xml.plist.svg.csproj等元素嵌套、标签名识别22ERB.erb.html.erb块、表达式、代码标签23Svelte.svelte.svelte.js.svelte.ts组件块 rune JS/TS 模块24Perl.pl.pm.t子程序、包25Dart.dart类、mixin、扩展、枚举、类型别名、函数26OCaml.ml.mli值、模块、类型、类、外部声明27Scala.scala.sc.sbt.kojo.mill类、对象、trait、枚举、函数、val、扩展28Nix.nix绑定、inherit 声明29Haskell.hs函数、签名、数据类型、newtype、类、实例30Elm.elm值/类型/端口/中缀声明31Clojure.clj.cljs.cljcvar、函数、宏、多方法、协议、记录、类型32D.d.di模块、函数、类、结构体、接口、模板、别名️ SQL数据库脚本也能做语义diff清单中的SQL.sql.psql.pgsql.ddl特别值得一提——它可以提取表、视图、函数、索引、类型、schema、触发器、序列等实体。改数据库迁移脚本时sem diff 能直接告诉你users表结构和get_order函数被修改了而不是让你面对几百行文本差异。 额外支持的结构化数据格式除 32 种编程语言外sem 还内置了 7 种数据格式插件JSON、YAML、TOML、EDN、CSV、Markdown、LaTeX分别把属性路径、节、行、标题、章节提取为实体。其余文件自动退化为分块 diff不会报错。 特殊扩展名可以写.semrc映射无扩展名文件会自动嗅探shebang、vim modeline、package/import等结构启发式覆盖 30 种语言。⚡ 3分钟上手安装与核心命令一键安装 sem 的多种方法# HomebrewmacOS / Linux brew install sem-cli # npm安装到 node_modules用 npx sem 调用 npm install --save-dev ataraxy-labs/sem # Cargo从源码安装 cargo install sem-cli之后随时用sem update升级到最新版本。最高频的 5 个命令命令作用典型用法sem diff实体级 diff含重命名检测与词级高亮sem diff --format jsonsem impact跨文件依赖图改这个实体会波及谁sem impact authenticateUser --depssem blame实体级 blame谁最后改了每个函数sem blame src/auth.tssem log追踪单个实体的演化历史sem log authenticateUser -vsem find/sem grep冷启动快速定位定义在哪、谁在调用sem callers diff_command执行sem setup后git diff会自动输出实体级结果所有调用git diff的工具包括 AI 编程代理都无需改动即可获得 sem 输出。 为 AI 编程代理而生MCP 集成sem 内置 MCPModel Context Protocol服务一条命令即可接入 Claude Code 等客户端claude mcp add sem -- sem mcp代理将获得 8 个实体级工具sem_entities、sem_diff、sem_blame、sem_impact、sem_log、sem_context、sem_find、sem_grep。相比 grep 可能漏掉调用方代理可以直接问如果我改submitOrder什么会坏从依赖图获得确定性答案省 token 又不漏依赖。 项目结构与延伸阅读模块说明crates/sem-core/核心解析引擎实体提取、图构建、增量索引crates/sem-cli/命令行入口与各子命令实现crates/sem-mcp/MCP 服务器实现action/GitHub Action每个 PR 自动生成实体级评论docs/llms.txt面向 AI 的精简文档CONTRIBUTING.md如何为 sem 添加新语言只需配置依赖零解析器代码每种语言的实体提取规则都在 crates/sem-core/src/parser/plugins/code/languages.rs 中声明式定义AST 节点类型 → 实体类型映射这也是 32 种语言能低成本覆盖的原因。✅ 一句话总结无论你的仓库是 TypeScript 前端、Python 后端、Rust 系统组件还是 SQL 迁移脚本sem 都能把代码 diff 从行升级到函数/类级别——支持 32 种语言开箱即用并为 AI 编程代理提供实体级上下文。【免费下载链接】semSemantic version control entity-level diffs, blame, and impact analysis on top of git. 28 languages via tree-sitter. Built for coding agents.项目地址: https://gitcode.com/gh_mirrors/sem7/sem创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考