This commit is contained in:
锦恢 2024-12-09 19:33:39 +08:00
commit 19fed383b0
4 changed files with 50 additions and 42 deletions

View File

@ -1,5 +1,4 @@
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::{kind_str, HasTokenSpan, Token, TokenAccess, TokenSpan, VHDLParser, VHDLStandard};
@ -64,7 +63,6 @@ pub fn make_fast_from_units(
}
});
info!("get fast {:#?}", hdlparam);
Some(hdlparam)
}

View File

@ -314,7 +314,6 @@ fn do_vhdl_fast(
}
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) {
fast.file_type = file_type.to_string();
// for module in &fast.content {

View File

@ -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
/// 支持遇到错误进行自动修复,然后再解析
pub fn recovery_sv_parse(
@ -523,6 +529,10 @@ pub fn recovery_sv_parse(
let mut reverted_change = false;
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 mut line_start = text.byte_to_line(byte_idx);
let mut line_end = text.byte_to_line(byte_idx) + 1;

View File

@ -2,46 +2,47 @@
#[cfg(test)]
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]
fn test_temp() {
let file_iter = RecursiveFileIterator::new(TESTFILES_TEMP_DIR);
for file in file_iter {
let language_id = get_language_id_by_pathbuf(&file);
if language_id == "vhdl" {
println!("test file: {:?}", file);
if let Some(design_file) = vhdl_parse(&file) {
if let Some(_) = make_fast_from_design_file(&design_file) {
println!("");
} else {
eprintln!("error happen when make fast {:?}", file);
}
} else {
eprintln!("error happen when parse {:?}", file);
}
}
}
}
// #[test]
// fn test_temp() {
// let file_iter = RecursiveFileIterator::new(TESTFILES_TEMP_DIR);
// for file in file_iter {
// let language_id = get_language_id_by_pathbuf(&file);
// if language_id == "vhdl" {
// println!("test file: {:?}", file);
// if let Some(design_file) = vhdl_parse(&file) {
// if let Some(_) = make_fast_from_design_file(&design_file) {
// println!("");
// } else {
// eprintln!("error happen when make fast {:?}", file);
// }
// } else {
// eprintln!("error happen when parse {:?}", file);
// }
// }
// }
// }
#[test]
fn test_digital_ide_test() {
let file_iter = RecursiveFileIterator::new(DIGTIAL_IDE_TEST);
for file in file_iter {
let language_id = get_language_id_by_pathbuf(&file);
if language_id == "vhdl" {
println!("test file: {:?}", file);
if let Some(design_file) = vhdl_parse(&file) {
if let Some(_) = make_fast_from_design_file(&design_file) {
println!("");
} else {
eprintln!("error happen when make fast {:?}", file);
}
} else {
eprintln!("error happen when parse {:?}", file);
}
}
}
}
// #[test]
// fn test_digital_ide_test() {
// let file_iter = RecursiveFileIterator::new(DIGTIAL_IDE_TEST);
// for file in file_iter {
// let language_id = get_language_id_by_pathbuf(&file);
// if language_id == "vhdl" {
// println!("test file: {:?}", file);
// if let Some(design_file) = vhdl_parse(&file) {
// if let Some(_) = make_fast_from_design_file(&design_file) {
// println!("");
// } else {
// eprintln!("error happen when make fast {:?}", file);
// }
// } else {
// eprintln!("error happen when parse {:?}", file);
// }
// }
// }
// }
}