Merge branch 'main' of https://github.com/Digital-EDA/digital-lsp-server
This commit is contained in:
commit
19fed383b0
@ -1,5 +1,4 @@
|
|||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use log::info;
|
|
||||||
use vhdl_lang::ast::{ArchitectureBody, ConcurrentStatement, DesignFile, Designator, EntityDeclaration, InstantiatedUnit, InterfaceDeclaration, InterfaceList, LabeledConcurrentStatement, Mode, ModeIndication, Name};
|
use vhdl_lang::ast::{ArchitectureBody, ConcurrentStatement, DesignFile, Designator, EntityDeclaration, InstantiatedUnit, InterfaceDeclaration, InterfaceList, LabeledConcurrentStatement, Mode, ModeIndication, Name};
|
||||||
use vhdl_lang::{kind_str, HasTokenSpan, Token, TokenAccess, TokenSpan, VHDLParser, VHDLStandard};
|
use vhdl_lang::{kind_str, HasTokenSpan, Token, TokenAccess, TokenSpan, VHDLParser, VHDLStandard};
|
||||||
|
|
||||||
@ -64,7 +63,6 @@ pub fn make_fast_from_units(
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
info!("get fast {:#?}", hdlparam);
|
|
||||||
Some(hdlparam)
|
Some(hdlparam)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -314,7 +314,6 @@ fn do_vhdl_fast(
|
|||||||
}
|
}
|
||||||
|
|
||||||
let arch_and_entity = vhdl_project.project.get_analyzed_units(&pathbuf);
|
let arch_and_entity = vhdl_project.project.get_analyzed_units(&pathbuf);
|
||||||
info!("for file {} arch_and_entity is empty {}", path, arch_and_entity.is_empty());
|
|
||||||
if let Some(mut fast) = make_fast_from_units(arch_and_entity) {
|
if let Some(mut fast) = make_fast_from_units(arch_and_entity) {
|
||||||
fast.file_type = file_type.to_string();
|
fast.file_type = file_type.to_string();
|
||||||
// for module in &fast.content {
|
// for module in &fast.content {
|
||||||
|
@ -507,6 +507,12 @@ pub fn recovery_sv_parse_with_retry(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn replace_substring(rope: Rope, substring: &str) -> Rope {
|
||||||
|
let text = rope.to_string();
|
||||||
|
let replaced_text = text.replace(substring, &" ".repeat(substring.len()));
|
||||||
|
Rope::from(replaced_text)
|
||||||
|
}
|
||||||
|
|
||||||
/// 更加稳定地解析 sv 和 v
|
/// 更加稳定地解析 sv 和 v
|
||||||
/// 支持遇到错误进行自动修复,然后再解析
|
/// 支持遇到错误进行自动修复,然后再解析
|
||||||
pub fn recovery_sv_parse(
|
pub fn recovery_sv_parse(
|
||||||
@ -523,6 +529,10 @@ pub fn recovery_sv_parse(
|
|||||||
let mut reverted_change = false;
|
let mut reverted_change = false;
|
||||||
let mut text = doc.clone();
|
let mut text = doc.clone();
|
||||||
|
|
||||||
|
// TODO: find how to fix it
|
||||||
|
// remove `reset all to avoid parse error
|
||||||
|
text = replace_substring(text, "`resetall");
|
||||||
|
|
||||||
let recover_text_by_byte_idx = |byte_idx: usize, reverted_change: &mut bool, text: &mut Rope| {
|
let recover_text_by_byte_idx = |byte_idx: usize, reverted_change: &mut bool, text: &mut Rope| {
|
||||||
let mut line_start = text.byte_to_line(byte_idx);
|
let mut line_start = text.byte_to_line(byte_idx);
|
||||||
let mut line_end = text.byte_to_line(byte_idx) + 1;
|
let mut line_end = text.byte_to_line(byte_idx) + 1;
|
||||||
|
@ -2,46 +2,47 @@
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test_vhdl_fast {
|
mod test_vhdl_fast {
|
||||||
use crate::{core::vhdl_parser::{make_fast_from_design_file, vhdl_parse}, test::{DIGTIAL_IDE_TEST, TESTFILES_TEMP_DIR}, utils::*};
|
// TODO: Rewrite VHDL Test
|
||||||
|
// use crate::{core::vhdl_parser::{make_fast_from_design_file, vhdl_parse}, test::{DIGTIAL_IDE_TEST, TESTFILES_TEMP_DIR}, utils::*};
|
||||||
|
|
||||||
#[test]
|
// #[test]
|
||||||
fn test_temp() {
|
// fn test_temp() {
|
||||||
let file_iter = RecursiveFileIterator::new(TESTFILES_TEMP_DIR);
|
// let file_iter = RecursiveFileIterator::new(TESTFILES_TEMP_DIR);
|
||||||
for file in file_iter {
|
// for file in file_iter {
|
||||||
let language_id = get_language_id_by_pathbuf(&file);
|
// let language_id = get_language_id_by_pathbuf(&file);
|
||||||
if language_id == "vhdl" {
|
// if language_id == "vhdl" {
|
||||||
println!("test file: {:?}", file);
|
// println!("test file: {:?}", file);
|
||||||
if let Some(design_file) = vhdl_parse(&file) {
|
// if let Some(design_file) = vhdl_parse(&file) {
|
||||||
if let Some(_) = make_fast_from_design_file(&design_file) {
|
// if let Some(_) = make_fast_from_design_file(&design_file) {
|
||||||
println!("<(^-^)>");
|
// println!("<(^-^)>");
|
||||||
} else {
|
// } else {
|
||||||
eprintln!("error happen when make fast {:?}", file);
|
// eprintln!("error happen when make fast {:?}", file);
|
||||||
}
|
// }
|
||||||
} else {
|
// } else {
|
||||||
eprintln!("error happen when parse {:?}", file);
|
// eprintln!("error happen when parse {:?}", file);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
|
||||||
#[test]
|
// #[test]
|
||||||
fn test_digital_ide_test() {
|
// fn test_digital_ide_test() {
|
||||||
let file_iter = RecursiveFileIterator::new(DIGTIAL_IDE_TEST);
|
// let file_iter = RecursiveFileIterator::new(DIGTIAL_IDE_TEST);
|
||||||
for file in file_iter {
|
// for file in file_iter {
|
||||||
let language_id = get_language_id_by_pathbuf(&file);
|
// let language_id = get_language_id_by_pathbuf(&file);
|
||||||
if language_id == "vhdl" {
|
// if language_id == "vhdl" {
|
||||||
println!("test file: {:?}", file);
|
// println!("test file: {:?}", file);
|
||||||
if let Some(design_file) = vhdl_parse(&file) {
|
// if let Some(design_file) = vhdl_parse(&file) {
|
||||||
if let Some(_) = make_fast_from_design_file(&design_file) {
|
// if let Some(_) = make_fast_from_design_file(&design_file) {
|
||||||
println!("<(^-^)>");
|
// println!("<(^-^)>");
|
||||||
} else {
|
// } else {
|
||||||
eprintln!("error happen when make fast {:?}", file);
|
// eprintln!("error happen when make fast {:?}", file);
|
||||||
}
|
// }
|
||||||
} else {
|
// } else {
|
||||||
eprintln!("error happen when parse {:?}", file);
|
// eprintln!("error happen when parse {:?}", file);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user