fix bigfile parse error | remove vhdl test

This commit is contained in:
light-ly 2024-12-07 15:47:46 +08:00
parent e726fffd99
commit de587096b2
4 changed files with 50 additions and 42 deletions

View File

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

View File

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

View File

@ -506,6 +506,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(
@ -522,6 +528,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;

View File

@ -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);
} // }
} // }
} // }
} // }
} }