返回

文章详情

Sem:用于代码理解的新原语 - 不是 LSP,而是基于 Git 的实体

Hacker News2026年6月6日 20:03

了解变化。基于 Git 的语义理解。差异、归因、影响、日志。函数,而不是行。复制 $ brew install sem-cli ~/project 同一提交。不同的视角。左:git 显示给你的内容。右:实际发生的事情。git 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 < Date.now()) { + 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 diff ┌─ src/auth/login.ts ──────────────── │ │ ⊕ function validateToken [添加] │ ∆ function authenticateUser [修改] │ ⊖ function legacyAuth [删除] │ └──────────────────────────────────── 3 个实体在 1 个文件中更改。AI 代理在使用 sem 输出与原始行差异相比,准确性提高了 2.3 倍。请查看基准。六个命令。一种二进制文件。所有内容都适用于任何 Git 仓库。无需配置。无需插件。sem diff 有哪些变化?具有重命名检测、结构哈希和逐词内联高亮的实体级差异。│ ⊕ function validateToken [添加] │ ∆ function authenticateUser [修改] │ ⊖ function legacyAuth [删除] sem blame 谁更改了它?每个实体的归因,以显示最后一次触及每个函数、类或方法的提交。│ ⊕ render_inline_diff a1a6fbf Rohan 04-03 │ ⊕ format_terminal a1a6fbf Rohan 04-03 sem impact 有什么破坏?跨文件依赖图显示每个依赖于给定函数的实体,以及受影响的测试。⊕ function authenticateUser → 依赖于:db.findUser , rateLimiter ← 被:loginRoute , authMiddleware 使用! 42 个实体被传递影响 sem log 如何演变?单个实体的 Git 历史。查看每个触及特定函数的提交。│ ae576ab Rohan 02-05 添加 │ a105183 Rohan 02-08 修改(逻辑) │ a1a6fbf Rohan 04-03 修改(逻辑) sem entities 路径下有什么?列出每个函数、类、方法和类型及其行范围。实体:src/auth/login.ts function validateToken (L12:24) function authenticateUser (L26:45) interface AuthConfig (L47:52) sem context 智能上下文以供 AI 使用。基于令牌的上下文窗口:实体、其依赖和被依赖。在任何 LLM 提示中都适用。authenticateUser 的上下文(预算:8000)目标:~705 个令牌依赖项:~256 个令牌被依赖:~812 个令牌 所有命令都支持 --json,用于机器可读的输出。完整参考资料。您的堆栈。覆盖。26 种语言。5 种数据格式。一种二进制文件。TypeScript JavaScript Python Go Rust Java C C++ C# Ruby PHP Swift Kotlin Elixir Bash HCL Fortran Vue Svelte XML ERB Dart Perl OCaml Scala Zig JSON YAML TOML CSV Markdown 8ms 典型差异 26 种语言 不需要配置 4000+ 下载 试一下。10秒。$ brew install sem-cli $ sem setup ✓ 创建了包装脚本 ✓ 设置 git config --global diff.external = sem ✓ 安装了预提交钩子 完成!在任何仓库中运行 git diff 现在将使用 sem。要还原,请运行:sem unsetup 一条命令。每个 git diff 都变成 sem diff。无需配置文件。此外:cargo install --git https://github.com/Ataraxy-Labs/sem sem-cli

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