尝试兼容 vhdl
This commit is contained in:
parent
c3e88d63f9
commit
963f389c9d
@ -762,7 +762,6 @@ pub struct GenericScope {
|
|||||||
pub def_type: DefinitionType,
|
pub def_type: DefinitionType,
|
||||||
pub defs: Vec<Box<dyn Definition>>,
|
pub defs: Vec<Box<dyn Definition>>,
|
||||||
pub scopes: Vec<Box<dyn Scope>>,
|
pub scopes: Vec<Box<dyn Scope>>,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl GenericScope {
|
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(
|
pub fn document_highlight(
|
||||||
&self,
|
&self,
|
||||||
params: DocumentHighlightParams,
|
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 hover;
|
||||||
|
|
||||||
|
// 大纲
|
||||||
|
pub mod document_symbol;
|
||||||
|
|
||||||
// 诊断
|
// 诊断
|
||||||
pub mod diagnostics;
|
pub mod diagnostics;
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ mod core;
|
|||||||
mod completion;
|
mod completion;
|
||||||
mod definition;
|
mod definition;
|
||||||
mod hover;
|
mod hover;
|
||||||
|
mod document_symbol;
|
||||||
mod utils;
|
mod utils;
|
||||||
mod diagnostics;
|
mod diagnostics;
|
||||||
mod format;
|
mod format;
|
||||||
|
@ -244,12 +244,16 @@ impl Sources {
|
|||||||
|
|
||||||
info!("do parse in {:?}", uri.to_string());
|
info!("do parse in {:?}", uri.to_string());
|
||||||
|
|
||||||
|
|
||||||
let syntax_tree = recovery_sv_parse(&text, uri, range, &inc_dirs.read().unwrap());
|
let syntax_tree = recovery_sv_parse(&text, uri, range, &inc_dirs.read().unwrap());
|
||||||
|
|
||||||
let mut scope_tree = match &syntax_tree {
|
let mut scope_tree = match &syntax_tree {
|
||||||
Some(tree) => get_scopes(tree, uri),
|
Some(tree) => get_scopes(tree, uri),
|
||||||
None => None,
|
None => None,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
info!("finish parse {:?}", uri.to_string());
|
info!("finish parse {:?}", uri.to_string());
|
||||||
|
|
||||||
// 计算 fast
|
// 计算 fast
|
||||||
|
Loading…
x
Reference in New Issue
Block a user