From 0c56fc4ae967aa04d5953589da45263d0e2ee521 Mon Sep 17 00:00:00 2001 From: light-ly Date: Mon, 23 Sep 2024 22:06:51 +0800 Subject: [PATCH] test: use global var to fix ownership error --- src/custom_request.rs | 6 +++--- src/main.rs | 8 ++++++-- src/server.rs | 3 +++ src/sources.rs | 5 +++-- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/custom_request.rs b/src/custom_request.rs index d1e1da4..502f447 100644 --- a/src/custom_request.rs +++ b/src/custom_request.rs @@ -13,7 +13,7 @@ use crate::core::fast_hdlparam::FastHdlparam; use crate::core::sv_parser::make_fast_from_syntaxtree; use crate::definition::get_language_id_by_uri; -use crate::server::Backend; +use crate::server::{Backend, GLOBAL_BACKEND}; use crate::sources::parse; @@ -141,8 +141,8 @@ impl Notification for UpdateFastNotification { type Params = Self; } -pub fn update_fast_to_client(backend: Arc>, fast: FastHdlparam) { - let backend = backend.unwrap(); +pub fn update_fast_to_client(fast: FastHdlparam) { + let backend = GLOBAL_BACKEND.get().unwrap(); let params = UpdateFastNotification { fast }; backend.client.send_notification::(params); } \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index b44d9df..3fbcb9c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -18,7 +18,7 @@ mod custom_request; #[cfg(test)] mod support; -use server::Backend; +use server::{Backend, GLOBAL_BACKEND}; #[derive(StructOpt, Debug)] #[structopt(name = "Digtal LSP", about = "LSP for Digital IDE")] @@ -38,7 +38,11 @@ async fn main() { // let (service, socket) = LspService::new(|client| Arc::new(Backend::new(client, log_handle))); - let (service, socket) = LspService::build(|client| Arc::new(Backend::new(client, log_handle))) + let (service, socket) = LspService::build(|client| { + let backend = Arc::new(Backend::new(client, log_handle)); + let _ = GLOBAL_BACKEND.set(backend.clone()); + backend + }) .custom_method("custom/request", CustomRequest) .custom_method("custom/paramRequest", CustomParamRequest) .custom_method("api/fast", DoFastApi) diff --git a/src/server.rs b/src/server.rs index a9c9eb5..41e81ff 100644 --- a/src/server.rs +++ b/src/server.rs @@ -2,6 +2,7 @@ use crate::sources::*; use crate::completion::keyword::*; use flexi_logger::LoggerHandle; use log::{debug, info, warn}; +use once_cell::sync::OnceCell; use path_clean::PathClean; use serde::{Deserialize, Serialize}; use std::env::current_dir; @@ -15,6 +16,8 @@ use tower_lsp::lsp_types::*; use tower_lsp::{Client, LanguageServer}; use which::which; +pub static GLOBAL_BACKEND: OnceCell> = OnceCell::new(); + pub struct LSPServer { pub srcs: Sources, pub key_comps: Vec, diff --git a/src/sources.rs b/src/sources.rs index 3437658..b88d8e6 100644 --- a/src/sources.rs +++ b/src/sources.rs @@ -218,7 +218,7 @@ impl Sources { let scope_handle = self.scope_tree.clone(); let inc_dirs = self.include_dirs.clone(); - let backend = Arc::new(backend); + // let backend = Arc::new(backend); // spawn parse thread let parse_handle = thread::spawn(move || { @@ -252,7 +252,8 @@ impl Sources { content: Vec::new() } }; - update_fast_to_client(backend.clone(), fast); + // update_fast_to_client(backend.clone(), fast); + update_fast_to_client(fast); } let mut file = source_handle.write().unwrap();