mirror of
https://github.com/supleed2/sv-filelist-parser.git
synced 2025-01-03 10:42:01 +00:00
add support for Filelists in file parser.
This commit is contained in:
parent
90bd07ebf1
commit
a97a6a3468
|
@ -5,12 +5,11 @@ use std::fs;
|
|||
use crate::line_parser;
|
||||
use crate::line_parser::LineType;
|
||||
|
||||
#[derive(Debug)]
|
||||
#[derive(PartialEq, Debug, Default)]
|
||||
pub struct Filelist {
|
||||
pub files: Vec<String>,
|
||||
pub incdirs: Vec<String>,
|
||||
pub defines: HashMap<String, String>,
|
||||
|
||||
pub comments_present: bool,
|
||||
}
|
||||
|
||||
|
@ -23,6 +22,13 @@ impl Filelist {
|
|||
comments_present: false,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn extend(&mut self, other: Filelist) {
|
||||
self.files.extend(other.files);
|
||||
self.incdirs.extend(other.incdirs);
|
||||
self.defines.extend(other.defines);
|
||||
self.comments_present |= other.comments_present;
|
||||
}
|
||||
}
|
||||
|
||||
pub fn parse_file(path: &str) -> Result<Filelist, Box<dyn Error>> {
|
||||
|
@ -44,7 +50,9 @@ pub fn parse_file(path: &str) -> Result<Filelist, Box<dyn Error>> {
|
|||
}
|
||||
}
|
||||
LineType::Comment => filelist.comments_present = true,
|
||||
_ => {}
|
||||
LineType::Filelist(path) => {
|
||||
filelist.extend(parse_file(path)?);
|
||||
},
|
||||
}
|
||||
}
|
||||
Ok(filelist)
|
||||
|
|
23
tests/integration_tests.rs
Normal file
23
tests/integration_tests.rs
Normal file
|
@ -0,0 +1,23 @@
|
|||
extern crate sv_filelist_parser;
|
||||
use std::collections::HashMap;
|
||||
|
||||
#[test]
|
||||
fn simple_test() {
|
||||
let mut defines = HashMap::new();
|
||||
defines.insert("a".to_string(), "bad".to_string());
|
||||
defines.insert("e".to_string(), "f".to_string());
|
||||
defines.insert("c".to_string(), "d".to_string());
|
||||
|
||||
let filelist_exp = sv_filelist_parser::file_parser::Filelist {
|
||||
files : vec!["testcase/file1.sv".to_string(),
|
||||
"testcase/file2.sv".to_string(),
|
||||
"testcase/file3.sv".to_string(),
|
||||
"testcase/file4.sv".to_string(),],
|
||||
incdirs : vec!["testcase/".to_string()],
|
||||
defines : defines,
|
||||
comments_present : true
|
||||
};
|
||||
let filelist = sv_filelist_parser::parse("testcase/files.f")
|
||||
.expect("Error parsing");
|
||||
assert_eq!(filelist_exp, filelist);
|
||||
}
|
Loading…
Reference in a new issue