Working lsp build
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user