use std::collections::HashMap;
use super::session::{InitializeParams, LspSession};
pub struct LspPool {
sessions: HashMap<String, LspSession>,
}
impl LspPool {
pub fn new() -> Self {
Self {
sessions: HashMap::new(),
}
}
pub async fn get_or_spawn(
&mut self,
key: &str,
cmd: &str,
) -> Result<&mut LspSession, anyhow::Error> {
if !self.sessions.contains_key(key) {
let mut session = LspSession::spawn(cmd)?;
session.initialize(InitializeParams::default()).await?;
tracing::info!(key, "LSP session initialized");
self.sessions.insert(key.into(), session);
}
Ok(self.sessions.get_mut(key).unwrap())
}
}
impl Default for LspPool {
fn default() -> Self {
Self::new()
}
}