说实话,这波更新我差点就错过了。最近在 Claude Code开发者平台 看到用户在讨论

现在版本都2.0.76,我看到change log写2.0.74版本带来lsp,当时我还愣了一下——LSP?Claude Code也能用LSP了?

这可不是小事儿,最近我都是在 Evol 里面使用Claude Code,相对稳定,推荐给小伙伴

01 先聊聊LSP是个啥

在说这次更新之前,先给不熟悉LSP的朋友科普一下。毕竟这玩意儿虽然天天在用,但很多人可能没注意过它的存在。

一个困扰业界的M×N问题

你想啊,编程语言有多少种?Java、Python、Go、Rust、TypeScript、C++……少说几十种。IDE和编辑器呢?VS Code、IntelliJ、Vim、Emacs……也是一大堆。

问题来了: 每个编辑器都想支持每种语言的智能提示 ——跳转定义、查找引用、自动补全这些。

按传统做法,这是个 M × N 的问题。M种编辑器,N种语言,你得写 M×N 个适配器。这活儿没法干。

微软的解法

2016年,微软搞VS Code的时候想了个办法: 把语言智能逻辑抽出来,单独跑一个进程,叫Language Server 。然后定义一套标准通信协议—— Language Server Protocol(LSP) 。

这样一来:

  • 语言那边 :每种语言只需实现一个Language Server(TypeScript有 typescript-language-server ,Python有 pyright ,Rust有 rust-analyzer )

  • 编辑器那边 :每个编辑器只需实现LSP客户端,就能对接所有语言服务器

M×N 变成了 M+N 。架构设计里常说的"通过抽象层解耦",这就是个典型案例。

核心思想 :编辑器只需实现一次LSP客户端,就能对接所有语言服务器。M×N 变成 M+N。

LSP协议长啥样

LSP本质就是JSON-RPC通信。比如你Ctrl+Click跳转定义,背后是这样的:

请求:

{
  "method": "textDocument/definition",
  "params": {
    "textDocument": { "uri": "file:///project/src/main.ts" },
    "position": { "line": 42, "character": 15 }
  }
}

返回:

{
  "result": {
    "uri": "file:///project/src/utils.ts",
    "range": { "start": { "line": 10, "character": 0 } }
  }
}

编辑器拿到结果,打开对应文件跳到对应位置。就这么简单。

02 为什么Claude Code需要LSP

在没有LSP之前,Claude Code理解代码全靠"看"——读文件内容,用grep搜索,让模型自己推理。

这就像蒙眼摸象,大概轮廓能摸出来,细节全靠猜。

有了LSP,Claude Code等于接入了和VS Code一样的"视觉系统"。语言服务器已经把代码解析成AST,搞清楚了每个符号的定义、引用、类型。Claude直接问就行,不用猜。

打个比方:

没LSP:在图书馆一排排书架扫过去找书

有LSP:用检索系统,输书名直接告诉你在哪

03 版本概览

版本发布日期主要更新重要程度2.0.7412月20日LSP支持、终端设置扩展、主题快捷键⭐⭐⭐⭐⭐2.0.7512月22日未公布(小修复)⭐2.0.7612月23日未公布(小修复)⭐

2.0.74是主角 ——LSP正式落地。后两个版本官方changelog都没写,应该是小修复。

04 Claude Code里怎么用LSP

1. 官方说明

根据官方changelog(来源:GitHub CHANGELOG.md),2.0.74新增了LSP工具,支持:

go-to-definition - 跳转到符号定义

find references - 查找所有引用

hover documentation - 悬停显示文档

就这三个,官方写得很简洁。

2. 启用步骤

LSP通过 插件系统 提供,不是开箱即用:

/plugin
# 在Discover标签搜索 lsp
# 这里我们安装rust lsp




05 LSP的实际价值

举个例子。假设你让Claude"把 processRequest 函数重构成异步的"。

没有LSP:

grep搜索processRequest

找到定义,读文件

再grep搜索所有调用

可能漏掉动态调用、解构赋值等

一个个改,反复确认

有LSP:

goToDefinition找到定义

findReferences精确找到所有引用

一次性改完,不会漏

LSP找的引用是 语义正确 的,不会把注释里的同名内容当成引用。

06 社区怎么看

这条更新在Hacker News上拿了200+赞(来源:HN讨论帖),评价挺分化的。

正面声音:

HN用户cube2222:

"我两天前在一个Rust项目上偶然发现了新的LSP支持,工作得非常好。"

HN用户brianyu8(OpenAI工程师)甚至自己做了个类似的skill:

"我这周末在玩Codex,让它重命名符号时老是漏掉引用。所以我做了个skill教它用rope来做Python代码的机械重构。" (来源:他的GitHub项目)

质疑声音:

Elixir创始人José Valim在Twitter指出:

"LSP的API对Agent来说很别扭——你必须传file:line:column,不能直接问'Foo#bar的定义在哪里'。"

说得有道理。LSP是给人设计的(点击某个位置),AI Agent更想要语义查询。

HN用户paxys吐槽:

"他们把AI编程从IDE搬到CLI,现在又在CLI里造IDE功能。"

07 已知问题

目前还是Beta状态,有些问题(来源:GitHub Issues及HN讨论):

TypeScript LSP缺diagnostics - 实时错误警告功能不全,还得跑tsc

权限提示有bug - 不是阻塞的,会被其他权限请求覆盖

Claude不总是用LSP - 有时还习惯性grep,可能需要在CLAUDE.md里提示

实测翻车:go-to-definition根本不能用?

我自己在一个Rust项目上测试了一下,结果挺意外的。

环境:

Claude Code v2.0.76

已安装 rust-analyzer-lsp 插件,状态显示 Enabled

测试:

问:"用LSP工具帮我找到 MssqlDriver 的定义"

结果:

Claude还是用grep搜索,然后自己解释说:

注:当前可用的 IDE MCP 工具只有 getDiagnostics (获取诊断信息)和 executeCode (执行 Jupyter 代码),没有 LSP 的 "Go to Definition" 功能。上面是通过 Grep 搜索找到的定义位置。


说白了:

官方changelog写的是支持 go-to-definition, find references, hover ,但实际装上插件后, 只有 getDiagnostics 能用 ,核心的定义跳转、查找引用功能压根没暴露出来。

这就尴尬了。插件装了,状态是Enabled,但功能没完全实现。

所以目前LSP的实际价值可能只有:

getDiagnostics - 获取代码诊断信息(错误、警告)

其他功能还在路上

如果你也想试试,别抱太高期望。等后续版本打磨吧。

08 其他更新

2.0.74还有些小改进:

/terminal-setup 支持Kitty、Alacritty、Zed、Warp终端

/theme 里按Ctrl+T切换语法高亮

macOS快捷键显示从 alt 改成 opt

/context 命令可视化优化

修复了若干bug

2.0.75和2.0.76官方没写changelog。根据@ClaudeCodeLog监控:"No major changes detected"。Windows上有个git命令多冒号的bug([Issue #15117]https://github.com/anthropics/claude-code/issues/15117)。

09 快速参考

# 升级
npm update -g @anthropic-ai/claude-code

# 安装LSP插件
/plugin → 搜索lsp → 空格选中 → i安装

相关链接:

[官方Changelog]https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md

[LSP插件文档]https://code.claude.com/docs/en/discover-plugins

[HN讨论]https://news.ycombinator.com/item?id=46355165

Evol官网:https://www.evolai.cn/

Claude Code开发者社群

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