跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

LSP 服务器配置

启用原生语言服务,定义文件类型映射、启动参数、信任与调试入口。

LSP 给模型提供符号定位、引用、类型、诊断和代码动作。它是实验功能,启用开关不会自动安装语言服务器,也不会生成配置。

qwen --experimental-lsp

项目配置

项目根 .lsp.json 的每个键对应一个语言服务配置。例如已安装 TypeScript language server 时:

{
  "typescript": {
    "command": "typescript-language-server",
    "args": ["--stdio"],
    "extensionToLanguage": {
      ".ts": "typescript",
      ".tsx": "typescriptreact",
      ".js": "javascript",
      ".jsx": "javascriptreact"
    }
  }
}

本地 command 可以是 PATH 中的名称或绝对路径;逃出工作区的相对命令路径会被阻止。官方还支持 tcp、socket 传输,应按所选服务器的接口配置,不假设它与 stdio 启动方式相同。

常用字段

字段默认或用途
args空列表
transportstdio
env进程环境
initializationOptionsinitialize 参数
settings经 workspace/didChangeConfiguration 发送
extensionToLanguage后缀到语言 ID
workspaceFolder项目根内部的工作目录覆盖
startupTimeout / shutdownTimeout10,000 / 5,000 毫秒
restartOnCrash / maxRestartsfalse / 3
trustRequiredtrue

maxRestarts 有默认值不表示默认自动重启,仍需 restartOnCrash 启用。

clangd 和 Java

clangd 需要已安装可执行文件,并用 compile_commands.json 或 compile_flags.txt 获取准确编译信息。数据库在 build 下时:

{
  "cpp": {
    "command": "clangd",
    "args": ["--background-index", "--compile-commands-dir=build"]
  }
}

Java 需要 JDK 和 JDTLS,java、jdtls 可从 PATH 调用;官方示例把 JDTLS 配置和工作数据分别放 .jdtls-config、.jdtls-workspace。

信任和运行位置

默认只有可信工作区启动语言服务。每服务 trustRequired:false 可放宽这一条件,但服务器仍按用户权限运行;普通 LSP 路径在沙箱外访问代码,不应把启动语言服务等同于受沙箱隔离的工具执行。

扩展可通过 plugin.json 的 lspServers 提供内联配置或 .lsp.json 路径。该专章描述不能推广为所有便携插件格式都支持相同扩展能力,另见Agent Plugins v1。

排查与操作

/status 查看启用与 ready 数量,/lsp 查看各服务器命令、语言和失败原因。调试用 qwen --experimental-lsp --debug,没有额外 LSP 专用 debug 开关。

搜索 ~/.qwen/debug/latest 中的 LSP、Native LSP、connection closed,配置 runtime 根时改用 $QWEN_RUNTIME_DIR/debug/latest。先核对安装、PATH、信任、启动成功,再区分尚在索引与文件未保存。具体查询见LSP 操作。