Skip to main content

codelens_engine/lsp/
mod.rs

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