main.rs
1 use ecolog_lsp::server::LspServer; 2 use std::sync::Arc; 3 use tower_lsp::{LspService, Server}; 4 use tracing_subscriber::EnvFilter; 5 6 #[tokio::main] 7 async fn main() { 8 tracing_subscriber::fmt() 9 .with_writer(std::io::stderr) 10 .with_env_filter( 11 EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info")), 12 ) 13 .init(); 14 15 let initial_root = std::env::current_dir().unwrap_or_else(|_| std::path::PathBuf::from(".")); 16 17 let config_manager = ecolog_lsp::server::config::ConfigManager::new(); 18 19 let config_future = config_manager.load_from_workspace(&initial_root); 20 let core_future = { 21 let root = initial_root.clone(); 22 async move { abundantis::Abundantis::builder().root(&root).build().await } 23 }; 24 25 let (config_result, core_result) = tokio::join!(config_future, core_future); 26 27 let config = config_result.expect("Failed to load configuration"); 28 let core = core_result.expect("Failed to initialize Ecolog core"); 29 30 // External providers are now managed via JSON-RPC. 31 // Use `ecolog.provider.spawn` command to start a provider. 32 33 let abundantis_config = config.to_abundantis_config(); 34 core.resolution 35 .update_resolution_config(abundantis_config.resolution); 36 core.resolution 37 .update_interpolation_config(abundantis_config.interpolation); 38 39 let config_arc = Arc::new(config_manager); 40 41 let stdin = tokio::io::stdin(); 42 let stdout = tokio::io::stdout(); 43 44 let (service, socket) = 45 LspService::new(|client| LspServer::new_with_config(client, core, config_arc)); 46 Server::new(stdin, stdout, socket).serve(service).await; 47 }