sem:一款在實體層級(而非行)追蹤程式碼變更的語意化版本控制工具
sem:一款在實體層級(而非行)追蹤程式碼變更的語意化版本控制工具
它解決了什麼問題
傳統的版本控制系統(如 Git)是以文字行為單位追蹤變更,往往會掩蓋實際的邏輯變動。sem 透過在實體層級(函式、類別、方法)追蹤變更,提供語意化的版本控制,使得了解程式碼到底改了什麼變得更容易。
工作原理
sem 作為 Git 之上的一層運作。它使用 tree-sitter 解析 32 種程式語言與結構化資料格式,將實體抽取為獨立的物件。接著透過三階段匹配流程——精確 ID 匹配、結構雜湊(忽略空白與註解)以及模糊相似度——來偵測邏輯的重新命名與搬移,而不僅僅是新增與刪除。
適用對象
- 開發者:希望獲得更具意義的 diff 與變更影響分析。
- AI 程式編寫代理:需要精確且具 token 效率的上下文(透過 Model Context Protocol)來理解相依性並在不讀整個檔案的情況下重構程式碼。
- CI/CD 流程:需要結構化的 JSON 輸出以進行自動化程式碼分析。
重點特色
- 實體層級 Diff:精確看到哪些函式或類別被修改、重新命名或搬移。
- 影響分析:跨檔案的相依圖,指出若修改特定實體會導致哪些地方破壞。
- LLM 上下文最佳化:
context指令提供符合 token 預算的實體及其相依性的程式碼片段,供 AI 代理使用。 - MCP 伺服器:內建 Model Context Protocol 支援,讓 AI 代理能將
sem工具當作原生技能使用。 - 廣泛語言支援:完整的實體抽取支援 32 種語言,包括 TypeScript、Python、Rust、Go 與 Java。
- Git 整合:可透過
sem setup設定為預設的git diff輸出。
摘要: 一款建構於 Git 之上的語意化版本控制工具,於實體層級(函式、類別、方法)追蹤變更,而非文字行。
標題: sem:一款在實體層級(而非行)追蹤程式碼變更的語意化版本控制工具
Sources
- undefinedAtaraxy-Labs/sem