Menyeragamkan format kode sesuai rustfmt (126 file). Sebelumnya lefthook pre-commit 'cargo fmt --check' akan gagal pada commit apa pun.
47 lines
1.6 KiB
Rust
47 lines
1.6 KiB
Rust
//! High-level manager that discovers, installs (if needed), and starts
|
|
//! LSP servers.
|
|
|
|
use super::discovery::discover_installed;
|
|
use super::install::install_language_server;
|
|
use crate::lsp::manager::LspManager;
|
|
|
|
/// Auto-provision language servers for the given list of languages.
|
|
///
|
|
/// Flow: discover already-installed servers → for each requested language
|
|
/// not yet available, attempt auto-install → start each server.
|
|
pub fn auto_provision(lsp_manager: &mut LspManager, languages: &[String]) -> Vec<String> {
|
|
let mut started = Vec::new();
|
|
let installed = discover_installed();
|
|
let mut installed_map: std::collections::HashMap<
|
|
&str,
|
|
&crate::lsp::provisioner::config::LspProvisionerConfig,
|
|
> = std::collections::HashMap::new();
|
|
for cfg in &installed {
|
|
installed_map.insert(cfg.language.as_str(), cfg);
|
|
}
|
|
|
|
for lang in languages {
|
|
if let Some(cfg) = installed_map.get(lang.as_str()) {
|
|
if lsp_manager.start(lang, &cfg.command, &cfg.args).is_ok() {
|
|
started.push(lang.clone());
|
|
}
|
|
} else {
|
|
// Not installed — try auto-install
|
|
if install_language_server(lang).is_ok() {
|
|
// Re-discover after install
|
|
let refreshed = discover_installed();
|
|
for cfg in refreshed {
|
|
if cfg.language == *lang {
|
|
if lsp_manager.start(lang, &cfg.command, &cfg.args).is_ok() {
|
|
started.push(lang.clone());
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
started
|
|
}
|