From 0040a4eb28e8af9b3bd76965ed37321fd6dd4a83 Mon Sep 17 00:00:00 2001 From: Kirigaya <1193466151@qq.com> Date: Fri, 27 Sep 2024 22:00:58 +0800 Subject: [PATCH] save --- src/lib.rs | 2 +- src/main.rs | 13 ++++++++----- src/{custom_request.rs => request.rs} | 6 ++++-- src/server.rs | 28 +++++---------------------- 4 files changed, 18 insertions(+), 31 deletions(-) rename src/{custom_request.rs => request.rs} (97%) diff --git a/src/lib.rs b/src/lib.rs index 1c86914..18f89ca 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -28,7 +28,7 @@ pub mod server; pub mod sources; // 自定义发送请求 -pub mod custom_request; +pub mod request; // 测试模块 pub mod test; \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index a07d17f..3f0e287 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,9 +1,10 @@ #![recursion_limit = "256"] -use custom_request::{ CustomParamRequest, CustomRequest, DoFastApi }; +use request::{ CustomParamRequest, CustomRequest, DoFastApi }; +use digital_lsp::server::GLOBAL_FAST_MAP; use log::info; -use std::sync::Arc; +use std::{collections::HashMap, sync::{Arc, RwLock}}; use structopt::StructOpt; use tower_lsp::{LspService, Server}; @@ -16,7 +17,7 @@ mod diagnostics; mod format; mod server; mod sources; -mod custom_request; +mod request; use server::{Backend, GLOBAL_BACKEND}; @@ -36,11 +37,13 @@ async fn main() { let stdin = tokio::io::stdin(); let stdout = tokio::io::stdout(); - // let (service, socket) = LspService::new(|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()); + let _ = GLOBAL_FAST_MAP.set(RwLock::new(HashMap::new())); + backend }) .custom_method("custom/request", CustomRequest) diff --git a/src/custom_request.rs b/src/request.rs similarity index 97% rename from src/custom_request.rs rename to src/request.rs index 930c4fa..fc0cf5a 100644 --- a/src/custom_request.rs +++ b/src/request.rs @@ -13,7 +13,7 @@ use crate::core::fast_hdlparam::FastHdlparam; use crate::core::sv_parser::make_fast_from_syntaxtree; use crate::utils::*; -use crate::server::{Backend, GLOBAL_BACKEND}; +use crate::server::{update_global_fast, Backend, GLOBAL_BACKEND, GLOBAL_FAST_MAP}; use crate::sources::recovery_sv_parse; @@ -107,7 +107,6 @@ pub fn do_fast(path: String) -> Result { let text = Rope::from(doc.text); // fast 解析不需要 include let includes: Vec = Vec::new(); - let parse_result = recovery_sv_parse( &text, @@ -116,8 +115,11 @@ pub fn do_fast(path: String) -> Result { &includes ); + + if let Some(syntax_tree) = parse_result { if let Ok(hdlparam) = make_fast_from_syntaxtree(&syntax_tree, &path_buf) { + update_global_fast(&hdlparam); return Ok(hdlparam); } } diff --git a/src/server.rs b/src/server.rs index 144f0ff..671882f 100644 --- a/src/server.rs +++ b/src/server.rs @@ -1,3 +1,4 @@ +use crate::core::fast_hdlparam::FastHdlparam; use crate::sources::*; use crate::completion::keyword::*; use flexi_logger::LoggerHandle; @@ -5,6 +6,7 @@ use flexi_logger::LoggerHandle; use log::{debug, info, warn}; use once_cell::sync::OnceCell; use serde::{Deserialize, Serialize}; +use std::collections::HashMap; use std::string::ToString; use std::sync::{Arc, Mutex, RwLock}; use tower_lsp::jsonrpc::Result; @@ -12,6 +14,7 @@ use tower_lsp::lsp_types::*; use tower_lsp::{Client, LanguageServer}; pub static GLOBAL_BACKEND: OnceCell> = OnceCell::new(); +pub static GLOBAL_FAST_MAP: OnceCell>> = OnceCell::new(); pub struct LSPServer { pub srcs: Sources, @@ -299,26 +302,5 @@ impl LanguageServer for Backend { } } -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_config() { - let config = r#" -auto_search_workdir: false -format: true -verible: - syntax: - enabled: true - path: "verible-verilog-syntax" - format: - args: - - --net_variable_alignment=align -log_level: Info -"#; - let config = serde_yaml::from_str::(config); - dbg!(&config); - assert!(config.is_ok()); - } -} +pub fn update_global_fast(fast: &FastHdlparam) { +} \ No newline at end of file