codelens_engine/lsp/
mod.rs1pub(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
66pub fn is_allowed_lsp_command(command: &str) -> bool {
68 session::is_allowed_lsp_command(command)
69}
70
71pub const ALLOWED_COMMANDS: &[&str] = session::ALLOWED_COMMANDS;
73
74#[cfg(test)]
75mod tests;