Sem:一种用于代码理解的新型原语——并非 LSP,而是基于 Git 之上的实体。
Sem: New primitive for code understanding – not LSPs, but entities on top of Git

原始链接: https://ataraxy-labs.github.io/sem/

```diff --- a/src/auth/login.ts +++ b/src/auth/login.ts @@ -12,6 +12,18 @@ +export function validateToken(token: string) { + const decoded = jwt.verify(token, SECRET); + if (!decoded.exp || decoded.exp < Date.now() / 1000) { + throw new TokenExpiredError(); + } + return decoded; +} + @@ -24,8 +36,10 @@ export async function authenticateUser( - const user = await db.findUser(email); - if (!user) return null; + const user = await db.findUser(email); + if (!user) throw new UserNotFoundError(); + await rateLimiter.check(email); @@ -45,12 +59,0 @@ -export function legacyAuth(user, pass) { - return db.query('SELECT * FROM users - WHERE email = ? AND password = ?', - [user, pass]); -} ```

**Sem** 是一款全新的开发工具,旨在通过将代码库映射为实体(函数、类、方法)的依赖关系图,而非将其视为扁平文本,从而提升代码理解能力。Sem 基于 tree-sitter 构建,能够提供结构化的“爆炸半径(blast radius)”分析,从而精准识别代码变更所影响的具体组件和测试。对于大型、复杂的代码库而言,它比传统的基于行的 `grep` 或 `git diff` 效率更高。 Hacker News 讨论中的重点摘要: * **代理能力 (Agentic Power):** 开发者认为 Sem 是 AI 代理的关键“支撑”,它为代理提供了清晰的代码关系图,相比原始的行差异(line diffs),这能更有效地约束和验证模型输出。 * **性能:** 得益于 SQLite 缓存优化,Sem 能够在几秒钟内对拥有 10 万个文件的单一代码库(monorepo)进行影响分析。 * **集成:** 尽管部分用户对安装过程——特别是对 `git diff` 的“劫持”感——表示不满,但作者澄清 Sem 是一个独立的工具,并提供了用于恢复的 `unsetup` 命令。 * **愿景:** 该项目旨在推动代码审查和理解超越“历史偶然”产生的行级差异(line-level diff),提供一种更合乎逻辑、基于实体的代码演进视图。
相关文章

原文
diff --git a/src/auth/login.ts b/src/auth/login.ts
index 4a2b1c0..8f3d2e1 100644
--- a/src/auth/login.ts
+++ b/src/auth/login.ts
@@ -12,6 +12,18 @@
+export function validateToken(token: string) {
+  const decoded = jwt.verify(token, SECRET);
+  if (!decoded.exp || decoded.exp 
+    throw new TokenExpiredError();
+  }
+  return decoded;
+}
+
@@ -24,8 +36,10 @@
 export async function authenticateUser(
-  const user = await db.findUser(email);
-  if (!user) return null;
+  const user = await db.findUser(email);
+  if (!user) throw new UserNotFoundError();
+  await rateLimiter.check(email);
@@ -45,12 +59,0 @@
-export function legacyAuth(user, pass) {
-  return db.query('SELECT * FROM users
-    WHERE email = ? AND password = ?',
-    [user, pass]);
-}
联系我们 contact @ memedata.com