This commit is contained in:
锦恢 2024-09-27 22:00:58 +08:00
parent 2298e7d252
commit 0040a4eb28
4 changed files with 18 additions and 31 deletions

View File

@ -28,7 +28,7 @@ pub mod server;
pub mod sources; pub mod sources;
// 自定义发送请求 // 自定义发送请求
pub mod custom_request; pub mod request;
// 测试模块 // 测试模块
pub mod test; pub mod test;

View File

@ -1,9 +1,10 @@
#![recursion_limit = "256"] #![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 log::info;
use std::sync::Arc; use std::{collections::HashMap, sync::{Arc, RwLock}};
use structopt::StructOpt; use structopt::StructOpt;
use tower_lsp::{LspService, Server}; use tower_lsp::{LspService, Server};
@ -16,7 +17,7 @@ mod diagnostics;
mod format; mod format;
mod server; mod server;
mod sources; mod sources;
mod custom_request; mod request;
use server::{Backend, GLOBAL_BACKEND}; use server::{Backend, GLOBAL_BACKEND};
@ -36,11 +37,13 @@ async fn main() {
let stdin = tokio::io::stdin(); let stdin = tokio::io::stdin();
let stdout = tokio::io::stdout(); 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 (service, socket) = LspService::build(|client| {
let backend = Arc::new(Backend::new(client, log_handle)); let backend = Arc::new(Backend::new(client, log_handle));
// 初始化全局变量
let _ = GLOBAL_BACKEND.set(backend.clone()); let _ = GLOBAL_BACKEND.set(backend.clone());
let _ = GLOBAL_FAST_MAP.set(RwLock::new(HashMap::new()));
backend backend
}) })
.custom_method("custom/request", CustomRequest) .custom_method("custom/request", CustomRequest)

View File

@ -13,7 +13,7 @@ use crate::core::fast_hdlparam::FastHdlparam;
use crate::core::sv_parser::make_fast_from_syntaxtree; use crate::core::sv_parser::make_fast_from_syntaxtree;
use crate::utils::*; 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; use crate::sources::recovery_sv_parse;
@ -107,7 +107,6 @@ pub fn do_fast(path: String) -> Result<FastHdlparam> {
let text = Rope::from(doc.text); let text = Rope::from(doc.text);
// fast 解析不需要 include // fast 解析不需要 include
let includes: Vec<PathBuf> = Vec::new(); let includes: Vec<PathBuf> = Vec::new();
let parse_result = recovery_sv_parse( let parse_result = recovery_sv_parse(
&text, &text,
@ -116,8 +115,11 @@ pub fn do_fast(path: String) -> Result<FastHdlparam> {
&includes &includes
); );
if let Some(syntax_tree) = parse_result { if let Some(syntax_tree) = parse_result {
if let Ok(hdlparam) = make_fast_from_syntaxtree(&syntax_tree, &path_buf) { if let Ok(hdlparam) = make_fast_from_syntaxtree(&syntax_tree, &path_buf) {
update_global_fast(&hdlparam);
return Ok(hdlparam); return Ok(hdlparam);
} }
} }

View File

@ -1,3 +1,4 @@
use crate::core::fast_hdlparam::FastHdlparam;
use crate::sources::*; use crate::sources::*;
use crate::completion::keyword::*; use crate::completion::keyword::*;
use flexi_logger::LoggerHandle; use flexi_logger::LoggerHandle;
@ -5,6 +6,7 @@ use flexi_logger::LoggerHandle;
use log::{debug, info, warn}; use log::{debug, info, warn};
use once_cell::sync::OnceCell; use once_cell::sync::OnceCell;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::string::ToString; use std::string::ToString;
use std::sync::{Arc, Mutex, RwLock}; use std::sync::{Arc, Mutex, RwLock};
use tower_lsp::jsonrpc::Result; use tower_lsp::jsonrpc::Result;
@ -12,6 +14,7 @@ use tower_lsp::lsp_types::*;
use tower_lsp::{Client, LanguageServer}; use tower_lsp::{Client, LanguageServer};
pub static GLOBAL_BACKEND: OnceCell<Arc<Backend>> = OnceCell::new(); pub static GLOBAL_BACKEND: OnceCell<Arc<Backend>> = OnceCell::new();
pub static GLOBAL_FAST_MAP: OnceCell<RwLock<HashMap<String, FastHdlparam>>> = OnceCell::new();
pub struct LSPServer { pub struct LSPServer {
pub srcs: Sources, pub srcs: Sources,
@ -299,26 +302,5 @@ impl LanguageServer for Backend {
} }
} }
#[cfg(test)] pub fn update_global_fast(fast: &FastHdlparam) {
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::<ProjectConfig>(config);
dbg!(&config);
assert!(config.is_ok());
}
}