Claude Code CLI支持LSP了,编程向智能再进一步

0 阅读9分钟

前言

小伙伴们大家好,我是小溪,见字如面。Claude Code CLI V0.27.4版本加入了LSP支持,从此AI编程不再是盲目的通过Grep检索,而是像IDE一样可以做到精准跳转定义、查找引用和实现。

图片

当前使用版本

2.0.76 (Claude Code)

省流版本

  • 在命令行终端使用 ENABLE_LSP_TOOLS=1 claude 命令开启LSP功能
  • 启动Claude Code CLI,运行 /plugin 安装你的语言插件
  • 安装对应的LSP语言服务器
  • 重启Claude Code
  • “使用 LSP 查找 XXX 的所有引用”

了解LSP

LSP简介

LSP(Language Server Protocol)是微软于2016年推出的一种标准化JSON-RPC通信协议,用于连接代码编辑器(如VS Code、Vim)与独立的语言服务器,提供自动补全、跳转定义、语法检查、重构等智能功能 。它将语言分析逻辑从编辑器中解耦,避免了为每种语言和编辑器重复开发(从n×m复杂度降至n+m),支持双向通信,服务器可主动推送诊断结果 。

用白话说就是一套可以让代码变得智能的语言服务协议,通过LSP可以实现一系列的功能,例如编辑器中我们每天都会用到但是不知道如何实现的 跳转到定义、悬停显示文档、实时报错和警告 等功能。

图片

LSP工作原理

LSP的工作原理大致如下:

图片

更多LSP相关内容可以查看LSP官方文档:microsoft.github.io/language-se…

图片

英文不太好以及对LSP语言服务器开发感兴趣的小伙伴也可以查看LSP中文文档:lsp.fosp.cc/lsp/languag…

图片

LSP的优势

在Claude Code CLI V0.27.4版本之前,Claude Code检索内容的方式主要是 grep(Grep 是一个 Linux/Unix 系统的文本搜索工具,全称为 "global regular expression print",用于在文件或输入流中查找匹配指定模式(字符串或正则表达式)的行),翻译成白话就是通过全文本检索的形式进行查找。

例如我们让Cluade Code “查找项目中saveProgress函数的所有调用”,可以看到Claude Code的匹配流程:

  • 读取项目文件,通过搜索匹配包含“saveProgress”的文件
  • 读取匹配到的文件内容,从文件内容中匹配“saveProgress”关键词所在的代码行

图片

到这里应该有不少小伙伴会有疑问了,AI查找一个函数的调用有这么费劲吗?AI模型训练时使用了海量资源和代码,目前已经能写出相当不错的代码了,它还能不懂代码?还真是,对于AI来说它没有代码的概念,我们所提供的代码上下文以及AI输出的所有代码在AI看来都是文本,这就是为什么在引入LSP之前AI查找代码或者关键词时耗时的原因。

那么引入LSP后Claude Code会有什么变化呢?

  • 有了LSP,代码相关的问题可以直接问语言服务器,相当于为Claude Code装上了语言中枢,Cluade Code将真正能读懂代码,准确、快速定位代码。
  • 避免全局Grep查找,在一定程度上可以降低toknes消耗

LSP的核心能力

此次Claude Code引入LSP主要带来了以下 7大 核心能力:

  • goToDefinition:跳转到定义,一键跳转跳到函数定义
  • goToImplementation:跳转实现,一键跳转跳到函数实现
  • findReferences:查找引用,查找所有引用的位置
  • hover:悬停信息,鼠标悬停展类型信息、文档注释、函数签名等信息
  • documentSymbol:文档符号,以结构化列表形式展示所有符号信息
  • workspaceSymbol:工作区符号搜索,在整个项目中检索符号信息
  • incomingCalls/outgoingCalls:调用链,详细展示函数前后调用关系

LSP使用场景

LSP不是万能的,选对使用场景才能事半功倍。LSP更适合在以下场景中使用,不仅提效还是节省tokens:

  • 大型项目:文件数超过50,代码行超过5000
  • 复杂项目:项目业务关系、依赖、调用复杂的项目
  • 重构项目:需要重构、频繁改名或者转技术栈的项目
  • 跨文件调用:跨文件调用多的项目

在Claude Code中使用LSP

Claude Code可以在IDE和命令行终端等不同的场景中使用,Claude Code搭配LSP的使用方式也略有不同。

在IDE中使用

这里以Cursor为例,首先在命令行终端输入 /claude 命令启动Claude Code CLI

ENABLE_LSP_TOOL=1 claude
或者
export ENABLE_LSP_TOOLS=1
claude

输入交互式命令 /config 查看配置,调整【Auto-connect to IDE (external terminal)】为【true】,该配置主要用来检查和安装【Claude Code for VS Code】插件的,对该插件还不了解的小伙伴可以看往期内容:Claude Code CLI初体验

图片

正常情况下,Claude Code CLI会自动执行如下操作:

  • 检查IDE环境
  • 安装 Claude Code for VS Code 插件
  • 通过 Claude Code for VS Code 插件连接到IDE的LSP服务

如果发现IDE没有自动下载插件,也可以自行在插件市场下载

图片

配置完成后,可以输入提示词验证Claude Code是否具有LSP调用能力

