diff --git a/libs/bart_derive/src/scanner.rs b/libs/bart_derive/src/scanner.rs index 2fbbb10..1d817b0 100644 --- a/libs/bart_derive/src/scanner.rs +++ b/libs/bart_derive/src/scanner.rs @@ -101,7 +101,7 @@ fn section_opener<'a>(input: &'a str) -> Result, Error> { let (input, tail) = if input.ends_with('?') { (&input[..input.len()-1], Tail::Conditional) - } else if input.ends_with('.') { + } else if input.ends_with('.') && input.len() > 1 { (&input[..input.len()-1], Tail::Scope) } else { (input, Tail::None) @@ -262,6 +262,15 @@ mod tests { ); } + #[test] + fn bart_tag_matches_iteration_section_opener_dot() { + assert_eq!( + Ok(("", Token::SectionOpener(SectionType::Iteration, name(".").unwrap().1))), + bart_tag("{{#.}}") + ); + } + + #[test] fn bart_tag_matches_negative_iteration_section_opener() { assert_eq!( diff --git a/tests/iteration.rs b/tests/iteration.rs index d37fdb3..7663c20 100644 --- a/tests/iteration.rs +++ b/tests/iteration.rs @@ -62,3 +62,14 @@ fn it_can_iterate_function() { Test { a: 1, b: 2, c: 3 }.to_string() ); } + +#[test] +fn it_can_iterate_dot() { + #[derive(BartDisplay)] + #[template_string="{{#opt}}{{#.}}{{.}}{{/.}}{{/opt}}"] + struct Test { opt: Option> } + assert_eq!( + "123", + Test { opt: Some(vec![1, 2, 3]) }.to_string() + ); +}