This commit is contained in:
锦恢 2024-09-25 12:12:39 +08:00
parent f343a76992
commit 10d8e91b6c
4 changed files with 20 additions and 17 deletions

View File

@ -239,7 +239,7 @@ endmodule
text: text.to_owned(), text: text.to_owned(),
}, },
}; };
server.did_open(open_params, None); server.did_open(open_params);
let fid = server.srcs.get_id(&uri); let fid = server.srcs.get_id(&uri);
server.srcs.wait_parse_ready(fid, true); server.srcs.wait_parse_ready(fid, true);
@ -357,7 +357,7 @@ endmodule
text: text.to_owned(), text: text.to_owned(),
}, },
}; };
server.did_open(open_params, None); server.did_open(open_params);
let fid = server.srcs.get_id(&uri); let fid = server.srcs.get_id(&uri);
server.srcs.wait_parse_ready(fid, true); server.srcs.wait_parse_ready(fid, true);
@ -477,7 +477,7 @@ endmodule
text: text.to_owned(), text: text.to_owned(),
}, },
}; };
server.did_open(open_params, None); server.did_open(open_params);
let fid = server.srcs.get_id(&uri); let fid = server.srcs.get_id(&uri);
server.srcs.wait_parse_ready(fid, true); server.srcs.wait_parse_ready(fid, true);
let file = server.srcs.get_file(fid).unwrap(); let file = server.srcs.get_file(fid).unwrap();
@ -566,7 +566,7 @@ endmodule
text: text.to_owned(), text: text.to_owned(),
}, },
}; };
server.did_open(open_params, None); server.did_open(open_params);
let fid = server.srcs.get_id(&uri); let fid = server.srcs.get_id(&uri);
server.srcs.wait_parse_ready(fid, true); server.srcs.wait_parse_ready(fid, true);
let file = server.srcs.get_file(fid).unwrap(); let file = server.srcs.get_file(fid).unwrap();
@ -738,8 +738,8 @@ endinterface"#;
text: text2.to_owned(), text: text2.to_owned(),
}, },
}; };
server.did_open(open_params, None); server.did_open(open_params);
server.did_open(open_params2, None); server.did_open(open_params2);
let fid = server.srcs.get_id(&uri); let fid = server.srcs.get_id(&uri);
let fid2 = server.srcs.get_id(&uri2); let fid2 = server.srcs.get_id(&uri2);
server.srcs.wait_parse_ready(fid, true); server.srcs.wait_parse_ready(fid, true);

View File

