/ src / main.rs
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  }