Skip to main content

codelens_engine/lsp/
mod.rs

1pub(crate) mod parsers;
2pub(crate) mod protocol;
3pub mod readiness;
4pub mod registry;
5pub(crate) mod session;
6pub mod types;
7
8pub use readiness::{ReadinessSnapshot, ReadinessState};
9pub use registry::{
10    LSP_RECIPES, LspRecipe, LspStatus, check_lsp_status, default_lsp_args_for_command,
11    default_lsp_command_for_extension, default_lsp_command_for_path, get_lsp_recipe,
12    lsp_binary_exists,
13};
14pub use session::LspSessionPool;
15pub use types::{
16    LspDiagnostic, LspDiagnosticRequest, LspReference, LspRenamePlan, LspRenamePlanRequest,
17    LspRequest, LspTypeHierarchyNode, LspTypeHierarchyRequest, LspWorkspaceSymbol,
18    LspWorkspaceSymbolRequest,
19};
20
21use crate::project::ProjectRoot;
22use anyhow::Result;
23use serde_json::Value;
24use std::collections::HashMap;
25
26pub fn find_referencing_symbols_via_lsp(
27    project: &ProjectRoot,
28    request: &LspRequest,
29) -> Result<Vec<LspReference>> {
30    let pool = LspSessionPool::new(project.clone());
31    pool.find_referencing_symbols(request)
32}
33
34pub fn get_diagnostics_via_lsp(
35    project: &ProjectRoot,
36    request: &LspDiagnosticRequest,
37) -> Result<Vec<LspDiagnostic>> {
38    let pool = LspSessionPool::new(project.clone());
39    pool.get_diagnostics(request)
40}
41
42pub fn search_workspace_symbols_via_lsp(
43    project: &ProjectRoot,
44    request: &LspWorkspaceSymbolRequest,
45) -> Result<Vec<LspWorkspaceSymbol>> {
46    let pool = LspSessionPool::new(project.clone());
47    pool.search_workspace_symbols(request)
48}
49
50pub fn get_type_hierarchy_via_lsp(
51    project: &ProjectRoot,
52    request: &LspTypeHierarchyRequest,
53) -> Result<HashMap<String, Value>> {
54    let pool = LspSessionPool::new(project.clone());
55    pool.get_type_hierarchy(request)
56}
57
58pub fn get_rename_plan_via_lsp(
59    project: &ProjectRoot,
60    request: &LspRenamePlanRequest,
61) -> Result<LspRenamePlan> {
62    let pool = LspSessionPool::new(project.clone());
63    pool.get_rename_plan(request)
64}
65
66/// Known-safe LSP server binaries. Commands not in this list are rejected.
67pub fn is_allowed_lsp_command(command: &str) -> bool {
68    session::is_allowed_lsp_command(command)
69}
70
71/// The list of allowed LSP server binary names.
72pub const ALLOWED_COMMANDS: &[&str] = session::ALLOWED_COMMANDS;
73
74#[cfg(test)]
75mod tests;