From d21c84abd40a04eb740f51c47c1a2d62384b3e36 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 30 Jun 2020 12:13:08 +0200 Subject: Generalize annotations --- crates/test_utils/src/lib.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'crates/test_utils/src') diff --git a/crates/test_utils/src/lib.rs b/crates/test_utils/src/lib.rs index caf847273..f9d6c6c96 100644 --- a/crates/test_utils/src/lib.rs +++ b/crates/test_utils/src/lib.rs @@ -11,6 +11,7 @@ pub mod mark; mod fixture; use std::{ + convert::TryInto, env, fs, path::{Path, PathBuf}, }; @@ -168,8 +169,10 @@ pub fn extract_annotations(text: &str) -> Vec<(TextRange, String)> { for line in lines_with_ends(text) { if let Some(idx) = line.find("//^") { let offset = prev_line_start.unwrap() + TextSize::of(&line[..idx + "//".len()]); - let data = line[idx + "//^".len()..].trim().to_string(); - res.push((TextRange::at(offset, 1.into()), data)) + let marker_and_data = &line[idx + "//".len()..]; + let len = marker_and_data.chars().take_while(|&it| it == '^').count(); + let data = marker_and_data[len..].trim().to_string(); + res.push((TextRange::at(offset, len.try_into().unwrap()), data)) } prev_line_start = Some(line_start); line_start += TextSize::of(line); @@ -184,15 +187,15 @@ fn test_extract_annotations() { fn main() { let x = 92; //^ def - z + 1 -} //^ i32 + zoo + 1 +} //^^^ i32 "#, ); let res = extract_annotations(&text) .into_iter() .map(|(range, ann)| (&text[range], ann)) .collect::>(); - assert_eq!(res, vec![("x", "def".into()), ("z", "i32".into()),]); + assert_eq!(res, vec![("x", "def".into()), ("zoo", "i32".into()),]); } // Comparison functionality borrowed from cargo: -- cgit v1.2.3