From 963f389c9d3a7cb10cd64cf05bd574f86c29ba89 Mon Sep 17 00:00:00 2001 From: Kirigaya <1193466151@qq.com> Date: Mon, 30 Sep 2024 01:02:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E5=85=BC=E5=AE=B9=20vhdl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/completion/mod.rs | 2 +- src/definition/def_types.rs | 1 - src/definition/mod.rs | 14 +------------- src/document_symbol/mod.rs | 22 ++++++++++++++++++++++ src/document_symbol/vhdl.rs | 6 ++++++ src/lib.rs | 3 +++ src/main.rs | 1 + src/sources.rs | 4 ++++ 8 files changed, 38 insertions(+), 15 deletions(-) create mode 100644 src/document_symbol/mod.rs create mode 100644 src/document_symbol/vhdl.rs diff --git a/src/completion/mod.rs b/src/completion/mod.rs index 7cf1f44..d9ebf49 100644 --- a/src/completion/mod.rs +++ b/src/completion/mod.rs @@ -61,7 +61,7 @@ impl LSPServer { file.text.pos_to_byte(&doc.position), &doc.text_document.uri, )?; - + // complete keywords comps.items.extend::>( self.key_comps diff --git a/src/definition/def_types.rs b/src/definition/def_types.rs index 0087c6e..8035a26 100644 --- a/src/definition/def_types.rs +++ b/src/definition/def_types.rs @@ -762,7 +762,6 @@ pub struct GenericScope { pub def_type: DefinitionType, pub defs: Vec>, pub scopes: Vec>, - } impl GenericScope { diff --git a/src/definition/mod.rs b/src/definition/mod.rs index bfe518c..dd0afe5 100644 --- a/src/definition/mod.rs +++ b/src/definition/mod.rs @@ -25,7 +25,7 @@ impl LSPServer { self.srcs.wait_parse_ready(file_id, false); let file = self.srcs.get_file(file_id)?; let file = file.read().ok()?; - + let line_text = file.text.line(pos.line as usize); let token: String = get_definition_token(&line_text, pos); @@ -55,18 +55,6 @@ impl LSPServer { ))) } - pub fn document_symbol(&self, params: DocumentSymbolParams) -> Option { - let uri = params.text_document.uri; - let file_id = self.srcs.get_id(&uri).to_owned(); - self.srcs.wait_parse_ready(file_id, false); - let file = self.srcs.get_file(file_id)?; - let file = file.read().ok()?; - let scope_tree = self.srcs.scope_tree.read().ok()?; - Some(DocumentSymbolResponse::Nested( - scope_tree.as_ref()?.document_symbols(&uri, &file.text), - )) - } - pub fn document_highlight( &self, params: DocumentHighlightParams, diff --git a/src/document_symbol/mod.rs b/src/document_symbol/mod.rs new file mode 100644 index 0000000..8d20f8c --- /dev/null +++ b/src/document_symbol/mod.rs @@ -0,0 +1,22 @@ +use tower_lsp::lsp_types::*; + +use crate::{definition::Scope, server::LSPServer}; +pub mod vhdl; + +impl LSPServer { + pub fn document_symbol(&self, params: DocumentSymbolParams) -> Option { + let uri = params.text_document.uri; + let file_id = self.srcs.get_id(&uri).to_owned(); + self.srcs.wait_parse_ready(file_id, false); + let file = self.srcs.get_file(file_id)?; + let file = file.read().ok()?; + let scope_tree = self.srcs.scope_tree.read().ok()?; + + + + Some(DocumentSymbolResponse::Nested( + scope_tree.as_ref()?.document_symbols(&uri, &file.text), + )) + } +} + diff --git a/src/document_symbol/vhdl.rs b/src/document_symbol/vhdl.rs new file mode 100644 index 0000000..c96fb80 --- /dev/null +++ b/src/document_symbol/vhdl.rs @@ -0,0 +1,6 @@ +use tower_lsp::lsp_types::*; +use crate::server::LSPServer; + +// pub fn vhdl_document_symbol(server: &LSPServer, param: &DocumentSymbolParams) -> Option { + +// } \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index 18f89ca..907f10d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -12,6 +12,9 @@ pub mod definition; // 悬停提示 pub mod hover; +// 大纲 +pub mod document_symbol; + // 诊断 pub mod diagnostics; diff --git a/src/main.rs b/src/main.rs index e31c0b2..e7e895a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,6 +11,7 @@ mod core; mod completion; mod definition; mod hover; +mod document_symbol; mod utils; mod diagnostics; mod format; diff --git a/src/sources.rs b/src/sources.rs index 7d6c411..d6b723e 100644 --- a/src/sources.rs +++ b/src/sources.rs @@ -244,12 +244,16 @@ impl Sources { info!("do parse in {:?}", uri.to_string()); + let syntax_tree = recovery_sv_parse(&text, uri, range, &inc_dirs.read().unwrap()); + let mut scope_tree = match &syntax_tree { Some(tree) => get_scopes(tree, uri), None => None, }; + + info!("finish parse {:?}", uri.to_string()); // 计算 fast