图片

接着输入提示词验证

查看 receiveCredit 的所有引用

可以看到很快Claude Code就给出了准确的结果,给出了函数的 定义位置、导入位置 和 调用位置,并且所有的文件路径都是可以点击的

图片

点击文件路径可以跳转到对应的代码行

图片

经多次使用发现这种方式不是很稳定,即使指定Claude Code CLI强制使用LSP也无法限制Claude Code CLI每次都使用LSP。

在Claude CLI中使用

1)安装语言服务器插件

语言服务器插件是语言服务器和模型之间沟通的桥梁

打开 Claude Code CLI,输入交互式命令 /plugin,搜索lsp看是否可以检索到语言服务器插件

图片

如果没有检索到lsp相关内容,需要先安装 anthropics/claude-plugins-official 插件市场,安装方式可以查看往期内容:Claude Code上线插件系统,AI编程模式再次升级,安装完成后就可以检索到语言服务器插件了。

Anthropic官方插件:github.com/anthropics/…

图片

如果官方也没有找到也可以尝试使用社区插件:github.com/Piebald-AI/…

根据描述选择自己需要的语言服务器插件,回车进入插件安装详情

图片

选择自己需要的安装模式,对Claude Code CLI基础还不了解的小伙伴可以看往期内容:Claude Code CLI初体验

图片

安装成功后可以在【Installed】查看

图片

2)安装语言服务器

语言服务器是真正为语言提供能力的核心

下面是一些常用语言服务器的安装方式

Python:

$ pip install pyright
或者
$ npm install -g pyright

TypeScript/JavaScript:

npm install -g typescript-language-server typescript
或者
npm install -g @vtsls/language-server typescript

HTML和CSS

$ npm install -g vscode-langservers-extracted

Go:

go install golang.org/x/tools/gopls@latest

Rust:

$ rustup component add rust-analyzer

Ruby:

$ gem install ruby-lsp

这里我以typescript服务器为例进行安装,直接在命令行终端输入安装命令

图片

使用下面命令验证语言服务器是否安装成功

$ which typescript-language-server
$ typescript-language-server --version

图片

3)基本使用

安装完成后使用以下命令重启Claude Code CLI

ENABLE_LSP_TOOL=1 claude
或者
$ export ENABLE_LSP_TOOL=1
$ claude

直接输入提示词或者在提示词中添加“使用LSP”关键词向Claude Code CLI提问,可以看到Claude Code CLI先后调用了LSP的 goToDefinition、hover 和findReferences 能力获取信息

图片

然后根据获取到的信息进行提炼总结

图片

cclsp社区方案

如果觉得手动配置LSP语言服务器麻烦,也可以选择使用社区提供的LSP方案,使用交互式命令一键配置。在命令行终端输入如下命令进行初始化配置

npx cclsp@latest setup

选择支持的语言类型,支持多选

图片

配置完成后将会在项目根目录生成 ./claude/cclsp.json 配置文件,同时会添加 cclsp MCP服务

图片

初始化完成后就可以使用cclsp提供的LSP服务了

图片

自定义语言插件

语言服务器是真正为语言提供能力的核心

创建一个Claude Code插件,添加配置如下:

{
  "name": "typescript-lsp",
  "description": "TypeScript/JavaScript language server",
  "version": "0.0.1",
  "author": {
    "name": "程序员小溪",
    "email": "邮箱"
  },
  "source": "./typescript-lsp",
  "strict": false,
  "lspServers": {
    "typescript": {
      "command": "typescript-language-server",
      "args": ["--stdio"],
      "extensionToLanguage": {
        ".ts": "typescript",
        ".tsx": "typescriptreact",
        ".js": "javascript",
        ".jsx": "javascriptreact",
        ".mts": "typescript",
        ".cts": "typescript",
        ".mjs": "javascript",
        ".cjs": "javascript"
      }
    }
  }
}

图片

对于Claude Code插件还不了解的小伙伴可以看往期内容:如何从零开始创建一个Claude Code插件,更多参数可以参阅官方文档:code.claude.com/docs/en/plu…

添加应用市场,选择LSP语言服务器插件安装

图片

安装完成后,在【Installed】中可以查看安装状态

图片

重启Claude Code CLI,输入提示词即可使用(注意这里也是需要提前安装语言服务器的)

图片

常见问题

语言服务器是否启动

查看语言服务器是否启动,可以在命令行终端中输入如下命令

$ grep "LSP notification handlers registered" ~/.claude/debug/latest

图片

Claude Code CLI没有LSP工具调用权限

如果发现Claude Code没有调用LSP,可以尝试询问AI是否有调用LSP工具的权限

do you hava access to LSP tools? 

图片

如果没有调用LSP工具权限可以手动进行开启

ENABLE_LSP_TOOL=1 claude

也可以使用命令永久开启

# 以zsh 为例
echo 'export ENABLE_LSP_TOOL=1' >> ~/.zshrc
source ~/.zshrc

开启后再次询问Claude Code CLI验证

图片

友情提示

见原文:Claude Code CLI支持LSP了,编程向智能再进一步

本文同步自微信公众号 "程序员小溪" ,这里只是同步,想看及时消息请移步我的公众号,不定时更新我的学习经验。友情提示友情提示