parse assertions from regex capture
This commit is contained in:
parent
c691df5ae2
commit
0dfe89f353
1 changed files with 34 additions and 5 deletions
|
|
@ -7,8 +7,7 @@ use tree_sitter::Point;
|
|||
// TODO: It would be cooler to do this with a comments query rather than with a regex
|
||||
// directly.
|
||||
lazy_static! {
|
||||
static ref METADATA_PAIR_REGEX: Regex = Regex::new(r#"(\w+): ([^\s,]+)"#).unwrap();
|
||||
static ref NUMBER_REGEX: Regex = Regex::new(r#"\d+"#).unwrap();
|
||||
static ref METADATA_REGEX: Regex = Regex::new(r#"(\w+): ([^\s,]+), (\d+), (\d+)"#).unwrap();
|
||||
}
|
||||
|
||||
pub struct CaptureInfo {
|
||||
|
|
@ -18,14 +17,44 @@ pub struct CaptureInfo {
|
|||
#[derive(Debug, Eq, PartialEq)]
|
||||
struct Assertion {
|
||||
position: Point,
|
||||
line_numbers: Vec<usize>,
|
||||
capture_class: String,
|
||||
capture_type: String,
|
||||
}
|
||||
|
||||
impl From<regex::Captures<'_>> for Assertion {
|
||||
fn from(re: regex::Captures) -> Assertion {
|
||||
Assertion {
|
||||
capture_class: re.get(1).unwrap().as_str().to_string(),
|
||||
capture_type: re.get(2).unwrap().as_str().to_string(),
|
||||
position: Point {
|
||||
row: re
|
||||
.get(3)
|
||||
.iter()
|
||||
.flat_map(|m| m.as_str().parse::<usize>())
|
||||
.next()
|
||||
.unwrap(),
|
||||
column: re
|
||||
.get(4)
|
||||
.iter()
|
||||
.flat_map(|m| m.as_str().parse::<usize>())
|
||||
.next()
|
||||
.unwrap(),
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn assert_expected_captures(_captures: Vec<CaptureInfo>, path: String) -> Result<()> {
|
||||
let contents = fs::read_to_string(path)?;
|
||||
for m in METADATA_PAIR_REGEX.captures_iter(&contents) {
|
||||
println!("pair: {:?}", m);
|
||||
|
||||
let assertions: Vec<Assertion> = METADATA_REGEX
|
||||
.captures_iter(&contents)
|
||||
.map(|c| Assertion::from(c))
|
||||
.collect();
|
||||
|
||||
for a in assertions {
|
||||
println!("a: {:?}", a);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue