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