6.1 LSP语言服务器

OpenCode内置了强大的LSP(Language Server Protocol)支持,为AI提供深度代码理解能力,包括代码补全、跳转定义、查找引用等功能。

什么是LSP

LSP(Language Server Protocol,语言服务器协议)是微软开发的一种开放协议,用于在代码编辑器和语言服务器之间进行通信。它提供了:

  • 代码智能 - 自动补全、语法高亮、错误诊断
  • 代码导航 - 跳转到定义、查找引用、符号搜索
  • 代码重构 - 重命名、提取函数、代码操作
  • 悬停信息 - 显示类型信息、文档注释

OpenCode通过集成LSP,让AI能够更准确地理解代码结构和语义关系。

内置支持的语言

OpenCode内置支持25+种编程语言的LSP服务器,会根据项目文件自动检测并安装:

语言LSP服务器文件扩展名
TypeScript/JavaScripttypescript-language-server.ts, .tsx, .js, .jsx
Pythonpyright.py
Gogopls.go
Rustrust-analyzer.rs
C/C++clangd.c, .cpp, .h
Javajdtls.java
C#omnisharp.cs
PHPintelephense.php
Rubysolargraph.rb
Swiftsourcekit-lsp.swift
Kotlinkotlin-language-server.kt
Lualua-language-server.lua
Zigzls.zig
HTMLvscode-html-language-server.html
CSSvscode-css-language-server.css, .scss, .less
JSONvscode-json-language-server.json
YAMLyaml-language-server.yaml, .yml
Markdownmarksman.md
SQLsql-language-server.sql
Bashbash-language-server.sh, .bash
Dockerfiledockerfile-language-serverDockerfile
Terraformterraform-ls.tf
Elixirelixir-ls.ex, .exs
Haskellhaskell-language-server.hs
OCamlocamllsp.ml

自动安装功能

OpenCode会自动检测项目使用的语言,并在需要时自动安装对应的LSP服务器:

# 当你打开一个TypeScript项目时
opencode

# OpenCode会自动:
# 1. 检测到 .ts 文件
# 2. 检查是否已安装 typescript-language-server
# 3. 如未安装,自动通过npm安装
# 4. 启动LSP服务器并连接
提示
自动安装需要相应的包管理器(如npm、pip、cargo等)已在系统中安装。

配置选项

可以在配置文件中自定义LSP行为:

基本配置结构

{
  "lsp": {
    "typescript": {
      "disabled": false,
      "command": ["typescript-language-server", "--stdio"],
      "extensions": [".ts", ".tsx", ".js", ".jsx"],
      "env": {
        "TSC_NONPOLLING_WATCHER": "true"
      },
      "initialization": {
        "preferences": {
          "includeInlayParameterNameHints": "all"
        }
      }
    }
  }
}

配置项说明

配置项类型说明
disabledboolean是否禁用此语言的LSP
commandstring[]启动LSP服务器的命令和参数
extensionsstring[]关联的文件扩展名
envobjectLSP服务器的环境变量
initializationobjectLSP初始化选项

环境变量配置

{
  "lsp": {
    "python": {
      "env": {
        "PYTHONPATH": "/path/to/custom/modules",
        "VIRTUAL_ENV": "/path/to/venv"
      }
    }
  }
}

初始化选项

{
  "lsp": {
    "rust": {
      "initialization": {
        "cargo": {
          "buildScripts": {
            "enable": true
          }
        },
        "procMacro": {
          "enable": true
        }
      }
    }
  }
}

禁用LSP

禁用特定语言的LSP

{
  "lsp": {
    "javascript": {
      "disabled": true
    }
  }
}

完全禁用LSP功能

{
  "lsp": {
    "*": {
      "disabled": true
    }
  }
}

通过环境变量禁用

# 禁用所有LSP
export OPENCODE_LSP_DISABLED=true

# 禁用自动安装
export OPENCODE_LSP_AUTO_INSTALL=false

自定义LSP服务器

可以添加OpenCode未内置支持的语言服务器:

添加新语言支持

{
  "lsp": {
    "custom-lang": {
      "command": ["custom-language-server", "--stdio"],
      "extensions": [".custom", ".cust"],
      "env": {},
      "initialization": {}
    }
  }
}

使用Docker运行LSP

{
  "lsp": {
    "java": {
      "command": [
        "docker", "run", "--rm", "-i",
        "-v", "${workspaceFolder}:/workspace",
        "jdtls-image"
      ]
    }
  }
}

使用远程LSP服务器

{
  "lsp": {
    "typescript": {
      "command": ["nc", "localhost", "2089"]
    }
  }
}

LSP工具使用

OpenCode提供了lsp工具,AI可以通过它获取代码智能信息:

# AI可能会这样使用LSP工具:
# - 获取函数定义
# - 查找所有引用
# - 获取类型信息
# - 诊断代码问题
注意
LSP功能目前是实验性的,某些语言的支持可能不完整。

故障排除

LSP服务器无法启动

  • 检查是否已安装对应的语言服务器
  • 确认command路径是否正确
  • 查看OpenCode日志获取详细错误信息

代码智能不工作

  • 确认项目有正确的配置文件(如tsconfig.json)
  • 检查文件扩展名是否在extensions列表中
  • 尝试重启OpenCode

下一步

接下来学习如何配置代码格式化器,保持代码风格一致性。