Working lsp build

This commit is contained in:
2026-05-22 09:29:35 +02:00
parent 21019cd54f
commit 97e8f32473
3 changed files with 192 additions and 2 deletions
+33 -2
View File
@@ -1,3 +1,9 @@
pub mod transpiler;
use std::path::PathBuf;
use std::sync::Arc;
use tokio::sync::Mutex;
use tower_lsp::jsonrpc::Result;
use tower_lsp::lsp_types::*;
use tower_lsp::{Client, LanguageServer, LspService, Server};
@@ -5,11 +11,12 @@ use tower_lsp::{Client, LanguageServer, LspService, Server};
#[derive(Debug)]
struct Backend {
client: Client,
workspace_folder: Arc<Mutex<Option<PathBuf>>>,
}
#[tower_lsp::async_trait]
impl LanguageServer for Backend {
async fn initialize(&self, _: InitializeParams) -> Result<InitializeResult> {
async fn initialize(&self, params: InitializeParams) -> Result<InitializeResult> {
let mut res = InitializeResult::default();
res.capabilities.completion_provider = Some(CompletionOptions {
@@ -22,6 +29,27 @@ impl LanguageServer for Backend {
completion_item: None,
});
*self.workspace_folder.lock().await = params
.workspace_folders
.iter()
.next()
.map(|folders| {
folders
.iter()
.next()
.map(|v| v.uri.to_file_path().ok())
.flatten()
})
.flatten();
let workspace_folder = self.workspace_folder.clone();
tokio::spawn(async move {
if let Some(root) = &*workspace_folder.lock().await {
transpiler::build(root);
}
});
Ok(res)
}
@@ -51,6 +79,9 @@ pub async fn start() {
let stdin = tokio::io::stdin();
let stdout = tokio::io::stdout();
let (service, socket) = LspService::new(|client| Backend { client });
let (service, socket) = LspService::new(|client| Backend {
client,
workspace_folder: Arc::new(Mutex::new(None)),
});
Server::new(stdin, stdout, socket).serve(service).await;
}