Skip to main content

sh_layer3/lsp/
mod.rs

1//! # LSP (Language Server Protocol) 模块
2//!
3//! 完整的 LSP 客户端实现,支持多种语言服务器。
4//!
5//! ## 支持的语言服务器
6//! - rust-analyzer (Rust)
7//! - pyright/pylance (Python)
8//! - typescript-language-server (TypeScript/JavaScript)
9//! - gopls (Go)
10//! - clangd (C/C++)
11//!
12//! ## 支持的功能
13//! - go_to_definition: 跳转到定义(跨模块)
14//! - find_references: 查找引用(项目级)
15//! - get_hover: 获取类型信息
16//! - rename_symbol: 重命名符号(重构)
17//! - get_document_symbols: 获取文档符号
18//! - get_workspace_symbols: 获取工作区符号
19//! - get_code_actions: 获取代码操作(快速修复)
20//! - get_signature_help: 获取签名帮助
21//! - get_completions: 获取代码补全
22//! - format_document: 格式化文档
23
24pub mod client;
25pub mod protocol;
26pub mod server;
27pub mod types;
28
29pub use client::{LspClient, SyncLspClient};
30pub use protocol::{
31    create_code_action_request, create_completion_request, create_definition_request,
32    create_did_change_notification, create_did_close_notification, create_did_open_notification,
33    create_document_highlight_request, create_document_symbol_request, create_formatting_request,
34    create_hover_request, create_initialize_request, create_references_request,
35    create_rename_request, create_signature_help_request, create_workspace_symbol_request,
36    LspMessage, LspNotification, LspRequest, LspResponse,
37};
38pub use server::{
39    clangd_config, gopls_config, pylance_config, pyright_config, rust_analyzer_config,
40    typescript_config, LanguageServer, LanguageServerConfig, LanguageServerManager,
41};
42pub use types::*;
43
44/// LSP 错误类型
45#[derive(Debug, thiserror::Error)]
46pub enum LspError {
47    #[error("LSP server not found for language: {0}")]
48    ServerNotFound(String),
49
50    #[error("LSP server initialization failed: {0}")]
51    InitializationFailed(String),
52
53    #[error("LSP request failed: {0}")]
54    RequestFailed(String),
55
56    #[error("LSP timeout")]
57    Timeout,
58
59    #[error("LSP server crashed: {0}")]
60    ServerCrashed(String),
61
62    #[error("Invalid LSP message: {0}")]
63    InvalidMessage(String),
64
65    #[error("IO error: {0}")]
66    Io(#[from] std::io::Error),
67
68    #[error("JSON error: {0}")]
69    Json(#[from] serde_json::Error),
70}
71
72/// LSP 结果类型
73pub type LspResult<T> = std::result::Result<T, LspError>;