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