尝试兼容 vhdl

This commit is contained in:
锦恢 2024-09-30 01:02:08 +08:00
parent c3e88d63f9
commit 963f389c9d
8 changed files with 38 additions and 15 deletions

View File

@ -762,7 +762,6 @@ pub struct GenericScope {
pub def_type: DefinitionType,
pub defs: Vec<Box<dyn Definition>>,
pub scopes: Vec<Box<dyn Scope>>,
}
impl GenericScope {

View File

@ -55,18 +55,6 @@ impl LSPServer {
)))
}
pub fn document_symbol(&self, params: DocumentSymbolParams) -> Option<DocumentSymbolResponse> {
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,

View File

@ -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<DocumentSymbolResponse> {
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),
))
}
}

View File

@ -0,0 +1,6 @@
use tower_lsp::lsp_types::*;
use crate::server::LSPServer;
// pub fn vhdl_document_symbol(server: &LSPServer, param: &DocumentSymbolParams) -> Option<DocumentSymbolResponse> {
// }

View File

@ -12,6 +12,9 @@ pub mod definition;
// 悬停提示
pub mod hover;
// 大纲
pub mod document_symbol;
// 诊断
pub mod diagnostics;

View File

@ -11,6 +11,7 @@ mod core;
mod completion;
mod definition;
mod hover;
mod document_symbol;
mod utils;
mod diagnostics;
mod format;

View File

@ -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