@ -9,6 +9,7 @@ use sv_parser::{parse_sv, unwrap_node, Locate, RefNode, SyntaxTree};
use super::fast_hdlparam::{FastHdlparam, Macro}; use super::fast_hdlparam::{FastHdlparam, Macro};
#[allow(unused)]
pub fn sv_parser(path: &str) -> Option<FastHdlparam> { pub fn sv_parser(path: &str) -> Option<FastHdlparam> {
// The path of SystemVerilog source file // The path of SystemVerilog source file
let path = PathBuf::from(path); let path = PathBuf::from(path);

View File

@ -1,7 +1,7 @@
use crate::custom_request::StringNotification;
use crate::sources::*; use crate::sources::*;
use crate::completion::keyword::*; use crate::completion::keyword::*;
use flexi_logger::LoggerHandle; use flexi_logger::LoggerHandle;
#[allow(unused)]
use log::{debug, info, warn}; use log::{debug, info, warn};
use once_cell::sync::OnceCell; use once_cell::sync::OnceCell;
use path_clean::PathClean; use path_clean::PathClean;
@ -255,7 +255,7 @@ impl LanguageServer for Backend {
drop(inc_dirs); drop(inc_dirs);
drop(src_dirs); drop(src_dirs);
// parse all source files found from walking source dirs and include dirs // parse all source files found from walking source dirs and include dirs
self.server.srcs.init(Some(&self)); self.server.srcs.init();
Ok(InitializeResult { Ok(InitializeResult {
server_info: None, server_info: None,
capabilities: ServerCapabilities { capabilities: ServerCapabilities {
@ -308,7 +308,7 @@ impl LanguageServer for Backend {
} }
async fn did_open(&self, params: DidOpenTextDocumentParams) { async fn did_open(&self, params: DidOpenTextDocumentParams) {
let diagnostics = self.server.did_open(params, Some(&self)); let diagnostics = self.server.did_open(params);
self.client self.client
.publish_diagnostics( .publish_diagnostics(
diagnostics.uri, diagnostics.uri,

View File

@ -3,9 +3,9 @@ use crate::custom_request::update_fast_to_client;
use crate::definition::def_types::*; use crate::definition::def_types::*;
use crate::definition::get_scopes; use crate::definition::get_scopes;
use crate::diagnostics::{get_diagnostics, is_hidden}; use crate::diagnostics::{get_diagnostics, is_hidden};
use crate::server::Backend;
use crate::server::LSPServer; use crate::server::LSPServer;
use futures::executor::block_on; use futures::executor::block_on;
#[allow(unused)]
use log::info; use log::info;
use log::{debug, error}; use log::{debug, error};
use pathdiff::diff_paths; use pathdiff::diff_paths;
@ -14,6 +14,7 @@ use std::cmp::min;
use std::collections::HashMap; use std::collections::HashMap;
use std::env::current_dir; use std::env::current_dir;
use std::fs; use std::fs;
#[allow(unused)]
use std::ops::Deref; use std::ops::Deref;
use std::ops::Range as StdRange; use std::ops::Range as StdRange;
use std::path::PathBuf; use std::path::PathBuf;
@ -34,7 +35,7 @@ macro_rules! unwrap_result {
} }
impl LSPServer { impl LSPServer {
pub fn did_open(&self, params: DidOpenTextDocumentParams, backend: Option<&Backend>) -> PublishDiagnosticsParams { pub fn did_open(&self, params: DidOpenTextDocumentParams) -> PublishDiagnosticsParams {
let document: TextDocumentItem = params.text_document; let document: TextDocumentItem = params.text_document;
let uri = document.uri.clone(); let uri = document.uri.clone();
@ -50,7 +51,7 @@ impl LSPServer {
}], }],
}); });
} else { } else {
self.srcs.add(document, backend); self.srcs.add(document);
} }
// diagnostics // diagnostics
let urls = self.srcs.names.read().unwrap().keys().cloned().collect(); let urls = self.srcs.names.read().unwrap().keys().cloned().collect();
@ -114,6 +115,7 @@ pub struct Source {
pub struct SourceMeta { pub struct SourceMeta {
pub id: usize, pub id: usize,
pub valid_parse: Arc<(Mutex<bool>, Condvar)>, pub valid_parse: Arc<(Mutex<bool>, Condvar)>,
#[allow(unused)]
pub parse_handle: JoinHandle<()>, pub parse_handle: JoinHandle<()>,
} }
@ -175,7 +177,7 @@ impl Sources {
source_dirs: Arc::new(RwLock::new(Vec::new())), source_dirs: Arc::new(RwLock::new(Vec::new())),
} }
} }
pub fn init(&self, backend: Option<&Backend>) { pub fn init(&self) {
let mut paths: Vec<PathBuf> = Vec::new(); let mut paths: Vec<PathBuf> = Vec::new();
for path in &*self.include_dirs.read().unwrap() { for path in &*self.include_dirs.read().unwrap() {
paths.push(path.clone()); paths.push(path.clone());
@ -195,12 +197,12 @@ impl Sources {
-1, -1,
text, text,
); );
self.add(doc, backend); self.add(doc);
} }
} }
/// 增加一个 hdl 文件,并为该文件添加单独的解析线程 /// 增加一个 hdl 文件,并为该文件添加单独的解析线程
pub fn add(&self, doc: TextDocumentItem, backend: Option<&Backend>) { pub fn add(&self, doc: TextDocumentItem) {
// use a condvar to synchronize the parse thread // use a condvar to synchronize the parse thread
// the valid bool decides whether or not the file // the valid bool decides whether or not the file
// needs to be re-parsed // needs to be re-parsed
@ -582,7 +584,7 @@ endmodule"#;
text: text.to_owned(), text: text.to_owned(),
}, },
}; };
server.did_open(open_params, None); server.did_open(open_params);
let fid = server.srcs.get_id(&uri); let fid = server.srcs.get_id(&uri);
let file = server.srcs.get_file(fid).unwrap(); let file = server.srcs.get_file(fid).unwrap();
let file = file.read().unwrap(); let file = file.read().unwrap();
@ -635,7 +637,7 @@ endmodule"#;
text: text.to_owned(), text: text.to_owned(),
}, },
}; };
server.did_open(open_params, None); server.did_open(open_params);
let fid = server.srcs.get_id(&uri); let fid = server.srcs.get_id(&uri);
server.srcs.wait_parse_ready(fid, true); server.srcs.wait_parse_ready(fid, true);