save
This commit is contained in:
parent
2298e7d252
commit
0040a4eb28
@ -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;
|
13
src/main.rs
13
src/main.rs
@ -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)
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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());
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user