尝试兼容 vhdl
This commit is contained in:
parent
c3e88d63f9
commit
963f389c9d
@ -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 {
|
||||
|
@ -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,
|
||||
|
22
src/document_symbol/mod.rs
Normal file
22
src/document_symbol/mod.rs
Normal 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),
|
||||
))
|
||||
}
|
||||
}
|
||||
|
6
src/document_symbol/vhdl.rs
Normal file
6
src/document_symbol/vhdl.rs
Normal 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> {
|
||||
|
||||
// }
|
@ -12,6 +12,9 @@ pub mod definition;
|
||||
// 悬停提示
|
||||
pub mod hover;
|
||||
|
||||
// 大纲
|
||||
pub mod document_symbol;
|
||||
|
||||
// 诊断
|
||||
pub mod diagnostics;
|
||||
|
||||
|
@ -11,6 +11,7 @@ mod core;
|
||||
mod completion;
|
||||
mod definition;
|
||||
mod hover;
|
||||
mod document_symbol;
|
||||
mod utils;
|
||||
mod diagnostics;
|
||||
mod format;
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user