强曰为道

与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

LSP 开发指南

前言

Language Server Protocol(LSP)是现代编辑器与 IDE 生态的基石。它定义了一套标准的 JSON-RPC 通信协议,使得语言智能(代码补全、跳转定义、诊断信息等)可以与编辑器 UI 彻底解耦。只需编写一个 Language Server,就能在 VS Code、Neovim、Emacs、Sublime Text 等所有支持 LSP 的编辑器中获得一致的语言支持体验。

本教程共 15 章,覆盖从协议原理到工程实践的完整知识链:


目录

章节标题内容概要
01LSP 概述历史背景、设计动机、架构总览、生态现状
02协议基础JSON-RPC 2.0、消息格式、传输层
03生命周期初始化、能力协商、关闭、重连
04文本同步文档打开/关闭/变更/保存全链路
05语言特性补全、悬停、跳转定义、引用查找、签名帮助
06诊断信息错误/警告的发布与订阅机制
07工作区管理配置、文件事件、工作区符号
08代码动作Quick Fix、重构、Code Lens
09代码格式化全量格式化、范围格式化、保存时格式化
10实现示例TypeScript / Python / Go 实战
11编辑器集成VS Code、Neovim、Emacs 客户端配置
12测试策略协议测试、模拟客户端、集成测试
13高级主题自定义扩展、实验性功能、进度报告
14Docker 开发容器化开发环境与容器内 LSP
15最佳实践性能优化、错误处理、发布到生态

读者对象

  • 编辑器插件开发者:希望为新语言或已有语言构建 Language Server
  • IDE 工具链工程师:需要理解 LSP 协议以进行深度集成
  • 对编辑器架构感兴趣的开发者:想了解语言智能是如何与 UI 解耦的

环境准备

  • Node.js >= 18(TypeScript 示例)
  • Python >= 3.10(Python 示例)
  • Go >= 1.21(Go 示例)
  • VS Code / Neovim(用于测试)

阅读建议

建议按章节顺序阅读。如果已有 LSP 基础,可直接跳到感兴趣的主题。每章都包含:

  • 📖 核心概念讲解
  • 💻 可运行代码示例
  • 📊 对比表格与流程图
  • ⚠️ 常见陷阱与注意事项
  • 🔗 扩展阅读链接

约定:本教程中「Server」指 Language Server 进程,「Client」指编辑器侧的 LSP 客户端。协议术语使用英文原文,解释使用中文。